使用CORS和JSONP提供内容

时间:2014-03-04 00:55:29

标签: php ajax api jsonp cors

我正在为公共网站提供内容,我想知道是否会同时使用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 个答案:

答案 0 :(得分:1)

考虑到CORS仍然存在,我建议您更改发送数据的顺序。

  1. Detect CORS support
  2. 如果支持CORS,请发送您的application/json回复
  3. 如果不支持CORS,则回退到JSONP(IE <= 7,Opera&lt; 12或Firefox&lt; 3.5)
  4. 通过这种方式,您可以兑换最安全的方法,并为不合规的客户端重新使用。