Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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
跨域AJAX with Credentials,PHP返回标题内容长度,但不返回内容_Php_Javascript_Ajax_Http Headers_Cross Domain - Fatal编程技术网

跨域AJAX with Credentials,PHP返回标题内容长度,但不返回内容

跨域AJAX with Credentials,PHP返回标题内容长度,但不返回内容,php,javascript,ajax,http-headers,cross-domain,Php,Javascript,Ajax,Http Headers,Cross Domain,我试图从一个域的页面向另一个域的PHP服务器发送一个跨域请求。没有凭据,一切都正常。我需要一个会话,但一旦添加凭据,它就不起作用了 以下是JS代码: var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://phpserver.net',true); xhr.withCredentials = true ; xhr.onreadystatechange = function(e) { if (this.readyState == 4

我试图从一个域的页面向另一个域的PHP服务器发送一个跨域请求。没有凭据,一切都正常。我需要一个会话,但一旦添加凭据,它就不起作用了

以下是JS代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://phpserver.net',true);
xhr.withCredentials = true ;
xhr.onreadystatechange = function(e) {
    if (this.readyState == 4 && this.status == 200) {
        alert(this.responseText);
    }
}
xhr.send();
请记住,它在没有凭据的情况下工作。没有警报。 所以我用Firebug检查了网络:

服务器正确地处理了请求,接收时使用HTTP代码200,但没有内容。 我检查了标题:

HTTP/1.1 200 OK
Date: Fri, 14 Jun 2013 17:20:19 GMT
Server: Apache/2.4.2 (Win64) PHP/5.4.3
X-Powered-By: PHP/5.4.3
Access-Control-Allow-Origin: *
access-control-allow-credentials: true
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: key=441wqr3e4cf2456c763c1ea173aa06b5ad284e5f38; expires=Fri, 28-Jun-2013 17:20:19 GMT
key2=248fbaf41cdd698549fdddb341927885; expires=Fri, 28-Jun-2013 17:20:19 GMT
Content-Length: 8
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
最后是我最奇怪的发现: 标题内容长度实际上显示了真正的内容长度!如果我添加一个echo foo,内容长度将增加三倍,以此类推

我看了很多问题,但这个问题真的很棘手,我找不到任何解决办法

编辑: 我忘了提到,如果我使用用户脚本和GM_xhr函数而不是xmlHttpRequest对象,则此请求会起作用。

将headerAccess Control Allow Credentials设置为true时,不能将通配符用于header Access Control Allow Origin。也就是说,必须指定特定的主机

而不是:

Access-Control-Allow-Origin: *
使用:

您甚至可以将Access Control Allow Origin标头设置为请求中接收到的Origin标头。不确定PHP,但使用Java Servlets API:

String origin = request.getHeader("Origin");    
request.setHeader("Access-Control-Allow-Origin", origin);
当将headerAccess Control Allow Credentials设置为true时,不能将通配符用于header Access Control Allow Origin。也就是说,必须指定特定的主机

而不是:

Access-Control-Allow-Origin: *
使用:

您甚至可以将Access Control Allow Origin标头设置为请求中接收到的Origin标头。不确定PHP,但使用Java Servlets API:

String origin = request.getHeader("Origin");    
request.setHeader("Access-Control-Allow-Origin", origin);

这可能是一个P3P问题,您是否尝试将任何P3P标题添加到接收PHP页面?我不熟悉P3P,所以我搜索了它是什么,但我真的看不出与问题的关系以及如何解决它。这可能是一个P3P问题,您是否尝试过向接收PHP页面添加任何P3P标题?我不熟悉P3P,所以我搜索了它是什么,但我真的不知道与问题的关系以及如何解决它。谢谢您:这很有效。问题还在于我没有添加协议http://No 问题,兄弟。很高兴它帮助了你。谢谢你:这很有效。问题还在于我没有添加协议http://No 问题,兄弟。很高兴它帮助了你。