2016-08-18 20 views
11

Vì lý do nào đó trình duyệt của tôi (tôi đã thử một số) không cài đặt cookie mặc dù phản hồi cookie thiết lập hợp lệ đang được máy chủ trả về khi lệnh gọi GET được thực hiện qua Ajax bằng cách sử dụng fetch api để thực hiện yêu cầuTại sao tiêu đề tập hợp cookie bị trình duyệt bỏ qua và cookie không được lưu từ cuộc gọi Ajax bằng tìm nạp?

Nếu tôi thực hiện cuộc gọi GET giống hệt nhau chỉ bằng cách đặt URL trong trình duyệt, các tiêu đề phản hồi cookie thiết lập (giống hệt) được trình duyệt tôn trọng và cookie được lưu.

Tôi đã kiểm tra yêu cầu và tiêu đề phản hồi qua LiveHeaders và thanh tra mạng Chrome và không có sự khác biệt.

EDIT: Để làm rõ, đây không phải là vấn đề với ajax gửi cookie đến máy chủ. Đó là một vấn đề mà cookie không được lưu bởi trình duyệt ở tất cả khi một phản ứng trở lại với các tiêu đề thiết lập cookie hợp lệ (mà theo tài liệu nên được tôn trọng cho dù ajax hay không).

+0

http://stackoverflow.com/questions/2870371/why-is-jquerys-ajax-method-not-sending-my-session-cookie –

+0

Không giống với câu hỏi đó @Sam Axe. Vấn đề không phải là yêu cầu tiếp theo, nhưng trình duyệt không lưu cookie. – Peter

+0

Yêu cầu AJAX có xuất xứ giống nhau (giao thức, cổng, tên miền) như trang hiện tại không? – CBHacking

Trả lời

12

Sau nhiều lần đập đầu, tôi đã giải quyết vấn đề này bằng cách đặt thuộc tính 'thông tin xác thực' của yêu cầu thành 'bao gồm'. Tôi đã ấn tượng rằng điều này chỉ kiểm soát việc gửi cookie đến máy chủ khi tìm nạp yêu cầu, nhưng rõ ràng, ít nhất là trong quá trình triển khai tôi đang sử dụng, nếu không đặt nó cũng có nghĩa là cookie sẽ không được lưu nếu chúng được gửi lại từ máy chủ.

Từ spec tại https://fetch.spec.whatwg.org/

Một yêu cầu có một chế độ thông tin liên quan, đó là "bỏ", "cùng nguồn gốc", hay "bao gồm". Trừ khi được quy định khác, nó là "bỏ qua".

Chế độ thông tin xác thực của yêu cầu kiểm soát luồng thông tin xác thực trong khi tìm nạp . Khi chế độ yêu cầu là "điều hướng", chế độ thông tin xác thực của nó là được giả định là "bao gồm" và tìm nạp hiện không tính đến các giá trị khác. Nếu HTML thay đổi ở đây, tiêu chuẩn này sẽ cần tương ứng thay đổi.

Thông tin xác thực là cookie HTTP, chứng chỉ ứng dụng khách TLS và mục nhập xác thực.

Các vấn đề liên quan