我正试图通过纯Javascript向跨域服务器发送XHR,同时包括我在域上生成的cookie值。
我还在开发一个没有启用同源策略的嵌入式系统。
我在SO上尝试了一些不同的配置,但到目前为止都没有成功。
例如,以下是我的GET请求:
Remote Address: XXX.XXX.XXX.XXX:80
Request URL: http://someotherdomain.com/api?param1=value¶m2=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,拖车传输编码,升级通过