【发布时间】:2014-02-16 05:20:59
【问题描述】:
为什么在以下最小示例中jqXHR.getAllResponseHeaders() 没有返回Etag 标头?
运行:node etag-server.js(然后访问http://localhost:8080/)
etag-server.js
var fs = require('fs'),
http = require('http');
var webServer = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/html"});
response.end(fs.readFileSync('frontend.html'));
});
var apiServer = http.createServer(function (request, response) {
response.writeHead(200, {
'Access-Control-Allow-Origin': 'http://localhost:8080',
'Cache-Control': 'no-cache',
'Content-Type': 'application/json; charset=utf-8',
'Etag': 123,
'Expires': -1,
'Pragma': 'no-cache'
});
response.end(JSON.stringify({ data: [1, 2, 3] }));
});
webServer.listen(8080);
apiServer.listen(8081);
frontend.html
<!DOCTYPE html>
<html>
<head>
<title>Etag header not returned from jQuery.ajax() cross-origin XHR</title>
<script src="//code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$.ajax('//localhost:8081/')
.done(function (data, textStatus, jqXHR) {
$('pre').text(jqXHR.getAllResponseHeaders());
})
.fail(function (jqXHR, textStatus, errorThrown) { $('pre').text(textStatus); });
});
</script>
</head>
<body>
<pre></pre>
</body>
</html>
页面输出
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Pragma: no-cache
Etag 去哪儿了?它们被发送到浏览器:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://localhost:8080
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Etag: 123
Expires: -1
Pragma: no-cache
Date: Sat, 25 Jan 2014 02:20:47 GMT
Connection: keep-alive
Transfer-Encoding: chunked
(由 Firebug 报告)
【问题讨论】:
标签: jquery node.js xmlhttprequest cross-domain