在跨域服务器的GET请求中包含cookie



我正试图通过纯Javascript向跨域服务器发送XHR,同时包括我在域上生成的cookie值。

我还在开发一个没有启用同源策略的嵌入式系统。

我在SO上尝试了一些不同的配置,但到目前为止都没有成功。

例如,以下是我的GET请求:

Remote Address: XXX.XXX.XXX.XXX:80  
Request URL: http://someotherdomain.com/api?param1=value&param2=value2  
Request Method: GET
Accept:*/*  
Accept-Encoding:gzip,deflate,sdch  
Accept-Language:en-US,en;q=0.8  
Connection:keep-alive  
Cookie:OTHERSITESCOOKIE=somevalue  
Host:someotherdomain.com  
Referer:http://myexample.com/mypage 

下面是我可以看到的一些响应标头:

Access-Control-Allow-Credentials:true  
Access-Control-Allow-Origin:*  
Content-Length:79  
Content-Type:application/json  

因此,对我来说,问题是远程服务器在"Cookie"标头中期望某些值,但我不能直接在请求中设置它。我尝试为我的域设置cookie,但它没有随请求一起发送,我无法为远程域创建cookie。

有人知道我在请求中包含自己域名的cookie时缺少什么吗?谢谢

您不能为ajax请求设置Cookie标头,如果尝试,将收到非法警告。一种选择是设置一个不同的头(即Ajax Cookie),然后让他们在服务器端解析它。

纯JavaScript:

xmlhttp.setRequestHeader( 'Ajax-Cookie', document.cookie );

jquery等价物:

$.ajax({
        url: cross-domain-url,
        headers: { 'Ajax-Cookie' : document.cookie }
        ...
});

如果您使用php,则可以使用http_parse_cookie来获取cookie值。

$_AJAX_COOKIES = http_parse_cookie( $_SERVER[ 'HTTP_AJAX_COOKIE' ] )[ 'cookies' ];

编辑:

下面是一个不能设置的头列表:accept charset,接受编码,访问控制请求报头,访问控制请求方法,联系内容长度,内容传输编码,曲奇cookie2,日期预料主办保持活力,起源referer,te,拖车传输编码,升级通过

相关内容

  • 没有找到相关文章

最新更新