使用 CORS 和 JSONP 提供内容



我正在为公共网站提供内容,我想知道同时使用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相关的标头,因为这似乎违反直觉。此方法是否有任何安全性或其他影响?

考虑到CORS将继续存在,我建议切换您发送数据的顺序。

  1. 检测 CORS 支持
  2. 如果支持 CORS,请发送application/json响应
  3. 如果不支持 CORS,请回退到 JSONP(IE<=7、Opera<12 或 Firefox<3.5)

通过这种方式,您可以赎回更安全的方法中最好的方法,并为不合规的客户回退到另一种方法。

最新更新