我正在为公共网站提供内容,我想知道同时使用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
将继续存在,我建议切换您发送数据的顺序。
- 检测 CORS 支持
- 如果支持 CORS,请发送
application/json
响应 - 如果不支持 CORS,请回退到
JSONP
(IE<=7、Opera<12 或 Firefox<3.5)
通过这种方式,您可以赎回更安全的方法中最好的方法,并为不合规的客户回退到另一种方法。