总是返回Access-Control-Allow-Credentials是否有缺点?

时间:2015-09-15 20:25:05

标签: cors irule

一个奇怪的CORS问题......

我的 example.co m服务器中有代码,它返回所有POST&的Access-Control-Allow-Origin响应头。 GET请求传递Origin请求标头的位置,它的值为example.com子域( superman.example.com batman.example.com 等)。

我现在需要能够通过cookie进行AJAX调用,所以如果请求包含cookie,我需要能够返回 Access-Control-Allow-Credentials 响应头。

如果我看到Cookie请求标头,我可以添加一个额外的检查来返回Access-Control-Allow-Credentials响应标头,但为了简单起见,我想知道总是从我的子域返回所有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标题问题),但还有什么我需要注意的吗?

0 个答案:

没有答案