每个HTTP 请求和响应都会携带一些头部字段,这些字段可能对开发者有用。XHR 对象会通过一
些方法暴露与请求和响应相关的头部字段。
默认情况下,XHR 请求会发送以下头部字段。
Accept:浏览器可以处理的内容类型。
Accept-Charset:浏览器可以显示的字符集。
Accept-Encoding:浏览器可以处理的压缩编码类型。
Accept-Language:浏览器使用的语言。
Connection:浏览器与服务器的连接类型。
Cookie:页面中设置的Cookie。
Host:发送请求的页面所在的域。
Referer:发送请求的页面的URI。注意,这个字段在HTTP 规范中就拼错了,所以考虑到兼容
性也必须将错就错。(正确的拼写应该是Referrer。)
User-Agent:浏览器的用户代理字符串。
虽然不同浏览器发送的确切头部字段可能各不相同,但这些通常都是会发送的。如果需要发送额外
的请求头部,可以使用setRequestHeader()方法。这个方法接收两个参数:头部字段的名称和值。
为保证请求头部被发送,必须在open()之后、send()之前调用setRequestHeader(),如下面的例
子所示:
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
alert(xhr.responseText);
} else {
alert("Request was unsuccessful: " + xhr.status);
}
}
};
xhr.open(“get”, “example.php”, true);
xhr.setRequestHeader(“MyHeader”, “MyValue”);
xhr.send(null);
服务器通过读取自定义头部可以确定适当的操作。自定义头部一定要区别于浏览器正常发送的头部,
否则可能影响服务器正常响应。有些浏览器允许重写默认头部,有些浏览器则不允许。
可以使用getResponseHeader()方法从XHR 对象获取响应头部,只要传入要获取头部的名称即
可。如果想取得所有响应头部,可以使用getAllResponseHeaders()方法,这个方法会返回包含所
有响应头部的字符串。下面是调用这两个方法的例子:
let myHeader = xhr.getResponseHeader(“MyHeader”);
let allHeaders xhr.getAllResponseHeaders();
服务器可以使用头部向浏览器传递额外的结构化数据。getAllResponseHeaders()方法通常返回
类似如下的字符串:
Date: Sun, 14 Nov 2004 18:04:03 GMT
Server: Apache/1.3.29 (Unix)
Vary: Accept
X-Powered-By: PHP/4.3.8
Connection: close
Content-Type: text/html; charset=iso-8859-1
通过解析以上头部字段的输出,就可以知道服务器发送的所有头部,而不需要单独去检查了。