JavaScript跨域受限源于浏览器同源策略,核心解决方案是后端配置CORS(含简单请求、带凭证请求及预检请求的响应头设置),开发期可用前端代理,无法改第三方接口时可服务端中转。

JavaScript 的跨域请求受限制,核心原因是浏览器的 同源策略(Same-Origin Policy)。它不是 JavaScript 本身的限制,而是浏览器为保障用户安全强制实施的一套规则:只有当协议(http/https)、域名(example.com)、端口(80/443)三者完全相同时,才允许脚本读取另一个页面的资源。一旦跨域,比如从 https://a.com 向 https://b.com/api 发起 AJAX 请求,浏览器会直接拦截响应(即使服务器已成功返回数据),防止恶意网站窃取用户在其他站点的敏感信息(如 Cookie、LocalStorage)。
后端配合:CORS(最常用且推荐)
CORS(Cross-Origin Resource Sharing)是目前最主流、最规范的跨域解决方案,本质是通过 HTTP 响应头让服务器“主动授权”哪些源可以访问它。
- 简单请求(如 GET/POST + 纯文本 Content-Type)只需后端设置
Access-Control-Allow-Origin: https://your-domain.com或*(注意:*不支持携带凭证) - 带凭证的请求(如需发送 Cookie 或 Authorization 头),后端要加
Access-Control-Allow-Credentials: true,且Access-Control-Allow-Origin不能为*,必须指定明确域名 - 预检请求(如 PUT、DELETE 或自定义 header)要求后端正确响应
OPTIONS请求,并设置Access-Control-Allow-Methods、Access-Control-Allow-Headers等头
前端代理:开发阶段快速绕过
在本地开发时(如 Vue CLI、Vite、Webpack Dev Server),可通过配置代理把跨域请求“伪装”成本域请求,实际由开发服务器转发给目标接口。
- Vue CLI:在
vue.config.js中配置devServer.proxy,例如将/api开头的请求转到https://api.example.com - Vite:在
vite.config.ts的server.proxy中写类似规则 - 注意:代理只在开发环境生效,上线后需由 Nginx 或后端统一处理
服务端中转:不依赖对方配合
当无法修改目标接口(比如调用第三方公开 API 但对方没开 CORS),可在自己后端写一个简单接口,由它去请求目标地址,再把结果返回给前端。相当于前端→你的服务器→第三方服务器,全程不跨域。
标签: php vue javascript python java js 前端 node.js json ajax node
还木有评论哦,快来抢沙发吧~