HTTP跨域

1. 简介

HTTP跨域是指不同域名下的网页请求资源时,由于浏览器同源策略限制,导致请求被阻止。为解决这一问题,开发者常采用跨域资源共享(CORS)等技术来允许合法跨域请求,确保网站功能正常运行。

同源

  • 协议
  • 域名
  • 端口

常见HTTP跨域技术

  • 跨域资源共享(CORS):下面会专门介绍。
  • JSONP:下面会专门介绍。
  • WebSocket:WebSocket不受同源策略限制,可以实现跨域通信。
  • 代理服务器:在服务器端设置一个代理,前端请求发送到这个代理,然后由代理去请求真正的跨域资源,最后返回给前端。

2. 跨域资源共享(CORS)

2.1. 简介

跨域资源共享(CORS)是一种Web标准,允许浏览器和服务器交互,确定是否允许跨源请求,从而克服同源策略限制,实现跨域数据交互。

2.2. 允许跨域资源共享

http 复制代码
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Content-Length, Authorization, Accept, X-Requested-With, X_Requested_With
Access-Control-Allow-Methods: GET, POST
Access-Control-Expose-Headers: header_name1,header_name2
  • Access-Control-Allow-Origin:允许请求源
  • Access-Control-Allow-Headers:允许的请求头(CORS Missing Allow Header)
  • Access-Control-Allow-Methods:允许的请求方法
  • Access-Control-Expose-Headers:允许请求对象读取响应的头

2.3. 允许携带Cookie

浏览器

js 复制代码
// 创建ajax对象
var xhr = new XMLHttpRequest();
// 对ajax对象进行配置
xhr.open('post', 'http://localhost:8080/xxxx');
// 当发送跨域请求时,携带cookie信息
xhr.withCredentials = true;
// 下面省略

服务端

http 复制代码
Access-Control-Allow-Credentials:true

注意

如果服务器设置了Access-Control-Allow-Credentials:trueAccess-Control-Allow-Origin不能为*

这是因为当发送凭据时,出于安全考虑,不允许使用通配符来允许所有源。

3. JSONP

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
</head>
<body>
<h1>hello world</h1>
<h1>当前页面是http://localhost:8080,注意端口是不一致的。</h1>
</body>
<!--js路径后面添加请求参数,服务器根据请求参数动态替换test.js中数据-->
<script src="http://localhost:8081/test.js?key1=value1&key2=value2"></script>
</html>

4. 参考

相关推荐
青果网络_xz19 分钟前
海外HTTP代理适合哪些业务?与Socks/隧道的区别
网络·网络协议·http
VekiSon2 小时前
综合项目实战——电子商城信息查询系统
linux·c语言·网络·http·html·tcp·sqlite3
ベadvance courageouslyミ2 小时前
简易在线商城制作
http·线程·在线商城·界面跳转
Benny的老巢2 小时前
Cloudflare Workers CORS 跨域问题排查与解决
跨域·cloudflare·cors·workers
DevOps-IT2 小时前
HTTP状态码(常见 HTTP Status Code 查询)
运维·服务器·网络·网络协议·http
三两肉3 小时前
深入理解 HTTPS RSA 握手:从原理到流程的完整解析
网络协议·http·https·rsa·tls四次握手
LongtengGensSupreme3 小时前
后端设置了跨域但是还是提示跨域问题,原因是这里有两个独立的安全策略在起作用:Chrome和Edge浏览器安全策略强制修改方案
前端·chrome·edge·浏览器·跨域
飞鸟真人18 小时前
关于python -m http.server的一些安全问题
python·安全·http
mangge0820 小时前
ESP8266 温湿度监测系统教程(SHT30+MAX7219+LeanCloud+HTTP 服务)
网络·网络协议·http
牛奶皮子20 小时前
合并 CSS 文件可以减少 HTTP 请求数,因为每个请求都会带来额外的网络开销
css·网络·http