- 我是否应该为 ajax POST 手动将
setRequestHeader
设置为“application/x-www-form-urlencoded”? - 我是否应该手动将
setRequestHeader
设置为“multipart/form-data”以进行 ajax 文件上传? - 对于
setRequestHeader
,XMLHttpRequest 和 XMLHttpRequest2 有不同的要求吗?
常见的编程意识告诉我,浏览器可以根据 .open() 和 .send() 方法的值轻松决定应发送哪些 header 。仅当我有一些自定义 header 要发送时才应使用 setRequestHeader
。但这里的情况真的是这样吗?
我正在寻找“幕后到底发生了什么”类型的答案!
.
xhttp.setRequestHeader('Content-type', 'multipart/form-data'); // for files
xhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); // for POST escaped 'form' data
编辑:
我可以类似地要求连接或内容长度 header 。许多教程建议发送这些 header 。但实际上这是错误的。浏览器将这些 header 视为不安全
并发送内部计算的值。
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
编辑2:
如 this SO question 所示当我删除内容类型和其他无意义的标题时,一切都开始工作。
现在我真的很想知道 setRequestHeader
的底层是什么以及我什么时候应该真正使用它!
最佳答案
Should I ever manually set setRequestHeader to 'application/x-www-form-urlencoded' for ajax POST?
是的。如果您传递 send()
一个字符串(您将用于 application/x-www-form-urlencoded),则默认内容类型为 text/plain。
Should I ever manually set setRequestHeader to 'multipart/form-data' for ajax file upload?
没有。如果您使用 multipart/form-data 进行文件上传,那么您将使用 FormData 对象,XHR 将为您设置它。
如果您将其设置为 multipart/form-data
那么您将忽略边界信息,并且它将不起作用。
Are there different requirements for XMLHttpRequest and XMLHttpRequest2
XHR 2 的工作已停止。
关于javascript - 何时对 Ajax 和 XMLHttpRequest 使用 setRequestHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181520/