问答

为什么服务端能处理跨域问题?

作者:admin 2021-05-12 我要评论

我看了一些关于跨域的文章,文章中有说到" 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。 " "...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我看了一些关于跨域的文章,文章中有说到"跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。"

"所谓的同源是指,域名、协议、端口均为相同。"

例子:

用户在访问https://www.aaa.com 时执行网站的js文件ajax请求https://www.aaa.com:8080/user/getInfo

根据这些定义,因为端口不同所以这个ajax请求跨域了,会被浏览器的同源策略拦截,这时就需要在前端代码中做处理。
但是服务端是不知道每个来自客户端的请求是否跨域,所以服务端是没有办法处理跨域问题的

但事实是服务端可以处理跨域问题,Java中的SpringBoot框架就有提供对跨域的配置。

所以想问下各位是我哪一步理解错了,学艺不精还请指教

###

服务端是规则的制定者,不需要知道请求是否跨域。
只需要通过Access-Control-Allow-Origin告诉浏览器这个请求在这个域名下能不能被调用。
不能调用的请求浏览器自己会拦截。

###
但是服务端是不知道每个来自客户端的请求是否跨域,所以服务端是没有办法处理跨域问题的

上面这句话说的不对。服务端知道是否跨域,跨域条件是什么?你前面说过了

"所谓的同源是指,域名、协议、端口均为相同。"

那么这些信息服务端如何获取?

  1. 获取请求的url信息,这个直接拿完整的url就可以了
  2. 获取来源的地址,这个是在 request headers 中 referer

到这里你要提问了,如果获取不到上述信息怎么办?上述信息就是浏览器添加的,你获取不到认为不是浏览器触发的即可。

当然,在跨域的时候,浏览器发送复杂请求时会先触发 options 预检请求

###

在CORS跨域解决方案里浏览和服务端充当的角色可以看看这个文章

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 为什么服务端能处理跨域问题?

    为什么服务端能处理跨域问题?

  • nginx http 500

    nginx http 500

  • elment-ui的el-tree的子节点如何渲染一

    elment-ui的el-tree的子节点如何渲染一

  • 请求的数据放在数组里面,在外面打印不

    请求的数据放在数组里面,在外面打印不

腾讯云代理商
海外云服务器