Ứng dụng JavaScript của tôi cần xác định độ dài của tài nguyên trước khi tải xuống bằng Ajax. Thông thường đây không phải là một vấn đề, bạn chỉ cần thực hiện một yêu cầu HEAD và trích xuất các Content-Length
.Làm cách nào để truy cập vào tiêu đề Nội dung dài từ yêu cầu Ajax tên miền chéo?
var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// "2195"
Tuy nhiên, tài nguyên được lưu trữ trên máy chủ khác cho khách hàng. (Một máy chủ tôi kiểm soát). Vì vậy, tôi đang sử dụng CORS để thực hiện các yêu cầu ajax miền chéo và đã thiết lập máy chủ để phản hồi các yêu cầu preflighting cho các yêu cầu HEAD và các yêu cầu GET/POST với các tiêu đề tùy chỉnh.
Đó là làm việc lớn trong chính, nhưng tôi dường như không thể tìm ra cách giải nén Content-Length
từ phản ứng TRỤ khi làm việc với CORS:
var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// ERROR: Refused to get unsafe header "Content-Length"
tôi đã thử nghiệm với thiết tiêu đề khác nhau trong preflighting hoặc trong phản hồi, chẳng hạn như
Access-Control-Expose-Headers: Content-Length
mà đặc điểm kỹ thuật có vẻ đề xuất sẽ làm cho nó khả dụng. Nhưng không có vấn đề gì tôi làm, tôi dường như không thể làm cho tiêu đề Content-Length có sẵn cho khách hàng. Bất kỳ đề xuất?
(Chrome 8)
Phải. Bạn có nghĩ rằng điều này nên được nộp dưới dạng lỗi trên Webkit không? –
Có. Hãy thử tìm kiếm đầu tiên, tôi nghĩ rằng tôi đã thấy một lỗi về điều này trước đây, nhưng tôi không thể tìm thấy nó ngay bây giờ. – monsur