Javascript CORS/xhr.getRequestHeaders

Javascript CORS/xhr.getRequestHeaders,javascript,webkit,mobile-webkit,cors,Javascript,Webkit,Mobile Webkit,Cors,您好 我正在尝试对Safari上的应用程序使用CORS(),当我尝试从XMLHTTPRequest读取响应头时,我只收到内容类型。其他非常标准的头文件都无法通过,我也不知道如何让它工作 谁会碰巧知道如何解决这个问题?这可能是WebKit的bug吗 编辑 以下是我在nGinx中使用的配置: add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers Cache-Control,Pragma,Da

您好

我正在尝试对Safari上的应用程序使用CORS(),当我尝试从XMLHTTPRequest读取响应头时,我只收到内容类型。其他非常标准的头文件都无法通过,我也不知道如何让它工作

谁会碰巧知道如何解决这个问题?这可能是WebKit的bug吗

编辑

以下是我在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;

您是否验证了您的服务器实际上正在发送缓存控件、Pragma和Date头?也许在客户端上设置Wireshark跟踪以查看正在交换的实际HTTP头?

为了将头公开给JS,需要将设置为要公开的头的逗号分隔列表

不幸的是,此标头的支持较差。Mozilla目前只在Firefox4、Webkit中实现了它。我不确定IE8及以上版本(谷歌没有发现任何有用的东西,我也没有自己测试它们)


(另见例句)

我昨天也遇到过同样的情况。给了你正确的答案,但还有一部分是特定于nginx的,你必须小心。 “添加头”仅在来自服务的响应成功(200、204、301、302或304)的情况下工作。您必须进行nginx的定制构建,以包括HttpHeadersMoreModule (). 在您必须用更多的\u set\u头替换add\u头之后

例如:

    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';
请求:

$.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

您的服务器使用什么?我正在使用Ruby和Sinatra进行这项工作,虽然最初设置起来有点困难。nGinx。日期标题已存在,我将使用当前配置更新我的问题。我怀疑这是您必须解决的第一个问题:。飞机起飞前不能用。如果您确保没有发送X-Header,您可能可以获得基本的get-working。我尝试了preflight,但它也不起作用。。。此外,日期标题是相当标准的,我不想通过在不同的字段中有两倍的相同日期信息来增加标题的大小。你有没有找到解决方法?上周我遇到了完全相同的问题。CORS请求通过后,我得到了数据——但我无法访问响应者。对我来说有点问题,因为我使用的API返回201:s,位置头指向资源;)日期标题出来了,这是我目前唯一担心的。但它不能通过JS实现;只有内容类型标题可用,对标题的所有其他访问被标记为不安全。应使用该信息更新问题。。。我当时发现了这个,只是变得懒惰了:但是我认为当我们尝试它时,它不起作用。我很快会试试看会发生什么。