在我的服务器上(用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-Length
,Date
和Access-Control-Allow-Origin
;这些都返回null
。有效的唯一标头是Content-Type
。
如果我使用getAllResponseHeaders()
,则会返回仅包含Content-Type: text/csv
的字符串。
如何访问非Content-Type
的其他标头?我看到3年前有一个bug与此有关,但只影响了Firefox。我使用的是Chrome v 44.0.2403.130(64位)。
答案 0 :(得分:5)
您有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-
前缀作为您的非实验性非标准标题。