跨域

41 阅读2分钟

1.跨域

image.png

同源策略:协议、域名、端口相同。
跨域:协议、域名、端口相同存在一个或多个不同,产生跨域,跨域的本质是浏览器的行为。(前后端分离和多端。)

2.搭建前后端
模拟跨域

创建文件夹demo (安装node环境,进入文件夹下(cmd、git、vscode))

文件目录

image.png

1)安装webpack、webpack-cli
npm install -S webpack webpack-cli
2)手动创建webpack.config.js

image.png

执行:npm install html-webpack-plugin

3)修改package.json
添加scripts
"scripts": {
"dev": "webpack-dev-server --mode development"
},

执行:npm install webpack-dev-server

image.png

4)搭建模拟后端服务
创建server.js

image.png

安装express: npm install express

5)在index.js中发送请求

image.png

6)
启动前端:npm run dev --->http://localhost:8080

image.png

出现跨域问题

启动后端:node server.js --->http://localhost:3001

image.png

3.解决跨域

1)webpack proxy(只适用于开发)
在webpack.config.js
// webpack proxy仅适用于开发环境
devServer: {
proxy: { //代理
"/api": {
target: "http://localhost:3001", pathRewrite: {
"/api": ""
}
}
}
},

image.png

index.js
修改:
xhr.open("get", "/api/user", true);

重启服务:

image.png

2)Cors
在server.js
//第二种:cors
var allowCrosDomin = function(req,res,next){
//请求源 ajax http://localhost:8080 res.header("Access-Control-Allow-Origin"," ");
//请求头 x-token
res.header("Access-Control-Allow-Headers", "
")
//请求方法 get post put delete
res.header("Access-Control-Allow-Methods", "*")

next();
}
app.use(allowCrosDomin);

image.png

重启服务

image.png

3)webpack plugin 中间件
安装webpack-dev-middleware

image.png

另外:jsonp只适用于get、也可以配置nginx反向代理

主要代码截图:

image.png

image.png

image.png

image.png

什么是跨域?

跨域是指浏览器出于安全考虑,限制一个源(Origin)的脚本与另一个源的资源进行交互。它是由浏览器的同源策略(Same-Origin Policy)引起的一种现象和需求

核心:同源策略

同源策略是浏览器最核心的安全基石。它规定,如果两个 URL 的协议(Protocol)、域名(Host)、端口(Port)  三者完全相同,则这两个 URL 是同源的。

只要有一个不同,就是不同源,就会产生跨域问题。