跨域请求解决方案:JSONP与CORS详解

作者:阿沐

时间:2026-10-31

浏览:211

本文详解两种主流跨域解决方案:JSONP利用script标签的src属性实现GET请求,通过回调函数处理数据;CORS则是W3C标准,通过HTTP头部控制权限,支持所有HTTP方法且错误处理更完善。现代开发中CORS因兼容性和安全性优势成为首选。

文章目录

Ajax直接请求普通文件时,常面临跨域无权限访问的问题。常见的解决思路包括JSONP和Flash等方案。

JSONP原理与实现

JSONP

Web页面加载js文件时不受跨域限制,因为<script>、<img>和<iframe>等拥有'src'属性的标签均具备跨域能力。基于此,若需跨域获取数据,服务端可将数据封装为js文件。鉴于JSON能简洁描述复杂数据且被JS原生支持,客户端可像调用脚本一样请求跨域服务器动态生成的js文件。成功调用后,客户端即获得所需数据,这构成了JSONP的基本原理。客户端可向服务端传递callback参数,服务端返回数据时,会将该参数作为函数名包裹JSON数据,使客户端能自定义函数自动处理返回结果。

jQuery支持JSONP调用。在指定域名中设定回调函数名称后,可通过特定形式加载JSON数据。


url?callback=?
jQuery.getJSON(url + "&callback=?", function(data) { 
 alert(data.a + data.b); 
});

服务端需提供JSONP支持,核心在于读写callback参数。

CORS标准与优势

跨域资源共享(CORS)

Cross-Origin Resource Sharing (CORS) 是W3C工作草案,定义了跨域访问资源时浏览器与服务器的通信机制。其核心思想是利用自定义HTTP头部,使双方能相互了解并决定请求或响应是否成功。

相较于JSONP,CORS更为先进、便捷且可靠。

1. JSONP仅支持GET请求,而CORS支持所有类型的HTTP请求。

2. 使用CORS时,开发者可使用普通XMLHttpRequest发起请求并获取数据,相比JSONP拥有更好的错误处理机制。

3. JSONP主要受老版本浏览器支持,这些浏览器往往不支持CORS;而绝大多数现代浏览器已支持CORS。

对于简单请求(无自定义头部,仅使用GET或POST,主体为text/plain),请求会携带一个名为Origin的额外头部。Origin头部包含请求页面的协议、域名和端口,服务器据此轻松判断是否提供响应。

服务端对CORS的支持,主要通过设置Access-Control-Allow-Origin头部来实现。

Header set Access-Control-Allow-Origin *

为防止XSS攻击,服务器可限制允许的域,例如:

Access-Control-Allow-Origin: https://www.jb51.net

许多服务已提供CORS支持,例如AWS支持跨域资源分享功能,向S3上传文件无需代理。

以上关于跨域请求的解决方案(JSONP与CORS)即为全部内容,供参考。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章