什么是javascript跨域请求_CORS和JSONP有什么区别?
发布时间 - 2025-12-25 00:00:00 点击率:次JavaScript跨域请求受同源策略限制,CORS是服务端配置响应头的标准方案,支持所有HTTP方法及凭证;JSONP是客户端利用script标签的兼容方案,仅支持GET且存XSS风险。
JavaScript跨域请求,本质是浏览器出于安全考虑实施的同源策略限制:当页面脚本试图向非同源(协议、域名、端口任一不同)的服务器发起请求时,XMLHttpRequest 或 fetch 默认被拦截。要突破这个限制,CORS 和 JSONP 是两种典型方案,但原理、能力与适用场景差异明显。
CORS 是服务端驱动的标准方案
CORS(Cross-Origin Resource Sharing)是 W3C 标准,依赖服务器在响应头中明确声明允许哪些源访问资源。浏览器自动处理整个流程,开发者调用 fetch 或 XMLHttpRequest 的方式和同源请求完全一样。
- 支持所有 HTTP 方法(GET、POST、PUT、DELETE 等),可传 Cookie(需设置 withCredentials: true 并服务端配 Access-Control-Allow-Credentials: true)
- 简单请求(如 GET/POST + 纯文本 Content-Type)直接发送;复杂请求(如带自定义 header 或 Content-Type: application/json)会先发 OPTIONS 预检请求
- 服务端必须配置关键响应头,例如:
Access
-Control-Allow-Origin(指定允许的源,不能为 * 时配合 credentials)
Access-Control-Allow-Methods
Access-Control-Allow-Headers - 现代浏览器全支持(IE10+),错误可捕获、调试信息清晰
JSONP 是客户端绕过的兼容性方案
JSONP 不是标准协议,而是利用 标签不受同源策略限制的特性,通过动态插入 script 请求一个返回函数调用的 JS 脚本,实现数据“填充”(Padding)式加载。
- 只支持 GET 请求,无法发送 POST 或携带认证凭证
- 客户端需定义全局回调函数(如 callbackFunc),并将函数名作为 URL 参数(如 callback=callbackFunc)传给服务端
- 服务端必须配合,把 JSON 数据包裹进该函数调用中返回,例如:
callbackFunc({"name": "张三"}) - 无预检开销,但错误难监听(script 加载失败不会触发 onerror 回调,仅靠 timeout 模拟)
- 存在 XSS 风险:若 callback 参数未校验,可能执行恶意代码;且无法限制响应内容类型
选哪个?看实际约束条件
如果能控制服务端,优先用 CORS —— 它更规范、功能完整、安全性更高,也符合现代开发实践。JSONP 仅在两类场景仍有价值:需兼容 IE9 及更老浏览器;或调用第三方 API(如某些老地图接口)只提供 JSONP 接口且不支持 CORS。
注意:两者都不是前端单方面能搞定的方案。CORS 关键在服务端响应头;JSONP 关键在服务端按约定格式返回 JS 调用。缺少任一端配合,都无法生效。
# javascript
# java
# js
# 前端
# json
# cookie
# 浏览器
# app
# access
# 回调函数
# 端口
# 跨域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel怎么调用外部API_Laravel Http Client客户端使用
如何在IIS中新建站点并配置端口与IP地址?
如何快速完成中国万网建站详细流程?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
详解Oracle修改字段类型方法总结
高端建站三要素:定制模板、企业官网与响应式设计优化
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel如何处理表单验证?(Requests代码示例)
如何快速重置建站主机并恢复默认配置?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何打造高效商业网站?建站目的决定转化率
敲碗10年!Mac系列传将迎来「触控与联网」双革新
php 三元运算符实例详细介绍
如何在阿里云高效完成企业建站全流程?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
黑客如何通过漏洞一步步攻陷网站服务器?
QQ浏览器网页版登录入口 个人中心在线进入
如何快速查询网址的建站时间与历史轨迹?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
PHP正则匹配日期和时间(时间戳转换)的实例代码
进行网站优化必须要坚持的四大原则
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel如何创建自定义Artisan命令?(代码示例)
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
如何快速登录WAP自助建站平台?
Swift中swift中的switch 语句
如何在企业微信快速生成手机电脑官网?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
昵图网官方站入口 昵图网素材图库官网入口
香港服务器选型指南:免备案配置与高效建站方案解析
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
智能起名网站制作软件有哪些,制作logo的软件?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何快速生成可下载的建站源码工具?
Laravel怎么在Controller之外的地方验证数据
如何在万网利用已有域名快速建站?
网站制作企业,网站的banner和导航栏是指什么?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
SQL查询语句优化的实用方法总结
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
C#如何调用原生C++ COM对象详解
Python自动化办公教程_ExcelWordPDF批量处理案例


-Control-Allow-Origin(指定允许的源,不能为 * 时配合 credentials)