产生跨域原因和前端处理跨域

1、跨域的原因

跨域是是因为浏览器的同源策略限制,是浏览器的一种安全机制,服务端之间是不存在跨域的。

所谓同源指的是两个页面具有相同的协议、主机(域名或ip)和端口,三者有任一不相同即会产生跨域

2、跨域举例

当前页面URL 被请求页面URL 是否跨越 原因
http://localhost:3000 https://localhost:3000/ 协议不同
http://localhost:3000/ http://127.0.0.1:3000/ 域名或ip不同
http://localhost:3000/ http://localhost:3001/ 端口不同
http://localhost:3000/ http://localhost:3000/ 同源
http://127.0.0.1:3000/ http://127.0.0.1:3000/ 同源

3、解决方法

  • jsonp跨域:只能实现get一种请求
    通过script标签的src属性加载资源,数据放在src属性指向的服务器上,使用json格式。会定义好处理函数。服务端会在数据开头加上这个函数名,等全部加载完毕,便会调用我们事先定义好的函数,这时函数的实参传入的就是后端返回的数据
  • 跨域资源共享(CORS)
    跨域资源共享(corss-origin resource sharing):CORS需要浏览器和服务器同时支持
    整个CORS通信过程,都是浏览器自动完成,不需要用户参与(若是cookie请求,前后端都需要设置);浏览器发现是跨域请求,就会自动在请求头中加上Origin字段,代表请求来自哪个域(协议+主机名+端口号)。服务器在收到请求后,根据请求头中Origin字段值来判断是否允许跨域请求通过。

实现方法:
在响应头Access-Control-Allow-Origin字段中设置指定的域名,表示允许这些域名的跨域请求。如果请求头中Origin字段的域名包含在这些域名中,则可以实现跨域请求

Access-Control-Allow-Credentials字段代表服务器允许cookie可以包含在请求中,一起发送给服务器,值为布尔类型。如果要把cookie一起发送到服务器,还需要在请求中打开withCredentials属性。

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

4、vue如何处理跨域问题?

配置代理服务器
在 vue.config.js 文件中进行配置

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://api.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

其中proxy属性用于配置代理的规则,/api表示需要代理的接口路径。target属性表示代理的目标服务器地址,changeOrigin属性表示是否改变请求的源地址,pathRewrite属性用于重写请求的路径

原理:
在启动脚手架的时候会启动一个内置web服务器,请求的时候浏览器实际并没有直接和需要请求的服务器通信,而是通过内置的web服务器在中转

注意:
项目上线需要把打包后的文件放在服务器上运行,而不是启动脚手架运行,也就没有内置web服务器做代理,所以此方式只适用于开发测试阶段
上线时一般后端解决跨域问题,需要使用nginx代理或者服务器配置cors(每种语言有自己不同的配置方式)

参考文献:
https://blog.csdn.net/weixin_43902063/article/details/116124943
https://blog.csdn.net/weixin_43831204/article/details/109633953
https://blog.csdn.net/qq_41020757/article/details/118681376
https://blog.csdn.net/ACCPluzhiqi/article/details/131565109
https://www.jb51.net/javascript/288449bkv.htm

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 由于浏览器的同源策略保护机制,浏览器不能执行来自其他来源的脚本。通过js在不同的域之间进行数据传输或通信,比如用a...
    威少_吴阅读 5,275评论 0 2
  • 跨域请求 全称:非同源策略请求(同源即同协议、同域名和同端口),而ajax专门用于处理同源策略请求,因此对于非同源...
    dawsonenjoy阅读 4,687评论 0 2
  • 来源:http://mp.weixin.qq.com/s?__biz=MjM5NTM1NDcyOQ==&mid=2...
    在风口阅读 12,442评论 0 8
  • 跨域是浏览器为了安全做出的限制策略 浏览器请求必须遵循同源策略:同域名,同协议,同端口 三种使用最广的解决方案 (...
    虚竹_d36e阅读 1,630评论 0 0
  • ajax跨域问题,是每一个web前端都会经常遇到的问题,当然解决前端跨域的方法也有很多方法,这里我只记录一下如何使...
    rain129阅读 4,342评论 0 6

友情链接更多精彩内容