【发布时间】:2022-04-09 22:00:31
【问题描述】:
一个奇怪的 CORS 问题...
我的 example.com 服务器中有代码,它为所有 POST 和 GET 请求返回 Access-Control-Allow-Origin 响应标头,其中传递了 Origin 请求标头并且它具有值一个 example.com 子域(superman.example.com、batman.example.com 等)。
我现在需要能够通过 cookie 进行 AJAX 调用,因此如果请求包含 cookie,我需要能够返回 Access-Control-Allow-Credentials 响应标头。
如果我看到 Cookie 请求标头,我可以添加额外的检查以返回 Access-Control-Allow-Credentials 响应标头,但为简单起见,我想知道 always是否有任何缺点> 返回来自我的子域的所有 GET/POST 请求的 Access-Control-Allow-Credentials 响应标头,其中指定了 Origin 请求标头。
这是我的代码(它是 Tcl iRule,FWIW):
when HTTP_REQUEST priority 200 {
if { ( [HTTP::method] equals "OPTIONS" ) and
( [HTTP::host] ends_with "example.com"] ) and
( [HTTP::header exists "Access-Control-Request-Method"]) } {
HTTP::respond 200 "Access-Control-Allow-Origin" [HTTP::header "Origin"] \
"Access-Control-Allow-Methods" "POST, GET, OPTIONS" \
"Access-Control-Allow-Headers" [HTTP::header "Access-Control-Request-Headers"] \
"Access-Control-Max-Age" "86400"
} elseif { ( [HTTP::host] ends_with "example.com"] ) and
( [HTTP::header exists "Origin"]) } {
# CORS GET/POST requests - set cors_origin variable
set cors_origin [HTTP::header "Origin"]
}
}
when HTTP_RESPONSE {
# CORS GET/POST response - check cors_origin variable set in request
if { [info exists cors_origin] } {
HTTP::header insert "Access-Control-Allow-Origin" $cors_origin
HTTP::header insert "Access-Control-Allow-Credentials" "true"
}
}
我知道,如果我返回 Access-Control-Allow-Credentials 响应标头,我必须指定一个命名(非通用)Access-Control-Allow-Origin 标头(以及 那个可能有 Vary 标头问题),但我还有什么需要注意的吗?
【问题讨论】:
-
没有人回答这个问题,即使我添加了赏金:( 我假设没有缺点,但如果将来有人读到这个问题并且知道不同,请添加评论/跨度>
-
Ping :) 对我的回答有什么想法吗?
标签: security cors http-headers