2015-04-22 89 views
0

跨域問題。從HTTP到相同的域HTTPS。jQuery不發送Cookie到服務器

服務器需要X-Requested-With頭,所以我將其設置在jQuery的阿賈克斯選項:

'headers': {'X-Requested-With': 'XMLHttpRequest'} 

jQuery的發送選項,然後:

OPTIONS /my/test/ HTTP/1.1 
Host: www.my.dev 
Origin: http://www.my.dev 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: x-requested-with 

服務器響應:

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST 
Access-Control-Allow-Headers: x-requested-with 
Access-Control-Allow-Credentials: true 

然後jQuery的發送「實際「請求:

POST /my/test/ HTTP/1.1 
Host: www.test.dev 
X-Requested-With: XMLHttpRequest 
Origin: http://www.test.dev 

Cookie標題丟失!

HTTP/1.1 403 Forbidden 
Content-Type: application/json 
Set-Cookie: SESSID=3tg8svt3lrv97v155uv2kqr3o2; expires=Sat, 25-Apr-2015 17:35:13 GMT; Max-Age=259200; path=/ 

添加

'xhrFields': { 
     'withCredentials': true 
    }, 
    'crossDomain': { 
     'crossDomain': true 
    }, 

jQuery的AJAX選項導致jQuery的不發送實際的請求可言,唯一的選擇:與

服務器響應。

如何發送cookie? 至少有人可以確認cookie是以類似的設置發送的嗎?

+0

是否僅將cookie定義爲https?沒有什麼可以替代你的...... –

+0

你確定這個cookie不是一個HTTPS專用cookie嗎? – Pointy

+0

服務器對實際請求的響應更新了問題。就我所見,Cookie不是HTTPS。 – coviex

回答

1

使它工作。

一些重要注意事項:

  • crossDomain似乎並沒有做任何事情
  • 如果您在阿賈克斯選項withCredentials,但沒有在OPTIONS響應,那麼實際的請求沒有做出
  • 如果你Access-Control-Allow-Credentials沒有withCredentials jQuery不會發送Cookie標頭
  • 如果您在實際請求中沒有發送Cookie,那麼服務器會ES不發送Access-Control-Allow-OriginAccess-Control-Allow-Credentials頭回
  • 響應實際要求必須Access-Control-Allow-OriginAccess-Control-Allow-Credentials頭 - 否則的jQuery並不解析響應主體(雖然它看到響應代碼和好了所有的報頭),並拋出一個錯誤安慰
  • 沒有設置不會改變任何東西
  • 頭字母的大小寫並不雖然jQuery的關係有Cookie域小寫被迫頭名

PS

  • 我不知道,但我想jQuery的不添加任何額外的特殊位置,以便jQuery的=瀏覽器
  • 服務器:nginx 1.7.6,PHP 5.5.24;瀏覽器:FF31,Chrome42; jquery 2.0。3
+0

我有withCredentials但PUT/OPTIONS不發送cookie(GET/POST發送cookie)。任何理由爲什麼這將是真實的? –