【发布时间】:2015-09-19 19:16:00
【问题描述】:
- 我是否应该手动将
setRequestHeader设置为 'application/x-www-form-urlencoded' 用于 ajax POST? - 我是否应该手动将
setRequestHeader设置为“multipart/form-data”来上传 ajax 文件? - 对于
setRequestHeader,XMLHttpRequest 和 XMLHttpRequest2 有不同的要求吗?
编程常识告诉我,浏览器可以根据 .open() 和 .send() 方法的值轻松决定应该发送哪些标头。只有当我有一些自定义标题要发送时,才应该使用setRequestHeader。但这里真的是这样吗?
我正在寻找“引擎盖下到底发生了什么”类型的答案!
.
xhttp.setRequestHeader('Content-type', 'multipart/form-data'); // for files
xhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); // for POST escaped 'form' data
编辑:
我可以类似地要求 Connection 或 Content-length 标头。许多教程建议发送这些标头。但在实践中这是错误的。浏览器将这些标头视为unsafe 并发送内部计算的值。
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
编辑2:
就像在 this SO question 中一样,当我删除 content-type 和其他无意义的标头时,一切都开始工作了。
现在我真的很想知道setRequestHeader 的底层是什么,我应该什么时候真正使用它!
【问题讨论】:
标签: javascript ajax http-headers