使用 CORS 和 JSONP 提供内容
Posted
技术标签:
【中文标题】使用 CORS 和 JSONP 提供内容【英文标题】:Serving content with both CORS and JSONP 【发布时间】:2014-04-05 07:52:51 【问题描述】:我正在为公共网站提供内容,我想知道同时使用 CORS 和 JSONP 以获得最大浏览器支持是否会产生任何影响。例如,我会这样做:
<?php
// Simplified example to illustrate
if(isset($_GET['callback']))
header('Content-Type: application/javascript; charset=utf-8');
echo $_GET['callback'] . '(' . json_encode( ... ) . ')';
exit;
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json; charset=utf-8');
echo json_encode( ... );
显然,我没有在 JSONP 响应中发送与 CORS 相关的标头,因为这似乎违反直觉。这种方法是否有任何安全性或其他影响?
【问题讨论】:
【参考方案1】:考虑到CORS
将继续存在,我建议您更改发送数据的顺序。
-
Detect CORS support
如果支持 CORS,请发送您的
application/json
回复
如果不支持 CORS,则回退到 JSONP
(IE
通过这种方式,您可以利用更安全的方法中最好的方法,并为不合规的客户使用另一种方法。
【讨论】:
以上是关于使用 CORS 和 JSONP 提供内容的主要内容,如果未能解决你的问题,请参考以下文章
使用 JSONP 或 CORS 的跨域 JavaScript 调用
AJAX学习笔记2:XHR实现跨域资源共享(CORS)以及和JSONP的对比