首页 > web前端 > js教程 > 正文

javascript中的跨域请求如何实现_CORS机制是如何工作的

幻影之瞳
发布: 2025-12-22 19:38:02
原创
844人浏览过
CORS需服务器配合实现,核心是浏览器拦截跨域请求后由服务端响应头“开绿灯”;同源策略要求协议、域名、端口全一致,否则静默拦截;简单请求直接发送,复杂请求先发OPTIONS预检;关键响应头包括Access-Control-Allow-Origin、Methods、Headers及Credentials(带凭证时Origin不能为*)。

javascript中的跨域请求如何实现_cors机制是如何工作的

JavaScript 中的跨域请求本身不能“主动实现”,而是靠服务器配合才能成功——CORS 的核心逻辑是:浏览器拦住跨域请求,但允许服务器用响应头“开绿灯”。只要后端正确设置几个关键响应头,前端发请求时几乎不用改代码。

浏览器为什么拦你?同源策略是默认守门员

协议、域名、端口三者完全一致才算同源。比如 https://a.com 页面去请求 https://b.com/api,哪怕只差一个字母或端口(如 8080),浏览器就直接拒绝响应数据——不是报错,是“静默拦截”:请求发出去了、服务器也返回了,但 JavaScript 拿不到 response.body,控制台只显示 CORS 错误。

CORS 分两种情况:简单请求不预检,复杂请求先问再干

浏览器自动判断:

  • 简单请求:方法是 GET/HEAD/POST,且 Header 只含 Accept、Content-Type(限于 application/x-www-form-urlencoded、multipart/form-data、text/plain)等基础字段。这类请求会直接发,只多加一个 Origin 请求头。
  • 非简单请求:比如带自定义头(X-Auth-Token)、用 PUT/DELETE 方法、Content-Type 是 application/json —— 浏览器会先发一个 OPTIONS 预检请求,询问服务器:“我待会要用 POST 带 X-Token 访问,你允不允许?” 服务器必须在预检响应里明确答复,否则后续请求根本不发。

服务器必须设置的关键响应头

这些头不是可选的,是浏览器校验的硬性条件:

立即学习Java免费学习笔记(深入)”;

  • Access-Control-Allow-Origin:必须有。值可以是具体域名(https://your-app.com)或通配符 *(但带凭证时不能用 *)。
  • Access-Control-Allow-Methods:预检响应中必需,列出允许的方法,如 GET, POST, PUT
  • Access-Control-Allow-Headers:预检响应中必需,声明允许携带哪些请求头,如 Content-Type, X-Auth-Token
  • Access-Control-Allow-Credentials:如果前端设了 credentials: 'include'(要传 cookie 或 auth),此项必须为 true,且 Allow-Origin 不能是 *。

前端代码其实很安静,重点在后端配置

你写 fetch 或 axios,和同域请求一模一样:

魔术橡皮擦
魔术橡皮擦

智能擦除、填补背景内容

魔术橡皮擦 105
查看详情 魔术橡皮擦

fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  credentials: 'include' // 如果需要带 cookie
})

真正起作用的是后端是否返回了合法的 CORS 头。Node.js Express 示例:

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', 'https://your-app.com');
  res.header('Access-Control-Allow-Credentials', 'true');
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, X-Auth-Token');
  if (req.method === 'OPTIONS') return res.sendStatus(200);
  next();
});

基本上就这些。CORS 不复杂,但容易忽略预检流程或 credentials 与 * 的冲突。

以上就是javascript中的跨域请求如何实现_CORS机制是如何工作的的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号