V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aruforce
V2EX  ›  程序员

CORS?

  •  
  •   Aruforce · 2019-09-05 15:42:44 +08:00 · 2776 次点击
    这是一个创建于 1895 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <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 什么的?

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

    第 1 条附言  ·  2019-09-05 16:27:17 +08:00

    我知道不拦截

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

    第 2 条附言  ·  2019-09-05 17:14:12 +08:00

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

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

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

    额外的补充:

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

    完了 沉了吧...

    19 条回复    2019-09-06 09:04:23 +08:00
    allenforrest
        1
    allenforrest  
       2019-09-05 15:46:25 +08:00
    nginx 里设置了 head 吧
    imhxc
        2
    imhxc  
       2019-09-05 15:47:57 +08:00
    表单提交会跨域?
    Aruforce
        3
    Aruforce  
    OP
       2019-09-05 15:53:45 +08:00
    @imhxc 只要 scheme domain port 有一个不一样就算跨域啊;
    @allenforrest 并没有
    krixaar
        4
    krixaar  
       2019-09-05 15:54:06 +08:00   ❤️ 1
    提交表单算跨域,点个 a 标签是不是也得算跨域……
    SakuraKuma
        5
    SakuraKuma  
       2019-09-05 15:55:04 +08:00
    简单请求不会触发跨域。。
    SEARCHINGFREE
        6
    SEARCHINGFREE  
       2019-09-05 15:56:53 +08:00
    #4 直白
    owenliang
        7
    owenliang  
       2019-09-05 15:58:42 +08:00   ❤️ 1
    表单 submit 又不是 ajax,不涉及跨域检查。
    zivyou
        8
    zivyou  
       2019-09-05 16:00:10 +08:00
    学习了!
    EricXuu
        9
    EricXuu  
       2019-09-05 16:06:33 +08:00
    估计是服务端程序有问题,返了 500 回来,然后浏览器检查到端口不一致就会在 console 里报 CROS。其实跟 CROS 没关系。。经常遇见,已经学会无视了
    Aruforce
        10
    Aruforce  
    OP
       2019-09-05 16:07:29 +08:00
    @krixaar 只要 scheme domain port 有一个不一样就算
    @SakuraKuma @owenliang 你们说的是 form 跨域提交不触发跨域检查,我问的是为什么不触发,第二个表单可把原来站点的的 cookie 带过去了...
    userdhf
        11
    userdhf  
       2019-09-05 16:13:42 +08:00
    前端只要地址、方式、参数对了,其他肯定都是后端的问题...
    LeeSeoung
        12
    LeeSeoung  
       2019-09-05 16:15:45 +08:00   ❤️ 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  
       2019-09-05 16:20:31 +08:00
    #10 “出于安全原因,浏览器限制 从脚本内发起的 跨源 HTTP 请求。” 大概因为不是从脚本内发起的,所以不触发?
    Ref:
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
    SakuraKuma
        14
    SakuraKuma  
       2019-09-05 16:22:03 +08:00
    @Aruforce 下面有人详细回答你了,如果还觉得不够,可以移步 https://www.w3.org/TR/cors/#resource-preflight-requests
    BlackHole1
        15
    BlackHole1  
       2019-09-05 16:26:35 +08:00
    Biwood
        16
    Biwood  
       2019-09-05 16:38:28 +08:00
    应该不是简单请求的问题,就像 4 楼说的,form 表单中的 submit 操作本质上是通过浏览器的地址栏直接打开 action 中的地址,同时把数据带过去,而不是停留在当前页面请求 action 中的地址,所以就不存在跨域的概念,更像是一个页面跳转的过程。
    也就是说,如果你在 a.com 域名下使用 ajax 的方式请求 b.com 的数据,这叫跨域。但你从 a.com 直接跳转到 b.com ,这就不是跨域了。
    DOLLOR
        17
    DOLLOR  
       2019-09-05 16:57:00 +08:00 via Android
    HTML 诞生于 1993 年,XMLHttpRequest 诞生于 2000 年左右,CORS 标准在 2006 年才提交草案。

    你不能让 1993 年的团队,去参考 2006 年的标准呀😌
    xfriday
        18
    xfriday  
       2019-09-05 17:17:54 +08:00
    了解下 csrf 攻击原理就知道了
    zw1one
        19
    zw1one  
       2019-09-06 09:04:23 +08:00
    表单提交界面会跳转,界面跳转了就不算跨域了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1055 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 19:53 · PVG 03:53 · LAX 11:53 · JFK 14:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.