思路:采用异步请求的方式,发送请求,获取HTTP请求的response头,头部中包含时间,使用getResponseHeader('Date')即可。
注意:以下任何一种方法都不精确,因为请求包的传输时间依赖于网络状况,在较差网络下会有误差。方法三允许人工调整误差时间。
1.方法一
通过发送GET请求同步获取时间
var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", location.href, false); //同步 xmlHttp.setRequestHeader("Range", "bytes=-1"); xmlHttp.send(null); severtime=new Date(xmlHttp.getResponseHeader("Date"));
2.方法二
通过发送HEAD请求异步获取时间。
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);
这种方法依赖服务器配置,大多数服务器出于安全考虑会禁止这种HEAD请求,返回405错误。在控制台内可看到报错,但是不影响结果嘛。
3.方法三 插件
在github上查到一个写好的比较完整的插件,可以配置选择同步或者异步方式。该插件采用GET方式。