Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回jsonp而不是json_Php_Json - Fatal编程技术网

Php 返回jsonp而不是json

Php 返回jsonp而不是json,php,json,Php,Json,与json相比,我慢慢地实现了jsonp,因为我了解到jsonp方法更安全,它可以防止CORS。那么在我的服务器端,jsonp应该是什么样子呢 我为json所做的只是 $arr = array(); $arr[] = {'a'=>'apple','b'=>'ballon'} json_encode($arr); 如果是为了jsonp呢 JSONP并没有“阻止CORS”,JSONP是一种解决方案,通过显式要求服务器与Javascript协作来支持来自第三方域的GET请求。其工作方式

与json相比,我慢慢地实现了jsonp,因为我了解到jsonp方法更安全,它可以防止CORS。那么在我的服务器端,jsonp应该是什么样子呢

我为json所做的只是

$arr = array();
$arr[] = {'a'=>'apple','b'=>'ballon'}

json_encode($arr);
如果是为了jsonp呢

JSONP并没有“阻止CORS”,JSONP是一种解决方案,通过显式要求服务器与Javascript协作来支持来自第三方域的GET请求。其工作方式是请求Javascript传递它希望执行的回调函数的名称。然后,服务器通过将其响应包装在此回调函数中进行协作。当此响应作为嵌入代码返回浏览器时,将使用来自服务器的数据执行回调

如果请求给出回调名称
foo
,则响应应如下所示:

foo({"a": "apple", ...});
因此:


使用CORS而不是jsonpso jsonp仍然不安全吗?到目前为止,我为json编写了标题('Access-Control-Allow-Methods:GET,POST');标题(“访问控制允许标题:X-request-With”);在我的服务器端,jsonp也需要这些吗?定义“安全”。“安全”是为了什么?CORS最终应该取代JSONP;JSONP是同源策略的一种变通方法,它不需要额外的技术。CORS必须由浏览器专门支持,JSONP只是使用现有的Javascript功能。但它以一种仍然安全的方式执行,因为它需要服务器的显式支持。这并不是说JSONP是不可渗透的;从这里开始,例如:
printf('%s(%s);', $_GET['callback'], json_encode($arr));