Tiếng Việt

Video và phụ đề · Direct Media Downloader

Tại sao CORS có thể chặn tải xuống trực tiếp trong trình duyệt và ý nghĩa của việc đó

· Cách thức hoạt động

cors http lượt tải xuống

Yêu cầu trình duyệt đáp ứng ranh giới phản hồi trên nhiều nguồn gốc tại máy chủ phương tiện
Hình minh họa vector ToolAcre gốc

Trình tải xuống chỉ dành cho trình duyệt tuân theo chính sách cùng nguồn gốc. Bài đăng này giải thích CORS là gì, tại sao một số máy chủ cho phép tìm nạp còn số khác thì không và tại sao một công cụ không có máy chủ chuyển tiếp không thể hoạt động xung quanh nó.

Liên kết hoạt động trong tab mới nhưng không thành công trong công cụ — câu đố mà lỗi CORS tạo ra cho người dùng

Bao vây podcast có thể phát khi được nhập vào thanh địa chỉ nhưng không thành công khi một trang cố đọc nó bằng Tìm nạp. Điều hướng và đọc kịch bản là những sức mạnh khác nhau của trình duyệt. Màn hình đầu tiên hiển thị một tài nguyên; cái thứ hai có thể hiển thị các byte của nó cho mã chạy trên nguồn gốc khác.

Direct Media Downloader cần có sức mạnh thứ hai vì nó đọc các đoạn phản hồi, báo cáo tiến trình, xây dựng Blob và cung cấp một bản lưu có tên. Khi máy chủ phương tiện không chọn tham gia đọc nhiều nguồn gốc đó, trình duyệt sẽ dừng JavaScript nhận phản hồi ngay cả khi điều hướng thông thường vẫn có thể hoạt động. Sự khác biệt tương tự giải thích tại sao việc sao chép địa chỉ vào một ứng dụng khác có thể tạo ra một kết quả khác mà không cần ứng dụng nào thay đổi tệp từ xa.

Chính sách cùng nguồn gốc trong một đoạn — tại sao một trang trên toolacre.com không thể tự do đọc byte được cung cấp từ nguồn khác

Nguồn gốc kết hợp lược đồ, tên máy chủ và cổng. Do đó, một trang được phân phối từ ToolAcre và một tệp được phân phối từ nhà xuất bản CDN thường có nguồn gốc khác nhau. Chính sách cùng nguồn gốc ngăn không cho tập lệnh của một nguồn tự do đọc phản hồi của nguồn khác, bảo vệ dữ liệu bị lộ thông qua quyền truy cập của trình duyệt xung quanh.

Hạn chế này được thực thi bởi trình duyệt chứ không phải bởi cảnh báo được tạo ra trong trình tải xuống. Nó áp dụng trước khi mã ứng dụng có thể kiểm tra các tiêu đề hoặc phần nội dung được bảo vệ. Máy chủ nguồn vẫn có thể nhận được yêu cầu, do đó, quá trình đọc bị chặn không bao giờ được mô tả là “không có gì được liên hệ”. Ranh giới gốc áp dụng cho các phản hồi có thể đọc được, không chỉ cho các phần mở rộng tệp, do đó, hậu tố `.mp3` rõ ràng không cho phép miễn trừ đặc biệt đối với tập lệnh trang.

Access-Control-Allow-Origin làm gì - cách máy chủ của tệp chứ không phải công cụ quyết định xem trình duyệt có thể chuyển giao byte hay không

Máy chủ từ xa có thể chọn tham gia bằng cách trả về tiêu đề `Access-Control-Allow-Origin` thích hợp. Quyết định đó thuộc về cấu hình của máy chủ lưu trữ tệp. ToolAcre không thể thêm tiêu đề vào phản hồi của người khác và tùy chọn yêu cầu không thể cấp quyền cho máy chủ nhận.

Tiêu đề cho phép cho phép trình duyệt hiển thị phản hồi cho trang; nó không chứng nhận bản quyền, độ an toàn hoặc chất lượng phương tiện. Tương tự như vậy, tiêu đề bị thiếu không chứng tỏ URL bị hỏng. Điều đó chỉ có nghĩa là tập lệnh có nguồn gốc chéo này không có quyền đọc những gì máy chủ trả về. Quản trị viên máy chủ nên kiểm tra nguồn gốc yêu cầu chính xác và các phương thức mà họ dự định hỗ trợ, thay vì thêm các tiêu đề cho phép một cách mù quáng vào toàn bộ không gian tên lưu trữ.

Các lần đọc nhiều nguồn gốc bị chặn và lý do tập lệnh không nhận được phản hồi có thể lưu được

Trình tải xuống sử dụng Tìm nạp chế độ CORS thông thường thay vì `no-cors`. Khi đọc nhiều nguồn gốc bị từ chối, Tìm nạp từ chối và mã ứng dụng không nhận được tiêu đề cũng như nội dung có thể sử dụng được. Công cụ báo cáo danh mục `CORS_OR_NETWORK` kết hợp vì trình duyệt cố tình không tiết lộ đủ chi tiết để phân biệt CORS với mọi lỗi truyền tải.

Phản hồi không rõ ràng thuộc về các yêu cầu `no-cors` rõ ràng nhưng chế độ đó sẽ không giải quyết được công việc này: JavaScript không thể kiểm tra nội dung mờ và biến nó thành Blob dự định. Do đó, việc triển khai thực sự thất bại thay vì nhận được phản hồi không thể đọc được và giả vờ như nó có thể lưu được phản hồi đó. Vì ứng dụng không bao giờ lấy được các byte ẩn đó nên ứng dụng không thể tính toán trung thực tiến trình, suy ra tên tệp từ các tiêu đề được bảo vệ hoặc tạo đối tượng hữu ích URL từ chúng.

