浏览器跨域请求,为什么简单请求直接就发送了,非简单请求还要先发一个 options 方法的预检请求?

讨论 未结 13 61
fstar
fstar 会员 2022年4月25日 15:16 发表
<p>我觉得这是不是设计有问题。</p> <p>如果我来设计的话,不分什么简单不简单请求,全都先发一个 options 。或者全都直接直接发原请求。</p> <p>这样不上不下的设计真的很奇怪啊。</p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
13个回复
  • vance123
    2022年4月25日 15:16
    为了前向兼容,前端里很多奇奇怪怪的地方都是有历史原因的
    0 0
  • sujin190
    2022年4月25日 15:16
    get 单独发浪费性能增加延迟吧,post 之类的直接发不泄露数据了吧,那你这跨域限制不废了么,这又不复杂的优化有啥难理解的
    0 0
  • lscho
    2022年4月25日 15:16
    按你的理论,直接取消跨域就完事了。
    0 0
  • wwqgtxx
    2022年4月25日 15:16
    总有人觉得自己能在十几年前预判现在的发展
    0 0
  • noe132
    2022年4月25日 15:16
    简单来说因为历史原因。
    0 0
  • statumer
    2022年4月25日 15:16
    照理说 jsonp 这个东西也是不应该存在的,都是历史包袱
    0 0
  • Chism
    2022年4月25日 15:48
    跨域请求 post 是先发个 get 试探,可以了再 post 吗?
    0 0
  • honkew
    2022年4月25日 15:48
    需要拿到响应头,才能知道允不允许跨域啊
    0 0
  • yin1999
    2022年4月25日 16:16
    用的是 option 请求,而非 get
    0 0
  • ch2
    2022年4月25日 16:16
    因为浏览器加载 js 跟 html 、css 、jpg 这些静态文件默认都是 GET ,一个网站在打开的一瞬会大量加载这些文件。往往加载这些文件的时候不会携带 cookie 等机密数据,所以就不预先 option 了,完全没必要。但是 fetch 、xhr 、ajax 等发送请求往往是带 cookie 的,这时候又不好单独鉴别是不是 fetch 跟 xhr 、ajax 发的 GET 请求,所以就只给 POST 预检 option ,不管 GET 了
    0 0
  • ch2
    2022年4月25日 16:16
    #10 跨域主要是防止你的网站盗用别人网站的凭据刷 api ,这样至少可以保证别人盗用你网站 cookie 的 POST 发都发不出去
    0 0
  • Puteulanus
    2022年4月25日 16:47
    简单请求可以走其他方式发,比如 get 用图片的 src ,post 构造个表单直接 submit ,为了向上兼容不能拦这些,单独拦截异步请求发送的跨域请求就没有意义了 复杂请求因为无法用这种手段构造,所以拦截跨域是有意义的,但是全拦了大家又不方便,所以改用 option 询问一下服务器该不该拦
    0 0
  • mxT52CRuqR6o5
    2022年4月25日 17:17
    因为有些接口有副作用,就比如转账接口,按照你的设计,虽然没有获取到转账结果,但转账请求发出去了
    0 0