美文网首页
产生跨域原因和前端处理跨域

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

作者: scrollHeart | 来源:发表于2023-09-01 13:48 被阅读0次

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

相关文章

  • 关于设置env等环境变量的思考

    1、如何处理跨域后台处理跨域前端处理跨域浏览器处理跨域 前端本地处理跨域:代理线上跨域的处理方式:Nginx反向代...

  • 产生跨域的原因

    产生跨域的原因 浏览器的限制 跨域 XHR(XMLHttpRequest)请求 1、浏览器的限制 2、跨域 跨域概...

  • Access to XMLHttpRequest at 'htt

    产生跨域的原因: 同域是:协议、域名、端口号相同,不会产生跨域 http://baidu.com ---...

  • 理解ajax跨域

    跨域产生的原因 ionic项目什么情况下会产生ajax跨域问题 针对ionic项目开渔问题我们怎么去避免 跨域产生...

  • 前端踩过的坑

    关于前端 跨域问题 大概问题 1,前端无须处理,需要在后台配置 niginx的配置 处理跨域的域名 关于布局上 ...

  • ajax跨域完全讲解

    产生跨域原因 浏览器限制 跨域(协议、主机名、端口号等不同就属于跨域) XHR(XMLHttpRequest)请求...

  • 关于跨域以及解决思路

    本章内容目录:一、跨域相关概念的理解二、跨域产生的原因三、跨域的几种解决方案 一、跨域相关概念的理解 首先先了解以...

  • 浏览器跨域的那些事

    整理中 目标: 了解跨域 解决跨域 服务器配置跨域(java, nginx) 前端调试时配置解决跨域 一、什么是跨...

  • Ajax跨域问题

    一、跨域问题 二、跨域的定义以及产生原因 三、解决思路 四、JSONP 五、跨域解决的方向 五、浏览器禁止检查

  • [mark]九种跨域方式实现原理

    前端如何使用proxyTable和nginx解决跨域问题 前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及...

网友评论

      本文标题:产生跨域原因和前端处理跨域

      本文链接:https://www.haomeiwen.com/subject/plrtvdtx.html