Ajax HTTP Head法
原理:
一般服务器在发送静态页面的时候(apache, nginx,
lighttpd就目前所知)都是会在 HTTP
头里带一个Date的头信息的,那么我用Ajax直接取头信息里的Date不就OK了吗!)
PS:但ajax发请求出去不是会有正文返回吗,那正文的内容比请求一次动态页面的代价可高多了,是这样的吗?)
实现:
var xhr = new XMLHttpRequest(); if( !xhr ){ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.open("HEAD",location.href,true); xhr.onreadystatechange=function(){ if( xhr.readyState == 4 && xhr.status == 200 ){ alert(xhr.getResponseHeader("Date")); } } xhr.send(null);
解释:
常见的Ajax请求方法为GET,POST而这两种请求都可能会返回正文体,而发HEAD头则只会返回对应的头信息,不会有正文,且只要javascript可以执行,就可以取当前域的地址作为请求地址,有一定的通用性,且避免了跨域的问题。
实践:
以上代码的完整版在ie6,7,8,9,opera,chrome,firefox下测试通过
适用范围:
javascript正常执行的作用域是http/https下生效
其他:
服务器一定会返回Date头信息吗?
这个是RFC里要求服务器必须实现的,只有在101,103,500等几个状态码的情况下服务器才可以不返回Date头.但我们的location.href不在这个情况之列,所以只要当前javascript代码能正常执行(http方式),那么这个时间就可以取得到,定制的服务器不在本文讨论范围之内。
原文:http://www.cnblogs.com/weekend001/p/3654084.html