V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Aruforce
V2EX  ›  程序员

CORS?

  •  
  •   Aruforce · Sep 5, 2019 · 3209 views
    This topic created in 2438 days ago, the information mentioned may be changed or developed.
    <form action="/cus/test" method="post" enctype="application/x-www-form-urlencoded">
        <input type="text" name="tst" value="5da8e633-68a3-43a0-964a-2f2e37125d60">
        <input type="submit">
    </form>
    <form action="http://localhost/cus/test" method="post" enctype="application/x-www-form-urlencoded">
        <input type="text" name="tst" value="03221274-d8ad-48c1-9276-2f821ed2cfd2">
        <input type="submit">
    </form>
    

    当前访问http://localhost:8080/

    在提交第二个表单的时候 也是跨域了吧 ?

    但是浏览器为什么没有拦住?并未设置Access-Control-Allow-Origin这个 head ;

    我 F12 看请求的时候 发现传了 8080 端口的 sessionId Origin 什么的?

    这是浏览器发现了跨域但是没有拦截?

    Supplement 1  ·  Sep 5, 2019

    我知道不拦截

    我想问的是为什么不拦截,第二表单提交带上了原来的站点的cookie。。

    Supplement 2  ·  Sep 5, 2019

    还是dalao 有意思...能说明白:

    1. JS 提交时会得到其他域名的响应数据...所以会向其他域名请求是否允许当前域名得到其响应数据,所以会有跨域预检...也就是发出OPTIONS请求

    2. 而表单提交,相当于跳转到其他域名...当前域名下的JS代码等等无法获取到响应数据...这对于其他域名是安全的..。浏览器不会向其他域名发出OPTIONS请求...

    额外的补充:

    1. 而当前域名下的数据泄露...这是开发者自己需要解决的问题...不在浏览器考虑范围之内...

    完了 沉了吧...

    19 replies    2019-09-06 09:04:23 +08:00
    allenforrest
        1
    allenforrest  
       Sep 5, 2019
    nginx 里设置了 head 吧
    imhxc
        2
    imhxc  
       Sep 5, 2019
    表单提交会跨域?
    Aruforce
        3
    Aruforce  
    OP
       Sep 5, 2019
    @imhxc 只要 scheme domain port 有一个不一样就算跨域啊;
    @allenforrest 并没有
    krixaar
        4
    krixaar  
       Sep 5, 2019   ❤️ 1
    提交表单算跨域,点个 a 标签是不是也得算跨域……
    SakuraKuma
        5
    SakuraKuma  
       Sep 5, 2019
    简单请求不会触发跨域。。
    SEARCHINGFREE
        6
    SEARCHINGFREE  
       Sep 5, 2019
    #4 直白
    owenliang
        7
    owenliang  
       Sep 5, 2019   ❤️ 1
    表单 submit 又不是 ajax,不涉及跨域检查。
    zivyou
        8
    zivyou  
       Sep 5, 2019
    学习了!
    EricXuu
        9
    EricXuu  
       Sep 5, 2019
    估计是服务端程序有问题,返了 500 回来,然后浏览器检查到端口不一致就会在 console 里报 CROS。其实跟 CROS 没关系。。经常遇见,已经学会无视了
    Aruforce
        10
    Aruforce  
    OP
       Sep 5, 2019
    @krixaar 只要 scheme domain port 有一个不一样就算
    @SakuraKuma @owenliang 你们说的是 form 跨域提交不触发跨域检查,我问的是为什么不触发,第二个表单可把原来站点的的 cookie 带过去了...
    userdhf
        11
    userdhf  
       Sep 5, 2019
    前端只要地址、方式、参数对了,其他肯定都是后端的问题...
    LeeSeoung
        12
    LeeSeoung  
       Sep 5, 2019   ❤️ 1
    简单请求

    * 请求方式:HEAD,GET,POST
    * 请求头信息:
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type 对应的值是以下三个中的任意一个
    application/x-www-form-urlencoded
    multipart/form-data
    text/plain

    命中 POST 方式的 multipart/form-data。跨域的话状态码是正常的 但是 console 会有 cors 提示,不能正常获取数据。
    krixaar
        13
    krixaar  
       Sep 5, 2019
    #10 “出于安全原因,浏览器限制 从脚本内发起的 跨源 HTTP 请求。” 大概因为不是从脚本内发起的,所以不触发?
    Ref:
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
    SakuraKuma
        14
    SakuraKuma  
       Sep 5, 2019
    @Aruforce 下面有人详细回答你了,如果还觉得不够,可以移步 https://www.w3.org/TR/cors/#resource-preflight-requests
    BlackHole1
        15
    BlackHole1  
    PRO
       Sep 5, 2019
    Biwood
        16
    Biwood  
       Sep 5, 2019
    应该不是简单请求的问题,就像 4 楼说的,form 表单中的 submit 操作本质上是通过浏览器的地址栏直接打开 action 中的地址,同时把数据带过去,而不是停留在当前页面请求 action 中的地址,所以就不存在跨域的概念,更像是一个页面跳转的过程。
    也就是说,如果你在 a.com 域名下使用 ajax 的方式请求 b.com 的数据,这叫跨域。但你从 a.com 直接跳转到 b.com ,这就不是跨域了。
    AV1
        17
    AV1  
       Sep 5, 2019 via Android
    HTML 诞生于 1993 年,XMLHttpRequest 诞生于 2000 年左右,CORS 标准在 2006 年才提交草案。

    你不能让 1993 年的团队,去参考 2006 年的标准呀😌
    xfriday
        18
    xfriday  
       Sep 5, 2019
    了解下 csrf 攻击原理就知道了
    zw1one
        19
    zw1one  
       Sep 6, 2019
    表单提交界面会跳转,界面跳转了就不算跨域了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5466 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 08:54 · PVG 16:54 · LAX 01:54 · JFK 04:54
    ♥ Do have faith in what you're doing.