我尝试通过纯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?谢谢!
答案 0 :(得分:2)
您无法为ajax请求设置Cookie标头,如果您尝试,则会收到非法警告。一种选择是设置不同的头(即Ajax-Cookie),然后让它们在服务器端解析它。
Pure 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, 日期, 期望, 主办, 活着, 起源, 引荐, 德, 预告片, 传输编码, 升级, 通过