跨域不会,前端学废

126 阅读2分钟

1. 什么是跨域?

当你有这种报红时,意味着你跨域了

1666448529557.png

浏览器使用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.跨域的解决方案

  1. 第一种,面前的主流方案,也是最简单的CORS方案 :全称cross origin resource share (资源共享)

工作原理: 服务器 在返回响应报文的时候,在响应头中 设置一个允许的header

  • res.setHeader('Access-Control-Allow-Origin', '*');

    这行代码的工作过程:浏览器请求发送了, 服务器也响应了, 但是浏览器发现了跨域访问, 判断是否有`响应头: Access Control Allow Origin' (后端是否允许跨域访问, 如果允许, 浏览器就把数据留下, 否则抛弃掉然后报错)

cors.png

浏览器显示:

请求成功.png

2.第二种:JSONP
核心原理:如果script标签的src属性的请求,服务器返回的是一个函数调用。则浏览器会执行这个函数

3.第三种 代理服务器

-(1)什么是代理服务器?

是一个用于帮你转发请求的服务器

(2)代理服务器的工作流程

  • 页面 给 代理服务器 发请求
  • 代理服务器 给 目标服务器 发请求
  • 目标服务器 把 数据响应给代理服务器
  • 代理服务器 最后把 数据响应给页面

代理服务器解决跨域.png

(3)代码展示

代码实现代理服务器.png

持续更新中......