1

我需要添加一些常见的额外信息(需要与我们的大多数 http 请求一起发送)来跨域 http 请求,额外的数据是设备信息或位置信息之类的东西。我们目前正在为这些信息使用自定义 http 标头,但是自定义标头会使浏览器在真正的 http 请求之前发送预检请求,因此出于性能考虑,我们希望删除预检请求。我们首先考虑使用cookie,但是由于请求是跨域的,所以我们不能用javascript为我们的API的域设置cookie。然后我搜索了文档,根据Mozilla 文档

特别是,在以下情况下会预检请求:

它使用 GET、HEAD 或 POST 以外的方法。此外,如果 POST 用于发送 Content-Type 不是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 的请求数据,例如,如果 POST 请求向服务器发送 XML 有效负载使用 application/xml 或 text/xml,然后预检请求。

它在请求中设置自定义标头(例如,请求使用诸如 X-PINGOTHER 之类的标头)

所以我想如果我使用一个很少使用的标准http头:“From”头,它不会触发选项请求。但是在我测试之后,我发现我错了,“From”标头仍然触发选项请求。

所以我有两个问题:

  1. 为什么标准的 http 标头会触发预检请求?
  2. 我应该如何在不触发预检请求的情况下发送额外信息?

任何帮助将不胜感激。

4

1 回答 1

3

阅读同一页面的上述部分,了解什么构成不需要预检的“简单请求”:

除了由用户代理自动设置的标题(例如ConnectionUser-Agent等)之外,唯一允许手动设置的标题是

  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type

“自定义标头”并不意味着“非标准标头”,它意味着除了这四个之外,浏览器不会自动设置的任何标头。

于 2015-12-04T03:23:59.890 回答