2013-03-19 37 views
13

Chúng tôi đang đăng một yêu cầu AJAX đến một máy chủ chạy cục bộ, tức làChrome thêm tiêu đề Xuất xứ yêu cầu cùng nguồn gốc

xhr.open("POST", "http://localhost:9000/context/request"); 
xhr.addHeader(someCustomHeaders); 
xhr.send(someData); 

Các trang đó javascript này đang được thực hiện cũng đang được phục vụ từ localhost: 9000, tức là điều này hoàn toàn giống như một yêu cầu cùng xuất xứ.

Tuy nhiên, vì một số lý do, Google Chrome luôn đặt tiêu đề Gốc trong yêu cầu kết quả, khiến máy chủ của chúng tôi chặn yêu cầu dựa trên giả định sai rằng yêu cầu CORS của nó.

Điều này không xảy ra trong Firefox.

Ngoài ra, cả Firefox và Chrome đều không gửi yêu cầu preflight OPTIONS, điều này gây nhầm lẫn; tại sao đặt tiêu đề Gốc không có đèn chiếu đầu tiên để đảm bảo rằng tiêu đề Gốc và Tiêu đề tùy chỉnh được máy chủ cho phép?

Có ai biết điều gì đang xảy ra trong trường hợp này không? Chúng ta có hiểu lầm thông số CORS không?

+0

Xem http://seclab.stanford.edu/websec/csrf/csrf.ppt giải đáp tại sao tiêu đề Gốc là tốt cho các yêu cầu POST cùng nguồn gốc. Đây là một cơ chế bảo vệ CSRF. – user239558

Trả lời

22

Chrome và Safari bao gồm tiêu đề Origin về các yêu cầu POST/PUT/DELETE gốc cùng một lúc (yêu cầu GET cùng nguồn gốc sẽ không có tiêu đề Gốc). Firefox không bao gồm tiêu đề Origin trên các yêu cầu có nguồn gốc giống nhau. Trình duyệt không mong đợi các tiêu đề phản hồi CORS trên các yêu cầu có nguồn gốc giống nhau, do đó phản hồi cho một yêu cầu gốc xuất phát được gửi tới người dùng, bất kể nó có tiêu đề CORS hay không.

Tôi khuyên bạn nên kiểm tra tiêu đề Host và nếu nó khớp với tên miền trong tiêu đề Origin, không xử lý yêu cầu dưới dạng CORS. Các tiêu đề giống như thế này:

Host: example.com 
Origin: http://example.com 

Lưu ý rằng Origin sẽ có chương trình (http/https), tên miền và cổng, trong khi Host sẽ chỉ có tên miền và cổng.

+0

Điều đó làm cho rất nhiều ý nghĩa - chúng tôi sẽ thay đổi bộ lọc CORS accordingsly. Cảm ơn! –

13

Theo RFC 6454 - Web xứ Concept - sự hiện diện của xứ thực sự là pháp lý cho bất kỳ yêu cầu HTTP, trong đó có yêu cầu tương tự-xuất xứ:

http://tools.ietf.org/html/rfc6454#section-7.3

"Người dùng đại lý CÓ THỂ bao gồm trường tiêu đề Gốc trong bất kỳ yêu cầu HTTP nào. "

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