Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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
Javascript Tornado+nginx CORS饼干_Javascript_Cookies_Nginx_Cors_Tornado - Fatal编程技术网

Javascript Tornado+nginx CORS饼干

Javascript Tornado+nginx CORS饼干,javascript,cookies,nginx,cors,tornado,Javascript,Cookies,Nginx,Cors,Tornado,我有一个Tornado应用程序,它作为一个API服务器,处理来自其他几个站点的请求。我还计划使用nginx作为负载平衡器 问题是CORS cookies。例如,当有人访问partner网站partner.com时,其中的JS脚本会向我的服务器发送几个请求。第一个请求旨在设置几个cookie。但事实并非如此 我所拥有的: tornado上没有标题设置 nginx上的以下配置 access_log /var/log/nginx/api_access.log; error_log /var/log/n

我有一个Tornado应用程序,它作为一个API服务器,处理来自其他几个站点的请求。我还计划使用nginx作为负载平衡器

问题是CORS cookies。例如,当有人访问partner网站partner.com时,其中的JS脚本会向我的服务器发送几个请求。第一个请求旨在设置几个cookie。但事实并非如此

我所拥有的:

tornado上没有标题设置 nginx上的以下配置

access_log /var/log/nginx/api_access.log;
error_log /var/log/nginx/api_error.log;

add_header Access-Control-Allow-Origin http://salesmarine.ru;
add_header Access-Control-Allow-Credentials 'true';
add_header Set-Cookie test=111;

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_pass http://api;
    proxy_next_upstream error;
}
来自JS的所有请求都使用.withCredentials=true发送;选项 以下是请求数据:

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Cookie:t_id=d9ed7601a2074e78b5ba38ab58ad7043; t_id_session=0c7910f9b3194e899d233e68380df59f;                 test=111
Host:server.com
If-None-Match:"bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f"
Origin:http://example.com
Referer:http://example.com/test
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko)         Chrome/37.0.2062.120 Safari/537.36
Query String Parametersview sourceview URL encoded
id:54129700102392342dff6dbe
apiKey:2a8bb0a06bca4ad59c4d4079dce30a30
client_id:54129700102392342dff6dbe
apikey:2a8bb0a06bca4ad59c4d4079dce30a30
user_id:null
Response Headersview source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://example.com
Connection:keep-alive
Date:Fri, 12 Sep 2014 19:40:17 GMT
Etag:"bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f"
Mime-Type:text/javascript
Server:TornadoServer/4.0.2
Set-Cookie:test=111
并且没有发送cookies。有什么问题吗


还有更好的方法——控制来自tornado或nginx的标题?

好吧,我已经弄明白了。问题是CORS本身-我无法为另一个域设置cookies。 访问控制允许凭据允许这样做,但该域上的JS将无法使用cookie

有很多到Resources的链接,但它对理解CORS非常有用

我最初问题的第二部分是对我保持模棱两可。胡乱猜测——如果使用nginx+tornado,nginx首先接收传入的请求。因此,它应该返回正确的标题