HTTP报头(HTTP Header)是HTTP通信时的一些元数据(Metadata),用来让服务器和客户端达成一些共识,比如客户端的版本、通信内容的格式等。
在使用XmlHttpRequest时,也可以设置或读取HTTP报头,这时可以使用
setRequestHeader方法 和 getResponseHeader方法
先来看setRequestHeader(header, value)方法,它可以用来设置所发出的数据包的报头,比如
|
setRequestHeader("Accept-Charset", "utf-8"); |
设置了Accept-Charset报头为UTF-8,也就是表明客户端支持UTF-8格式的内容,服务器为根据这个设置,来预处理响应的数据包。详细的HTTP报头的定义,可以参考RFC2616的第14节。
和setRequestHeader相反,getResponseHeader(header)可用于查询服务器返回的数据包的报头:
|
var value = getResponsetHeader("Content-Encoding"); |
假设value的值是"gzip",则说明服务器返回的内容,是使用gzip格式压缩的。
以下是一个样例:
|
var xhr = NewXmlHttpRequest(); xhr.open("GET", "http://leonax.net/", false); //Pretend to be safari on iPhone xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (iPhone; U; us; CPU iPhone OS 4_2_1 like Mac OS X; us) " + "AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148" + "a Safari/6533.18.5"); xhr.send(); alert("iPhone Content length = " + xhr.responseText.length); xhr.open("GET", "http://leonax.net/", false); //Pretend to be a normal browser on PC xhr.send(); alert("IE Content length = " + xhr.responseText.length); |
输出为:
iPhone Content length = 30317
IE Content length = 63729
这就说明http://leonax.net/在响应不用的客户端时,返回的数据不一样。
顺便提一下,还有一个方法是getAllResponseHeaders(),可用于获取服务器返回的数据包中所有的报头。
顺便再提一下,一些影响安全性的报头,如Referrer和Content-Length,是不能使用setRequestHeader来设置的。