Aruforce
V2EX  ›  程序员

CORS?

By Aruforce at 2019 年 9 月 5 日 · 3679 次点击
<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 年 9 月 5 日

我知道不拦截

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

第 2 条附言  ·  2019 年 9 月 5 日

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

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

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

额外的补充:

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

完了 沉了吧...

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

你不能让 1993 年的团队,去参考 2006 年的标准呀😌
xfriday
   18
xfriday  
   2019 年 9 月 5 日
了解下 csrf 攻击原理就知道了
zw1one
   19
zw1one  
   2019 年 9 月 6 日
表单提交界面会跳转,界面跳转了就不算跨域了
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 45ms · 3.9.8.5