从jqXHR获取所有响应头

时间:2015-08-10 15:56:59

标签: javascript jquery ajax

在我的服务器上(用Go编写),我正在发送一个自定义标题字段,当我进行ajax调用时,我正在尝试读取该字段。

$.ajax({
        url: url,
        success: function(data, status, request) {
            console.log("Custom field: " + request.getResponseHeader('Custom-Header')); 

            // doing stuff with data
        }
});

回复

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Custom-Header: some,comma,separated,stuff,here
Content-Type: text/csv
Date: Mon, 10 Aug 2015 15:42:34 GMT
Content-Length: 1379

这将始终返回null。我尝试将getResponseHeader用于我已确认在响应数据包中的常规标头,例如Content-LengthDateAccess-Control-Allow-Origin;这些都返回null。有效的唯一标头是Content-Type

如果我使用getAllResponseHeaders(),则会返回仅包含Content-Type: text/csv的字符串。

如何访问非Content-Type的其他标头?我看到3年前有一个bug与此有关,但只影响了Firefox。我使用的是Chrome v 44.0.2403.130(64位)。

1 个答案:

答案 0 :(得分:5)

您有Access-Control-Allow-Origin,这意味着这是一个交叉来源请求。

来自the specification

  

跨域资源共享规范过滤了getAllResponseHeaders()为跨源请求公开的响应头。

您需要使用Access-Control-Expose-Headers明确地将标头提供给跨源请求。

来自MDN的示例:

Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header

所以:

Access-Control-Expose-Headers: Custom-Header

也就是说,请使用X-前缀作为您的非实验性非标准标题。