3

问候,

我正在尝试将 CORS ( http://www.w3.org/TR/2009/WD-cors-20090317/#access-control-allow-methods-header ) 用于 Safari 上的应用程序,当我尝试阅读时来自 XMLHTTPRequest 的响应标头,我只收到 Content-Type。其他非常标准的标题都没有通过,我不知道如何让它工作。

任何人都会碰巧知道如何解决这个问题?这可能是 WebKit 错误吗?

编辑

这是我与 nGinx 一起使用的配置:

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers Cache-Control,Pragma,Date;
add_header Access-Control-Allow-Methods GET,POST;
4

4 回答 4

1

为了将标头公开给 JS,您需要将标头设置为要公开的Access-Control-Expose-Headers标头的逗号分隔列表。

不幸的是,此标头的支持很差。Mozilla 只在 Firefox 4 中实现了它,Webkit 到目前为止还没有实现它。我不确定 IE8 及更高版本(谷歌没有发现任何有用的东西,我也没有他们自己测试)。

(另请参见XMLHttpRequest 的 getResponseHeader() 的限制?

于 2011-10-05T14:15:58.503 回答
0

我昨天也遇到了同样的情况。https://stackoverflow.com/users/713326/gijs给了您正确的答案,但是您必须注意另一部分特定于 nginx 的部分。“添加标头”仅在服务响应成功(200、204、301、302 或 304)的情况下有效。您必须自定义构建 nginx 以包含 HttpHeadersMoreModule ( http://wiki.nginx.org/HttpHeadersMoreModule )。在您必须将 add_header 替换为 more_set_headers 之后。

例子:

    more_set_headers 'Access-Control-Allow-Origin: $http_origin';
    more_set_headers 'Access-Control-Allow-Credentials: false';
    more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, HEAD, PUT, PATCH, DELETE';
    more_set_headers 'Access-Control-Allow-Headers:Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept,Authorization;
    more_set_headers 'Access-Control-Expose-Headers: Location';
于 2013-02-02T04:56:13.197 回答
0

要求:

$.ajax({
            url: "http://localhost:8079/students/add/",
            type: "POST",
            crossDomain: true,
            data: JSON.stringify(somejson),
            dataType: "json",
            success: function (response) {
                var resp = JSON.parse(response)
                alert(resp.status);
            },
            error: function (xhr, status) {
                alert("error");
            }
        });

回复:

response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")

return response
于 2013-12-30T10:49:22.780 回答
0

您是否验证过您的服务器实际上正在发出 Cache-Control、Pragma 和 Date 标头?也许在客户端上设置一个 Wireshark 跟踪以查看正在交换的实际 HTTP 标头?

于 2011-01-22T16:25:11.407 回答