当前位置:网站首页 > 编程语言 > 正文

跨域(跨域是什么,如何解决跨域)



跨域报错是前端开发中非常经典的一个错误,报错如下

Access to XMLHttpRequest at '......' from origin

'......' has been blocked by CORS policy:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

跨域错误源自于浏览器的同源策略,想要解决跨域首先要知道什么是同源策略?

同源策略:著名的安全策略,URL有三个基本组成部分:协议+域名或ip+端口,三个必须完全相同称之为同源,不同源的称之为跨域

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/ 同源

注意:同源策略不是服务器行为,而是浏览器的行为,服务器会正常响应请求,但是如果不同源会被浏览器拦截

搭建一个express服务器用来演示跨域报错

安装express

在app.js文件中

在views/index.html文件中

打开浏览器访问http://127.0.0.1:3000/

(1)调用getIpTest发送请求不会报错,因为浏览器地址栏访问的服务器是http://127.0.0.1:3000/ ,而方法内发送请求的URL也是http://127.0.0.1:3000/ ,视为同源

(2)调用getDnameTest发送请求报错,因为浏览器地址栏访问的服务器是http://127.0.0.1:3000/ ,而方法内发送请求的URL也是http://localhost:3000/ ,视为跨域

6d65a61429a74ae5bbbf00db1690749b.png

Access to XMLHttpRequest at 'http://localhost:3000/......' from origin

'http://127.0.0.1:3000' has been blocked by CORS policy:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

打开浏览器访问http://localhost:3000/

(3)调用getDnameTest发送请求不会报错,因为浏览器地址栏访问的服务器是http://localhost:3000/ ,而方法内发送请求的URL也是http://localhost:3000/ ,视为同源

(4)调用getIpTest发送请求报错,因为浏览器地址栏访问的服务器是http://localhost:3000/ ,而方法内发送请求的URL也是http://127.0.0.1:3000/ ,视为跨域

4a89278b647d4132a471101a18f8350b.png

Access to XMLHttpRequest at 'http://127.0.0.1:3000/......' from origin

'http://localhost:3000' has been blocked by CORS policy:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

在main.js中

在views/About.vue中

脚手架项目端口是8080而请求的express服务器端口是3000,不满足同源策略,发送请求报跨域错误

811a362f883346ccb87fbe857714600b.png

Access to XMLHttpRequest at 'http://127.0.0.1:3000/......' from origin

'http://127.0.0.1:8080' has been blocked by CORS policy:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

1.配置代理服务器

在vue.config.js文件中

(修改后需要重启脚手架项目)

在views/About.vue文件中

22099be2380c4a2985c8141920cd4867.png

原理

跨域是浏览器的安全策略,服务器和服务器之间发送请求没有跨域

启动脚手架的时候会启动一个内置web服务器

请求的时候浏览器实际并没有直接和需要请求的服务器通信,而是通过内置的web服务器在中转

注意:

项目上线需要把打包后的文件放在服务器上运行,而不是启动脚手架运行,也就没有内置web服务器做代理,所以此方式只适用于开发测试阶段

上线时一般后端解决跨域问题

需要使用nginx代理或者服务器配置cors(每种语言有自己不同的配置方式)

express中处理跨域需要使用cors模块

在app.js文件中

到此这篇跨域(跨域是什么,如何解决跨域)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 定位打开了无法获取位置图片(无法获取定位权限)2026-01-22 13:09:09
  • 颜色代码查询对照表(颜色代码查询对照表下载)2026-01-22 13:09:09
  • 字体图片生成(字体图片生成器免费版)2026-01-22 13:09:09
  • mha是什么意思网络用语(maha是什么意思)2026-01-22 13:09:09
  • edge升级后打不开(edge升级后打不开公司的网页了)2026-01-22 13:09:09
  • 指数与对数的关系视频(指数和对数的有关运算法则)2026-01-22 13:09:09
  • 华为机考题库2023(华为机考题库2023电子材料)2026-01-22 13:09:09
  • win32怎么用(win32 gui)2026-01-22 13:09:09
  • ipv4的计算题(ipv4总长度计算)2026-01-22 13:09:09
  • 网页怎么传文件(怎么用网页传文件)2026-01-22 13:09:09
  • 全屏图片