跨域导致的 OPTIONS 请求,有必要规避吗

2022-07-26 15:20:48 +08:00
 wtfedc

目前有个前端打点的 POST JSON 接口,每个客户端 5s 请求一次,因为前后端域名不是同一个,每次都会有 options 请求,不管是前端控制台还是后端日志,看着很不舒服,另一方面,如果请求量大,感觉会有无谓的性能消耗。


看微信读书的打点也是个 POST 接口,不过人家页面和接口,用的相同的域名。


我这边换域名是不现实了,调整方案想到两个:

  1. 改成 GET 请求,奈何信息堆起来有点多,拼接起来看上去很乱
  2. 限制 header 字段信息,修改 content-type ,弃用 application/json 格式,又要重新写鉴权中间价

大家有什么好的方式吗

CORS 预检请求

1241 次点击
所在节点    问与答
9 条回复
kyuuseiryuu
2022-07-26 15:30:01 +08:00
网关层直接所有 option 请求拦截返回 200 就好了呗。
wtfedc
2022-07-26 15:36:20 +08:00
@kyuuseiryuu 确实是个思路[👍]
yin1999
2022-07-26 15:54:49 +08:00
预检请求可以设置缓存时间啊,缓存两小时已经能减少很多请求了: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Max-Age
exonuclease
2022-07-26 16:12:55 +08:00
至少客户端不要乱搞 跨域请求发 options 是标准行为 至于服务端收到了你爱干啥干啥
wtfedc
2022-07-26 16:30:43 +08:00
@yin1999 又涨姿势了,看了下 nginx 给 access-control-max-age 了 43200 秒,不过 query 里边放了时间戳,缓存没用上 [掀桌子]
wtfedc
2022-07-26 16:32:33 +08:00
@exonuclease 流程上 options 确实是正经的
opengg
2022-07-26 18:22:14 +08:00
前端重写 header ,在 NGINX 上用 proxy_set_header() 恢复正确的 header ,除此之外一切都不需要变。
billzhuang
2022-07-26 18:22:21 +08:00
我也是加大缓存时间。
des
2022-07-26 18:34:14 +08:00
前端打点为什么不用 content-type plain/text

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/868803

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX