javascript - 何时对 Ajax 和 XMLHttpRequest 使用 setRequestHeader

标签 javascript ajax http-headers

  1. 我是否应该为 ajax POST 手动将 setRequestHeader 设置为“application/x-www-form-urlencoded”?
  2. 我是否应该手动将 setRequestHeader 设置为“multipart/form-data”以进行 ajax 文件上传?
  3. 对于 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/

相关文章:

javascript - 使用 javascript 的注册表单

javascript - Rails jquery ajax 请求未触发

javascript - WordPress 计算器表单无需重新提交并使用自定义字段值

java - JSoup 获取内容类型然后获取数据

swift - 下载前获取放置在远程服务器上的图像的大小

javascript - 在 React 组件类中看不到 props 属性

javascript - 为什么我的 PhoneGap 应用程序中的导航器对象为空?

javascript - 导航器振动破解 ios 浏览器上的代码

javascript - 如何使用 Ajax 将图像添加到 MySQL

javascript - 是否应该使用响应 header (即 400)来指示错误(特别是 x-editable)