从jqXHR获取所有响应头

在我的服务器上(用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: text/csv

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

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

从规格 :

跨源资源共享规范过滤了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-前缀作为您的eXperimental非标准标题。