# 三.nginx
1.nginx 配置解决 iconfont 跨域
浏览器跨域访问 js、css、img 等常规静态资源被同源策略许可
但 iconfont 字体文件(eot|otf|ttf|woff|svg)例外,此时可在 nginx 的静态资源服务器中加入以下配置
location / {
add_header Access-Control-Allow-Origin *;
}
1
2
3
2
3
- 2.nginx 反向代理接口跨域
- 跨域原理:同源策略是浏览器的安全策略,不是 HTTP 协议的一部分。服务器端调用 HTTP 接口知识使用 HTTP 协议,不会执行 JS 脚本,不需要同源策略,不会存在跨域的问题。
- 前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>a.html</title>
</head>
<script>
let xhr = new XMLHttpRequest()
xhr.open("get", "localhost:4000/apis", true)
/* 2.前端发头 会发两次请求把条件判断 === “post”去掉*/
xhr.setRequestHeader("name", "znc")
xhr.send(null)
xhr.onreadystatechange = () => {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.response)
debugger
}
}
</script>
<body></body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- 后台服务
const http = require("http")
const querystring = require("querystring")
const app = http.createServer()
app.on("request", (req, res) => {
console.log(req.method)
if (req.method === "POST") {
let data = ""
console.log(req.headers)
req.on("data", (chunk) => {
data += chunk
})
req.on("end", () => {
data = querystring.parse(data)
res.write(querystring.stringify(data))
res.end()
})
} else {
res.write(
querystring.stringify({
name: "zzb",
})
)
res.end()
}
})
app.listen(4000, () => {
console.log("已经连接上了4000")
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- 配置 nginx 跨域请求
location / {
proxy_pass localhost:4000; #反向代理
proxy_cookie_domain localhost:4000 localhost:3000; #修改cookie里域名
index index.html index.htm;
# 当用webpack-dev-server等中间件代理接口访问nignx时,此时无浏览器参与,故没有同源限制,下面的跨域配置可不启用
add_header Access-Control-Allow-Origin localhost:4000; #当前端只跨域不带cookie时,可为*
add_header Access-Control-Allow-Credentials true;
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
← 二.cors 四.middleware →