2015-02-04 9 views
7

tôi có một liên kết tải về như sau:HTML5 tải thuộc tính không hoạt động khi tải về từ máy chủ khác, ngay cả khi Access-Control-Allow-Origin được thiết lập để tất cả (*)

<a href="foo.xls" download="bar.xls">Foobar</a> 

này hoạt động tốt khi tải một tệp trên cùng một máy chủ, nhưng khi tải xuống từ máy chủ khác (lưu trữ Azure blob trong trường hợp này) tên tệp vẫn là "foo.xls", ngay cả khi phản hồi HTTP quay lại với tiêu đề sau:

Truy cập -Control-Allow-Origin: *

Đây có phải là do thiết kế hoặc có khả năng một tiêu đề khác mà tôi có thể thêm vào phản hồi HTTP để làm việc này không?

Trả lời

15

Có, theo thiết kế, các tiêu đề CORS không ảnh hưởng đến thuộc tính download. Chỉ có hai trình duyệt hỗ trợ thuộc tính download, Firefox và Chrome và cả hai trình duyệt đều có chính sách khác về các tệp gốc.

Chrome thực sự cho phép thuộc tính download trên các tệp gốc, không có tiêu đề CORS, nhưng Firefox đã chọn không trích dẫn các cuộc tấn công kỹ thuật xã hội tiềm ẩn.

MDN ghi lại hành vi này cho Firefox 20 theo download attribute section for the a tag, hành vi không thay đổi kể từ đó.

Trong Firefox 20 thuộc tính này chỉ được vinh danh cho các liên kết đến tài nguyên có cùng nguồn gốc.


This Bugzilla report đã thảo luận về vấn đề an ninh và khả năng sử dụng CORS.

Khi người dùng nhấp vào liên kết như vậy, người dùng sẽ được nhắc nếu họ muốn tải xuống. Có vẻ như rất dễ dàng cho người dùng phạm sai lầm suy nghĩ rằng nội dung nào đó trên trang web gốc đang được tải xuống và không phải cái gì từ bank.com.


Nó sẽ có thể để thực hiện nó với cùng một nguồn gốc và CORS (Access-Control-Allow-Origin) nhớ nếu bạn đang đặt câu hỏi chéo gốc an ninh? Đây là tính năng rất hữu ích cho các ứng dụng web (tạo Blob sử dụng JS và cho phép người dùng tải xuống bằng một số tên có ý nghĩa)

Google đã phản đối việc sử dụng CORS cho việc này.


Ngoài ra còn có this Bugzilla report, tóm tắt quyết định của họ từ các báo cáo lỗi khác.

Ngoài ra, tải xuống nguồn gốc chéo đang hoạt động hoàn hảo trong Google Chrome.

Có, và chúng tôi nghĩ rằng họ đang thêm các lỗi bảo mật bằng cách thực hiện điều đó.

vấn đề

Các Bugzilla dường như không để cai trị ra khả năng sử dụng CORS cho cross-nguồn gốc download hỗ trợ thuộc tính trong tương lai, nhưng ngay bây giờ sử dụng tiêu đề CORS không làm bất cứ điều gì cho thuộc tính download. Có thể là nếu các trình duyệt khác bắt đầu hỗ trợ thuộc tính thì có thể chưa đạt được sự đồng thuận.

Vì mục đích hoàn chỉnh, tất nhiên có tiêu đề Content-Disposition mà bạn có thể sử dụng để buộc tải xuống từ miền khác, nhưng điều này không cung cấp chức năng giống như thuộc tính download. Nó có hỗ trợ trình duyệt tốt hơn mặc dù.

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