何时为 Ajax 和 XMLHttpRequest 使用 setRequestHeader
When to use setRequestHeader for Ajax and XMLHttpRequest
- 我是否应该为 ajax POST 手动将
setRequestHeader
设置为 'application/x-www-form-urlencoded'?
- 我是否应该为 ajax 文件上传手动将
setRequestHeader
设置为 'multipart/form-data'?
- 关于
setRequestHeader
,XMLHttpRequest 和 XMLHttpRequest2 是否有不同的要求?
常识告诉我,浏览器可以根据 .open() 和 .send() 方法的值轻松决定 headers 应该发送什么。只有当我有一些自定义 headers 要发送时,才应该使用 setRequestHeader
。但这里真的是这样吗?
我正在寻找 "what's really going on under the hood" 类型的答案!
.
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 headers。许多教程建议发送那些 headers。但实际上这是错误的。浏览器将那些 headers 视为 unsafe
并发送内部计算的值。
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
编辑2:
就像在 this SO question 中一样,当我删除 content-type 和其他无意义的 headers.
时,一切都开始工作了
现在我真的很想知道 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 的工作已经停止。
- 我是否应该为 ajax POST 手动将
setRequestHeader
设置为 'application/x-www-form-urlencoded'? - 我是否应该为 ajax 文件上传手动将
setRequestHeader
设置为 'multipart/form-data'? - 关于
setRequestHeader
,XMLHttpRequest 和 XMLHttpRequest2 是否有不同的要求?
常识告诉我,浏览器可以根据 .open() 和 .send() 方法的值轻松决定 headers 应该发送什么。只有当我有一些自定义 headers 要发送时,才应该使用 setRequestHeader
。但这里真的是这样吗?
我正在寻找 "what's really going on under the hood" 类型的答案!
.
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 headers。许多教程建议发送那些 headers。但实际上这是错误的。浏览器将那些 headers 视为 unsafe
并发送内部计算的值。
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
编辑2:
就像在 this SO question 中一样,当我删除 content-type 和其他无意义的 headers.
时,一切都开始工作了
现在我真的很想知道 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 的工作已经停止。