跨域解决方案
本文最后更新于:2025年1月29日 凌晨
最推荐的方式:反向代理
什么是反向代理呢,站在客户端的角度,代理服务器的就是反向代理。客户端不知道自己连接的是那个服务器,都有代理服务器去决定转发的规则。
反向代理有诸多好处,比如:保障服务器的安全,因为它隐藏了真正的服务器端地址;负载均衡,通过转发策略向多个服务器进行请求转发;缓存静态内容;
最常用的反向代理服务器当属 Nginx.
1
2
3
4
5
6
7
8
9
10
11
12
13server {
listen 443 ssl;
server_name backend1.example.com;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/certs/server.key;
#...
location /yourapp {
proxy_pass http://url_to_app.com;
#...
}
}
开发中使用的正向代理
Webpack 构建的 Webpack-dev-server 插件支持代理的配置:
1
2
3
4
5
6
7
8devSeerver: {
proxy: {
// 以 /api 开头的请求会被转发到target 指定的地址
'/api/': {
target: 'http://localhost:8090'
}
}
}
CORS (Cross-Origin Resource Sharing)
这种跨域方式,将请求类型分为两种——简单请求和非简单请求,分别做出处理
浏览器发送请求的时候会在头部的 Origin 字段中带上本次的 “源” (协议+域名+端口)信息,服务器端会返回能够接受的源,“*” 表示接受任意源的请求。
Websocket 解决跨域
Websocket 和 HTTP 一样,也是基于 TCP 的一种网络协议,与 HTTP (HTTPS) 对应的是 WS (WSS),对于 Websocket 没有同源限制。
JSONP (JSON with Padding)
虽然 AJAX 请求必须同源,但是对 样式、js资源文件的请求却可以是不同源的。
于是哦,可以通过 script 标签,向另一个服务器端请求文件时带上参数。然后,请求脚本文件后,执行脚本。脚本使用请求 url 中的参数,完成取数据的操作。