Ví dụ đã hoạt động: đọc yêu cầu không thành công trong bảng điều khiển mạng — phát hiện tiêu đề bị thiếu và xác nhận rằng không có máy chủ chuyển tiếp nào được liên hệ

Mở bảng Mạng, lưu giữ nhật ký và nhấn Kiểm tra liên kết một lần. Hàng HEAD đã thử xác định đích đến và có thể hiển thị chẩn đoán CORS của trình duyệt. Kiểm tra tiêu đề phản hồi nếu có; việc thiếu tiêu đề cho phép giải thích tại sao mã trang không nhận được kích thước hoặc loại MIME được quảng cáo.

Việc kiểm tra không thành công đã là bằng chứng cho thấy một yêu cầu thực sự đã được thực hiện. Không có hàng ToolAcre API chứa URL đã dán và không có yêu cầu chuyển tiếp thứ hai. Nếu máy chủ cho phép HEAD kém thì Tải xuống vẫn có thể hoạt động khác vì nó sử dụng GET nhưng không đường dẫn nào âm thầm chuyển đổi kiến ​​trúc. Cách diễn đạt của bảng điều khiển khác nhau giữa các trình duyệt, do đó, hãy lưu giữ bằng chứng về hàng và tiêu đề bị lỗi thay vì phụ thuộc vào cách diễn đạt của một nhà cung cấp trong báo cáo hoạt động.

Tại sao công cụ không định tuyến xung quanh nó - proxy có nghĩa là gửi liên kết của bạn đến máy chủ, đó chính xác là điều mà công cụ hứa sẽ không thực hiện

Một proxy có thể tìm nạp phía máy chủ tệp và trả về nó từ một điểm cuối có cùng nguồn gốc, tránh việc đọc nhiều nguồn gốc của trình duyệt. Nó cũng sẽ tiết lộ liên kết và mọi byte được chuyển tiếp tới nhà điều hành đó, phát sinh băng thông và tạo ra một bề mặt tìm nạp tùy ý. ToolAcre cố tình không có điểm cuối như vậy.

Dự phòng được giao diện đề xuất là liên kết Lưu gốc của trình duyệt dưới dạng hành động, nếu có. Đó là việc điều hướng hoặc xử lý tải xuống hơn là đọc tập lệnh trang. Đề xuất không làm suy yếu chính sách máy chủ, xác thực khách truy cập hoặc biến luồng được bảo vệ thành tệp trực tiếp. Việc từ chối kiến ​​trúc đó cũng ngăn ToolAcre tích lũy các bản sao, nhật ký truy cập hoặc các đặc quyền tìm nạp đi chỉ để biến việc từ chối trình duyệt thành thành công rõ ràng.

Nội dung này không bao gồm — CORS không giống với 403, tường đăng nhập hoặc URL đã ký đã hết hạn

Lỗi CORS không phải là HTTP 403, mặc dù cả hai đều có thể dừng quy trình làm việc. 403 là trạng thái phản hồi mà máy chủ đã chọn; một chữ ký hết hạn có thể gây ra một chữ ký. Tường đăng nhập cần thông tin xác thực mà công cụ này bỏ qua. Mất mạng, lỗi DNS và các vấn đề về chứng chỉ có thể gây ra tình trạng từ chối Tìm nạp chung của trình duyệt.

Do đó, chẩn đoán nên sử dụng bảng Mạng và Bảng điều khiển cùng nhau thay vì coi mọi lỗi đều là tiêu đề bị thiếu. ToolAcre báo cáo các trạng thái HTTP đã biết khi có phản hồi có thể đọc được nhưng từ chối đoán khi trình duyệt chỉ cung cấp ngoại lệ hình vận chuyển. Việc tách riêng các danh mục này sẽ hướng dẫn biện pháp khắc phục một cách chính xác: định cấu hình CORS cho đối tượng công cộng được ủy quyền, làm mới liên kết đã hết hạn, đăng nhập thông qua nhà cung cấp hoặc khắc phục kết nối.

Bài học rút ra: CORS là quyết định của phía máy chủ — cách Trình tải xuống phương tiện trực tiếp báo cáo điều đó một cách trung thực thay vì âm thầm quay trở lại máy chủ

CORS được kiểm soát tại máy chủ phương tiện. Trình tải xuống chỉ dành cho trình duyệt có thể tuân theo lựa chọn đó, giải thích và dừng lại; nó không thể ghi đè lựa chọn từ mã máy khách. Ranh giới này chính xác là bất tiện vì nó ngăn cản các trang tùy ý trở thành trình đọc đa trang phổ biến.

Sử dụng kiểm soát tải xuống do máy chủ cung cấp, yêu cầu tệp được ủy quyền CORS đã bật hoặc sử dụng liên kết Lưu gốc nếu thích hợp. Direct Media Downloader giữ đúng lời hứa của mình bằng cách vạch trần sự từ chối và duy trì đường dẫn trực tiếp từ trình duyệt đến máy chủ, chứ không phải bằng cách ẩn máy chủ đằng sau một nút thành công hơn. Do đó, kết quả thành công phải đến từ một máy chủ hợp tác hoặc một cơ sở trình duyệt hợp pháp khác, không bao giờ được loại bỏ văn bản lỗi trong khi vẫn giữ nguyên nội dung đọc bị từ chối.