前端如何正确理解跨域?-灵析社区

Frank的私人司机

作为一名前端开发者,有时候会遇到一些跨域问题,之前我参考一些教程网址的理解是: **客户端** 浏览器其实已经将请求发送出去了,**服务器端** 也接收到了,但是服务器返回的**数据** 在回来的时候被**浏览器拦截** 了。 * * * 但是今天在和后端同事讨论的时候,他说我之前理解错了。下面是他的解释: 跨域的本质是保护**服务器** 的数据,就好像你不能直接进我家来捣乱,你需要我给你钥匙(需要后端的 **Access-Control-Allow-Origin** 设置允许访问的来源 )。但是按照这样理解的话,就推翻了我之前的理解,请求已经发送了,但是被**服务器拒绝了** 。 **问题:** 我自己也有点疑惑,哪个理解才是正确的呢?

阅读量:137

点赞量:0

问AI
你可以看看 "CORS(跨域资源共享)"的定义 "https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS" (https://link.segmentfault.com/?enc=VBlAshGyb4cKOgk0IClAcg%3D%3D.iVoemM2YdE7EW5d%2BL%2Byqa8egIdudYwch%2FwApqdLM6%2F3i4ZemFEBIoPpNmvMK%2FsYOYPiQpa3e5mDWKaw8id2vTQ%3D%3D) 首先对齐一个共识,"同源策略是浏览器的安全策略,脱离浏览器不存在跨域问题",相同的配置下, 两个 "服务器" 之间通信是不会存在跨域问题的,所以 "跨域请求" 被拒绝这个动作,是浏览器和服务端配合完成的,但主要的控制端还是"浏览器" 在 "CORS" 中你会看到 "简单请求" 和 "非简单请求" 的概念,无论是哪种请求,都会被发送到服务端,只不过有以下区别 * 对于简单请求,"浏览器"会屏蔽服务端的响应,这一点你可以用 "node" 起个服务来验证 * 对于非简单请求,"浏览器"会先发送一个 "OPTIONS" 请求去获取服务端的响应头,看服务端是否有配置相关的 "CORS" 策略来允许本次跨域请求,如果满足 "CORS" 的规则,"浏览器"就会继续发送"真实的请求",否则就阻断掉 所以其实并不是 "服务端" 真正拒绝的跨域请求,是 "浏览器" 遵循 "CORS" 的规则阻断了真实的请求。你只需要理解到对于跨域请求,真正的 "逻辑控制端" 是在浏览器,只是浏览器支持 "CORS" 让服务端可以通过 "响应头" 来支持跨域而已