当前位置: 首页 > news >正文

HTTP跨域

1. 简介

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

同源

  • 协议
  • 域名
  • 端口

常见HTTP跨域技术

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

2. 跨域资源共享(CORS)

2.1. 简介

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

2.2. 允许跨域资源共享

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

浏览器

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

服务端

Access-Control-Allow-Credentials:true

注意

如果服务器设置了Access-Control-Allow-Credentials:trueAccess-Control-Allow-Origin不能为*
这是因为当发送凭据时,出于安全考虑,不允许使用通配符来允许所有源。

3. JSONP

<!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. 参考

  • vue axios无法获取响应头字段
http://www.lryc.cn/news/322526.html

相关文章:

  • 用Python的turtle库绘制皮卡丘
  • C语言打印当前时间
  • (一)基于IDEA的JAVA基础4
  • 【Python】复习12:标准库与第三方库
  • CUDA 12介绍
  • 旅游系统-软件与环境
  • AI基础知识(2)--决策树,神经网络
  • 蓝桥杯C++大学B组一个月冲刺记录2024/3/21
  • 由浅到深认识C语言(14):枚举
  • 速盾cdn:cdn节点缓存内容不一致怎么办?
  • 【LAMMPS学习】三、构建LAMMPS(6)在构建中包含软件包
  • apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2
  • 8.2K star!史上最强Web应用防火墙
  • 浅谈RPC的理解
  • JDK发布信息、历史及未来规划
  • 帅帅密码管理系统使用教程
  • 漫谈5种注册中心
  • Vulnhub靶机:Kioptrix_2014
  • Spring Boot整合Spring Security
  • Rust字符串深入理解
  • TSINGSEE青犀AI智能分析网关V4酿酒厂安全挂网AI检测算法
  • LeetCode第126场双周赛个人题解
  • 牛客NC403 编辑距离为一【中等 模拟法 Java,Go,PHP】
  • C# SetWindowPos函数
  • zookeeper快速入门五:用zookeeper实现服务注册与发现中心
  • Java 中 BitSet 类的用法
  • Jenkins-pipeline流水线构建完钉钉通知
  • 汽车制造业供应商管理会面临哪些问题?要如何解决?
  • day28|93. 复原 IP 地址|Leetcode 78. 子集|90.子集II
  • 怎样提升小程序日活?签到抽奖可行吗?