从 http header 响应获取日期
Getting Date from http header response
好的,我可以使用
访问 HTTP ajax 响应 header
xhr.getAllResponseHeaders();
但它似乎没有得到日期,尽管它在那里:
[Chrome]
**Response Header**
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:8092
Content-Type:application/json; charset=utf-8
**Date:Thu, 15 Jan 2015 16:30:13 GMT**
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/8.0
TotalCount:116
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
代码只显示了这个:
[output on alert xhr.getAllResponseHeaders();]
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
这是 ajax 调用:
$.ajax({
url: url,
type: "GET",
contentType: "application/json;charset=utf-8",
async: true,
success: function (data,status, xhr) {
displayNewData(data);
alert(xhr.getAllResponseHeaders());
},
error: function () {
alert(url);
}
});
有没有办法在响应中获取日期 header?
在您的成功方法中:
success: function (data,status, xhr) {
console.log(xhr.getResponseHeader('Date'));
},
如果响应成功
res=xhr.getResponseHeader('Date');
如果响应失败
res=data.getResponseHeader('Date');
这有帮助:
var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
alert(headers);
您发出 CORS 请求的情况可能是出于安全原因过滤掉了 header。
另请参阅有关 missing response headers in ajax request 的类似问题。
解决方案可能是在服务器响应中设置此 HTTP header:
Access-Control-Expose-Headers: Date
如果您使用的是 Nginx,您可以在 Nginx 配置文件中添加以下代码:
add_header 'Access-Control-Expose-Headers' 'Date';
真实配置示例:
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Expose-Headers' 'Date';
root /usr/local/nginx/html;
index index.html index.htm;
}
重启你的nginx服务后,你可以再次调用getAllResponseHeaders,它会显示"Date"。
好的,我可以使用
访问 HTTP ajax 响应 headerxhr.getAllResponseHeaders();
但它似乎没有得到日期,尽管它在那里:
[Chrome]
**Response Header**
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:8092
Content-Type:application/json; charset=utf-8
**Date:Thu, 15 Jan 2015 16:30:13 GMT**
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/8.0
TotalCount:116
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
代码只显示了这个:
[output on alert xhr.getAllResponseHeaders();]
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
这是 ajax 调用:
$.ajax({
url: url,
type: "GET",
contentType: "application/json;charset=utf-8",
async: true,
success: function (data,status, xhr) {
displayNewData(data);
alert(xhr.getAllResponseHeaders());
},
error: function () {
alert(url);
}
});
有没有办法在响应中获取日期 header?
在您的成功方法中:
success: function (data,status, xhr) {
console.log(xhr.getResponseHeader('Date'));
},
如果响应成功
res=xhr.getResponseHeader('Date');
如果响应失败
res=data.getResponseHeader('Date');
这有帮助:
var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
alert(headers);
您发出 CORS 请求的情况可能是出于安全原因过滤掉了 header。
另请参阅有关 missing response headers in ajax request 的类似问题。 解决方案可能是在服务器响应中设置此 HTTP header:
Access-Control-Expose-Headers: Date
如果您使用的是 Nginx,您可以在 Nginx 配置文件中添加以下代码:
add_header 'Access-Control-Expose-Headers' 'Date';
真实配置示例:
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Expose-Headers' 'Date';
root /usr/local/nginx/html;
index index.html index.htm;
}
重启你的nginx服务后,你可以再次调用getAllResponseHeaders,它会显示"Date"。