使用 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的对比

CORS 和 JSONP

JSONP跨域和CORS跨域的区别

使用带有 JSONP 的 AJAX 未捕获的 SyntaxError 和 CORS 错误

同源策略:JSONP和CORS