【问题标题】:Including cookies in GET request to cross-domain server在跨域服务器的 GET 请求中包含 cookie
【发布时间】:2014-08-27 04:14:55
【问题描述】:

我正在尝试通过纯 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?谢谢!

【问题讨论】:

    标签: javascript xmlhttprequest cross-domain


    【解决方案1】:

    你不能为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, 接受编码, 访问控制请求标头, 访问控制请求方法, 联系, 内容长度, 内容传输编码, 曲奇饼, 饼干2, 日期, 预计, 主持人, 活着, 起源, 推荐人, 你, 预告片, 传输编码, 升级, 通过

    【讨论】:

    • 我会问他们是否有可能,但如果我能以某种方式处理这一切,那就太棒了。
    • 我已与远程服务器所有者合作,提出了另一种解决方案。感谢您的帮助!
    猜你喜欢
    • 2014-01-13
    • 2014-04-27
    • 1970-01-01
    • 2018-03-02
    • 2015-01-17
    • 1970-01-01
    • 2017-02-02
    • 2012-10-24
    • 2013-06-30
    相关资源
    最近更新 更多