1. 什么是跨域?
当你有这种报红时,意味着你跨域了
浏览器使用ajax时,当前网页的接口地址和打开当前页面的地址不同源成为跨域
- 使用ajax:至于使用ajax的时候才会出现跨域的情况,JavaScript中的src和href属性发送请求是不会出现跨域
- 接口地址:ajax请求的url地址
- 打开的页面:当前页面的window.location.href
- 不同源:浏览器使用ajax向不同源的地址发送请求,称之为不同源
2.什么是同源
定义:两个url的协议与主机与端口号均一致
- 协议:http https file
- 主机:域名和本机的ip地址
- 端口:3000,4900
不同源的定义:两个url的协议与主机与端口号有一个一个不一致
http:127.0.0.1:3000/abc
http:127.0.0.1:3000/efg // 同源
http:127.0.0.1:3000/hero/add //同源
https:127.0.0.1:3000/efg //不同源,协议名不同
http:www.baidui.com:3000/hero // 不同源,ip地址不同
http:127.0.0.1:4399//abc不同源,端口号不同
3.为什么要有同源和不同源
省流:浏览器为了保护你的电脑安全
- 为了出于安全考虑,浏览器不允许,页面不同源的接口去请求数据,因为接口和网页不同源,浏览器会认为是两个不同的服务器
- 不同的服务器的内容是不可控的,不允许访问
4.跨域的解决方案
- 第一种,面前的主流方案,也是最简单的CORS方案 :全称
cross origin resource share(资源共享)
工作原理: 服务器 在返回响应报文的时候,在响应头中 设置一个允许的header
-
res.setHeader('Access-Control-Allow-Origin', '*');这行代码的工作过程:浏览器请求发送了, 服务器也响应了, 但是浏览器发现了跨域访问, 判断是否有`响应头: Access Control Allow Origin' (后端是否允许跨域访问, 如果允许, 浏览器就把数据留下, 否则抛弃掉然后报错)
浏览器显示:
2.第二种:JSONP
核心原理:如果script标签的src属性的请求,服务器返回的是一个函数调用。则浏览器会执行这个函数
3.第三种 代理服务器
-(1)什么是代理服务器?
是一个用于帮你转发请求的服务器
(2)代理服务器的工作流程
- 页面 给 代理服务器 发请求
- 代理服务器 给 目标服务器 发请求
- 目标服务器 把 数据响应给代理服务器
- 代理服务器 最后把 数据响应给页面
(3)代码展示
持续更新中......