我正在尝试实现简单的xhr抽象,并在尝试设置POST的标头时收到此警告.我认为它可能与在单独的js文件中设置标题有关,因为当我在.html文件中的标记中设置它时,它工作正常.POST请求工作正常,但我收到此警告,我很好奇为什么.我得到这样的警告两个
content-length
和connection
头,但仅在WebKit的浏览器(Chrome浏览器5测试版和Safari 4).在Firefox中,我没有收到任何警告,Content-Length标头设置为正确的值,但Connection设置为keep-alive而不是close,这让我觉得它也忽略了我的setRequestHeader调用并生成它自己的.我没有在IE中试过这段代码.这是标记和代码:
test.html
:
jsfile.js
:
function Xhr(method, url, async, data, callback) { var x; if(window.XMLHttpRequest) { x = new XMLHttpRequest(); x.open(method, url, async); x.onreadystatechange = function() { if(x.readyState === 4) { if(x.status === 200) { var data = { text: x.responseText, xml: x.responseXML }; callback.call(this, data); } } } if(method.toLowerCase() === "post") { x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); x.setRequestHeader("Content-Length", data.length); x.setRequestHeader("Connection", "close"); } x.send(data); } else { // ... implement IE code here ... } return x; }
bobince.. 64
它也忽略了我的setRequestHeader调用并生成它自己的
是的,标准说它必须:
出于安全原因,如果标题是[...],则应终止这些步骤
连接
内容长度
弄乱这些可能会暴露各种请求走私攻击,因此浏览器总是使用自己的值.没有必要或没有理由尝试设置请求长度,因为浏览器可以根据您传递的数据长度准确地执行此操作send()
.
它也忽略了我的setRequestHeader调用并生成它自己的
是的,标准说它必须:
出于安全原因,如果标题是[...],则应终止这些步骤
连接
内容长度
弄乱这些可能会暴露各种请求走私攻击,因此浏览器总是使用自己的值.没有必要或没有理由尝试设置请求长度,因为浏览器可以根据您传递的数据长度准确地执行此操作send()
.