www.baike369.com
百科369 > Ajax教程 > XMLHttpRequest(XHR)对象请求报头的隐患

XMLHttpRequest(XHR)对象请求报头的隐患


XMLHttpRequest(XHR)对象请求报头的隐患

根据来自W3C的最新的XMLHttpRequest规范,出于安全的原因,假定浏览器会忽略使用setRequestHeader()方法的某些报头。

应该忽略的setRequestHeader值如下表所示:

Accept-CharsetDateTE
Accept-Encoding Host Trailer
Content-Length Keep-Alive Transfer-Encoding
Expect Referer Upgrade

同样,当设置下表中的报头时,setRequestHeader()指定的值应该取代任何已经存在的值:

AuthorizationDelta-BaseIf-Unmodified-Since
Content-Base Depth Max-Forwards
Content-Location Destination MIME-Version
Content-MD5 ETag Overwrite
Content-Range From Proxy-Authorization
Content-Type If-Modified-Since SOAPAction
Content-Version If-Range Timeout

最后,其它所有通过这个方法设置的报头都假定:如果值已经定义的话,那么就把值追加到当前正在发送的值中去,或者如果没有定义的话,就创建一个新的值。例如:

xhr.setRequestHeader("User-Agent","Ajax Browser ");

在这里,数据应该添加到存在的User-Agent报头中,而不是取代它。

虽然规范可能表示的是某种意思,但是实际浏览器支持的设置的报头似乎是另外的意思,换句话说,也就是说这是不太稳定的。例如,IE、Safari和Opera发送XHR请求中的Referer报头,但是按照这些浏览器的规范,该报头不是可以设置的。但是,某些版本的Firefox(1.5)不会正常发送这些报头,但是允许设置它。对于其它的报头,因为Firefox的一致性或者变得越来越接近,而其它的浏览器则没有这样做,所以情况可能是相反的。

Copyright© 2011-2016 www.baike369.com All Rights Reserved