2011-04-28 43 views
37

Yêu cầu GET đơn giản không có tiêu đề tùy chỉnh. Phản hồi được trả về như mong đợi. Dữ liệu trong cơ thể có thể truy cập được, nhưng không truy cập được vào phần đầu.Chia sẻ tài nguyên tên miền chéo GET: 'từ chối nhận tiêu đề không an toàn "etag"' từ Phản hồi

Khi tôi cố gắng truy cập vào "etag" tiêu đề, trình duyệt nâng cao một ngoại lệ:

từ chối để có được an toàn tiêu đề "etag"

Chrome, Safari và Firefox tất cả cư xử như vậy. Tôi đã không kiểm tra nó trên IE.

Tôi thiếu gì ở đây?

+0

UPDATE: Chỉ các tiêu đề sau đây có thể truy cập: - Hết hạn - Last Modified - Content-Language - Cache-Control - Content-Type – Mohamed

+0

Nếu bất cứ ai muốn biết khi đã được cố định này, tôi đã tìm thấy các lỗi trong [webkit] (https://bugs.webkit.org/show_bug.cgi?id=41210) và [chromium] (https://code.google.com/p/chromium/issues/detail?id= 87338 & có thể = 1 & q = Access-Control-Expose-Headers & colspec = ID% 20Pri% 20M% 20Giảm% 20ReleaseBlock% 20Cr% 20Status% 20Owner% 20Summary% 20OS% 20Modified). – rvignacio

Trả lời

66

tiêu đề phản ứng Chỉ đơn giản được tiếp xúc khi sử dụng CORS. Các tiêu đề phản hồi đơn giản được xác định here. ETag không phải là tiêu đề phản hồi đơn giản. Nếu bạn muốn để lộ tiêu đề không đơn giản, bạn cần phải thiết lập các Access-Control-Expose-Headers tiêu đề, như vậy:

Access-Control-Expose-Headers: ETag 

Tuy nhiên, lưu ý rằng tôi đã nhận thấy lỗi trong Chrome, Safari và Firefox mà ngăn chặn tiêu đề không đơn giản từ được tiếp xúc chính xác. Điều này có thể được sửa chữa bởi bây giờ, tôi không chắc chắn.

Bạn không nên cần phải làm một yêu cầu preflight, vì preflight chỉ được yêu cầu cho phi GET/POST phương pháp http hoặc không đơn giản yêu cầu header (và bạn đang hỏi về phản ứng tiêu đề).

+3

Tôi xác nhận hỗ trợ cho tiêu đề Access-Control-Expose-Headers bị lỗi. – Mohamed

+2

Tôi rất muốn biết điều gì làm cho Đơn giản sửa đổi lần cuối và không phải là ETag. Không phải họ phải hỗ trợ cùng một mục đích đó là tối ưu hóa bộ nhớ cache? – Mohamed

+1

Bạn thực hiện một điểm tốt.Tôi không biết động lực đằng sau nó, nhưng đây là một chủ đề đề cập đến nó (tôi chưa đọc nó): http://lists.w3.org/Archives/Public/public-webapps/2010AprJun/0038. html – monsur

1

Bạn đã bao giờ cố gắng AJAX 2.0 (Cross miền chia sẻ) là một phương pháp khá gần đây đưa ra bởi W3C: http://www.w3.org/TR/XMLHttpRequest2/#ref-cors

Cũng có một cách khác để làm điều này, được gọi là JSON-P, nó giống như một JSON yêu cầu, nhưng bạn có thể sử dụng nó cho các tên miền chéo: http://en.wikipedia.org/wiki/JSONP

Cả hai đều có thể rất nguy hiểm cho chủ sở hữu trang web nếu không được thiết lập chính xác. Vì vậy, hãy cẩn thận khi sử dụng nó.

[PS] Không chắc chắn nếu điều này sẽ giúp: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+1

Bạn đã đọc tiêu đề của câu hỏi chưa? Nó được cho là BE CORS – mplungjan

+0

Rất tiếc, tôi đã không thực sự nhận thấy nó nếu tôi thành thật. Nhưng vẫn có thể sử dụng JSONP – DarkMantis

+0

Chắc chắn, nhưng nó là thú vị để biết những gì đang xảy ra. Đặc biệt là kể từ khi JSONP hút khi nói đến lỗi xử lý – mplungjan

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