AJAX通过CORS到另一个域的blob

时间:2014-11-28 17:01:27

标签: javascript php ajax cors same-origin-policy

有人能告诉我为什么这个请求未能超过SO政策限制吗?

JS:

var blob = new Blob([req.response], {type: "application/octet-stream"});
req = new XMLHttpRequest();
req.open("POST", ws_path(other_context, 'receive_pkg'), true);
req.onload = function (evt) { alert(req.response); };
req.send(blob);

另一个域上的被调用的PHP页面:

header('Access-Control-Allow-Origin: *');
file_put_contents('log.txt', 'script accessed');

请求确实存在,并且写入了日志,但浏览器会阻止响应。我对同一个脚本的另一个请求不是blob,而是一个普通的post请求,这个响应很好。问题似乎只是blob请求,我不知道为什么或者我正在做什么实际上是禁止的。

[研究工作:当我找到this question时,我对此抱有希望,但根据OP的问题,重复的答案一般只涉及CORS,而不是blob]

1 个答案:

答案 0 :(得分:0)

经过大量的挖掘和实验后,我找到了一种解决方法:即将编码从application/octet-stream更改为application/x-www-form-urlencoded

使用前者,即使显式调用的Web服务允许调用者域用于CORS,也会阻止请求。使用后者,允许调用者域通过。

然而,这带来了一个新问题:以这种方式发送的数据,至少对于PHP Web服务,可能会超过max_input_vars stat。

可以通过.htaccess文件增加它来解决这个问题,如下所示:

php_value max_input_vars 50000000