我有一个接受 CORS 请求的 Web 服务器。来自该服务器的所有响应都附加了一个名为 X-Server-Version 的自定义标头。
此自定义标头列在 CORS 预检响应中的 Access-Control-Expose-Headers 标头中(请参阅跨域资源共享 GET: 'refused to get unsafe header "etag"' from Response)。使用 ngrep 我捕获了响应,如下所示。
HTTP/1.1 200 OK..Server: Apache-Coyote/1.1..Access-Control-Allow-Headers: accept, origin, content-type..Access-Control-Allow-Origin: *..Access-Control-Expose-Headers: X-Server-Version..X-Server-Version: 1.0-SNAPSHOT..Access-Control-Allow-Methods: POST..Content-Length: 0..Date: Wed, 10 Jul 2013 21:05:58 GMT....
这是一个简单的 Javascript 应用程序,它调用启用了 CORS 的端点。
<html>
<head>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
$.ajax({
type: "POST",
url: "http://server",
data: '{"value":"whatever"}',
success: function(data, textStatus, jqXHR) {
console.log(jqXHR.getAllResponseHeaders());
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest.getAllResponseHeaders())
},
contentType:"application/json; charset=utf-8",
});
</script>
</head>
<body>
</body>
</html>
无论此调用成功还是失败,getAllResponseHeaders() 都不会为 Chrome 28 或 Firefox 22 列出此自定义标头。ngrep 还会确认该标头存在于对浏览器的响应中。
HTTP/1.1 200 OK..Server: Apache-Coyote/1.1..Access-Control-Allow-Origin: *..X-Server-Version: 1.0-SNAPSHOT..Content-Encoding: gzip..Content-Type: application/json..Content-Length: 7
406..Date: Wed, 10 Jul 2013 21:09:11 GMT..
有谁知道是否可以从 jQuery ajax 调用访问自定义标头?