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

javascript中的跨域问题是什么_JSONP和CORS如何解决?

狼影
发布: 2025-12-21 17:51:08
原创
567人浏览过
跨域问题本质是浏览器同源策略限制,防止恶意网站窃取用户数据;JSONP利用script标签绕过但仅支持GET且存XSS风险;CORS通过服务端响应头正向解决,需配置Access-Control-Allow-Origin等字段。

javascript中的跨域问题是什么_jsonp和cors如何解决?

跨域问题本质是浏览器的同源策略限制,不是JavaScript语言本身的问题,而是浏览器出于安全考虑,阻止前端脚本向非同源(协议、域名、端口任一不同)的服务器发起HTTP请求并读取响应。

为什么会有跨域限制?

同源策略防止恶意网站通过脚本窃取其他站点的用户数据(比如 Cookie、DOM 内容、API 响应)。例如:你登录了网银页面,另一个恶意网页若能随意发请求到网银接口并读取返回结果,就可能泄露账户信息。

注意:跨域限制只影响浏览器中的 JavaScript 发起的请求(如 fetchXMLHttpRequest),不影响 HTML 标签加载资源(如 javascript中的跨域问题是什么_JSONP和CORS如何解决?<script></script>),这也是 JSONP 能绕过限制的基础。

JSONP 是怎么“绕过”跨域的?

JSONP(JSON with Padding)利用 <script></script> 标签不受同源策略限制的特性。它把请求封装成一个 script 标签的 src 请求,并要求后端返回一段可执行的 JavaScript 函数调用,参数是真正的数据。

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

典型流程:

  • 前端定义一个全局回调函数,比如 window.handleData = function(data) { ... }
  • 动态创建
  • 服务端返回:handleData({"name": "Alice", "age": 30})
  • 浏览器执行该脚本,触发回调,拿到数据

缺点明显:只支持 GET 请求;依赖服务端配合返回特定格式;没有错误捕获机制(script 加载失败无法区分是网络问题还是语法错误);存在 XSS 风险(执行任意返回的 JS);已基本被现代项目淘汰。

巧文书
巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 281
查看详情 巧文书

CORS 是如何正向解决跨域的?

CORS(Cross-Origin Resource Sharing)是 W3C 标准,由浏览器和服务端协作完成。核心是服务端在 HTTP 响应头中声明允许哪些源访问资源,浏览器据此决定是否放行响应。

关键响应头示例:

  • Access-Control-Allow-Origin: https://your-app.com(或 *,但带凭证时不能用 *)
  • Access-Control-Allow-Methods: GET, POST, PUT
  • Access-Control-Allow-Headers: Content-Type, Authorization
  • Access-Control-Allow-Credentials: true(允许携带 Cookie 或认证信息)
  • Access-Control-Expose-Headers: X-RateLimit-Limit(指定前端 JS 可读的响应头)

简单请求(如 GET/POST + 纯文本 Content-Type)直接发送;预检请求(如 PUT、带自定义 Header 的请求)会先发一个 OPTIONS 请求,确认服务端允许后再发真实请求。

前端无需额外编码,只需正常使用 fetch 或 axios;重点在于后端正确配置响应头。开发中常见问题:本地启动的 http://localhost:3000 访问后端 API 时,服务端忘了加 Access-Control-Allow-Origin,导致请求被浏览器拦截。

其他补充方案

开发阶段常用代理(如 Webpack DevServer 的 proxy、Vite 的 server.proxy)把 /api 请求转发到后端,让浏览器认为是同源;生产环境推荐 Nginx 反向代理统一域名,彻底规避跨域问题。

不复杂但容易忽略:跨域是浏览器行为,Node.js、Python 等后端发起的请求不受限;前后端分离项目中,务必确认 API 接口是否已开启 CORS,而不是在前端反复改代码。

以上就是javascript中的跨域问题是什么_JSONP和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号