Video và phụ đề · Direct Media Downloader
Chuyển hướng, Độ dài nội dung và byte đầu tiên: vòng đời của tải xuống trực tiếp
· Cách thức hoạt động
http lượt tải xuống developer-workflow
Từ thời điểm quá trình tải xuống bắt đầu cho đến khi byte đầu tiên đến, một số bước HTTP sẽ diễn ra một cách vô hình. Bài đăng này giải thích các chuyển hướng, tiêu đề phản hồi và cách tìm nạp báo cáo chúng cũng như ý nghĩa của một công cụ đặt tên máy chủ của nó ở phía trước.
Quá trình tải xuống bắt đầu và không có gì xảy ra trong năm giây — các bước vô hình giữa lần nhấp chuột và byte đầu tiên
Năm giây yên tĩnh sau khi nhấn Tải xuống có thể chứa thiết lập kết nối, chuyển hướng, kiểm tra ủy quyền máy chủ và chờ tiêu đề phản hồi trước khi các phần nội dung có sẵn. Thanh tiến trình không thể tiến lên cho đến khi byte đến, do đó, độ trễ trước khi cập nhật đầu tiên không tự động là giao diện bị đóng băng.
Liên kết Kiểm tra tùy chọn có thể hiển thị hỗ trợ trạng thái, Loại nội dung, Độ dài nội dung và phạm vi byte thông qua HEAD khi máy chủ cho phép đọc tiêu đề nhiều nguồn gốc. Đây là một yêu cầu riêng biệt, không phải là yêu cầu khởi động được đảm bảo để tăng tốc GET sau này vì cả hai lệnh gọi đều sử dụng `cache: no-store`. Dấu vết phân tích thời gian sẽ hữu ích hơn việc chờ đợi theo cảm nhận vì nó phân tách các giai đoạn xếp hàng, kết nối, chờ máy chủ và nội dung tải xuống mà trình duyệt hiển thị.
Dòng yêu cầu và tiêu đề: những gì trình duyệt gửi - phương thức, đường dẫn, Chấp nhận và những gì tìm nạp trên nhiều trang web giữ lại theo mặc định
Nội dung tải xuống sử dụng GET so với HTTPS URL đã được xác thực. Tìm nạp và trình duyệt xây dựng các tiêu đề yêu cầu thực tế; mã ứng dụng bỏ qua thông tin xác thực một cách rõ ràng và ngăn chặn người giới thiệu. Nó không giả mạo Tác nhân người dùng hoặc Người giới thiệu, đính kèm cookie đăng nhập hoặc thêm mã thông báo nền tảng.
Yêu cầu trên nhiều trang vẫn có thể bao gồm ngữ cảnh do trình duyệt kiểm soát, chẳng hạn như Origin. Các tiêu đề chính xác khác nhau tùy theo trình duyệt và môi trường, vì vậy DevTools là bằng chứng cho một lần chạy cụ thể. Nguồn chứng minh phương thức được định cấu hình, chế độ thông tin xác thực, chính sách liên kết giới thiệu, chế độ bộ đệm, chính sách chuyển hướng và tín hiệu hủy bỏ. Sự hiện diện của tiêu đề là tùy chọn trong các phản hồi HTTP và CORS có thể hạn chế khả năng hiển thị của tập lệnh, do đó việc không có tổng số được hiển thị không phải là bằng chứng về tệp trống.
Chuyển hướng: khi máy chủ mà bạn đặt tên chuyển giao bạn cho một máy chủ khác — cách tìm nạp tuân theo các phản hồi 301, 302 và 307 cũng như cách response.url tiết lộ địa chỉ cuối cùng
Cả HEAD và GET đều chỉ định `redirect: follow`. Do đó, 301, 302, 307 hoặc chuyển hướng được hỗ trợ khác có thể chuyển yêu cầu từ URL ban đầu được công bố sang tài nguyên cuối cùng. Tìm nạp chỉ giải quyết sau khi chuỗi đạt được phản hồi hoặc không thành công theo chính sách của trình duyệt.
Trình tải xuống không hiển thị `response.url`, mặc dù phản hồi Tìm nạp hiển thị địa chỉ cuối cùng. Để kiểm tra các bước nhảy, hãy lưu giữ nhật ký Mạng và kiểm tra các hàng chuyển hướng ở đó. Điều này quan trọng vì thông báo trước khi liên hệ nêu tên máy chủ được cung cấp; nó không thể thông báo vị trí mà máy chủ chọn sau này. Để duy trì kiểu 307, ngữ nghĩa của phương thức khác với hành vi viết lại thông thường, một lý do khác để tin tưởng vào dấu vết trình duyệt thay vì tóm tắt mọi bước nhảy là giống hệt nhau.
Độ dài nội dung và Loại nội dung: tiêu đề phản hồi hứa hẹn điều gì - kích thước và loại được biết như thế nào trước khi phần nội dung kết thúc
Loại nội dung gắn nhãn phản hồi và trở thành loại Blob, trong khi Độ dài nội dung hữu hạn dương cung cấp tổng số dự kiến. Đường dẫn GET từ chối tổng số được khai báo vượt quá 2 GiB trước khi phát trực tuyến. Nếu tiêu đề bị thiếu, tiến trình vẫn không xác định và các byte nhận được thực tế sẽ buộc phải bảo vệ.
Tiêu đề là các câu lệnh từ máy chủ, không đảm bảo rằng phần nội dung sẽ hoàn thành hoặc khớp với nhãn của nó. Kết nối có thể đóng sớm và ứng dụng có thể định cấu hình sai siêu dữ liệu MIME. ToolAcre sử dụng các giá trị này cho các quyết định mô tả, tiến trình và đặt tên mà không tuyên bố rằng chúng xác thực nội bộ phương tiện. Mã này cũng kiểm tra lại số byte tích lũy so với mức tối đa của nó, đảm bảo rằng độ dài không có hoặc không chính xác sẽ không vô hiệu hóa ranh giới bộ nhớ của ứng dụng.
Ví dụ đã hoạt động: liên kết 'trực tiếp' thoát qua trình rút ngắn liên kết - đọc từng bước nhảy trong bảng điều khiển mạng
Đối với liên kết được phép rút gọn, hãy mở DevTools, bật Bảo tồn nhật ký và bắt đầu bằng Kiểm tra liên kết hoặc Tải xuống. Mở rộng hàng đầu tiên để xem trạng thái chuyển hướng và Vị trí khi được hiển thị, sau đó theo chuỗi phản hồi có nội dung cung cấp tệp. So sánh từng tên máy chủ với cơ sở hạ tầng dự kiến của nhà xuất bản.
Cột thời gian byte đầu tiên tách biệt việc chờ đợi và truyền. Khi các khối đến, ToolAcre sẽ báo cáo số byte tích lũy; với Độ dài nội dung, nó có thể tính một phân số. Một byte đầu tiên muộn, theo sau là phần thân nhanh, gợi ý một nút cổ chai khác với phản hồi ngay lập tức, sau đó là quá trình truyền kéo dài chậm. Việc so sánh giữa các lần thử lại sẽ giữ cho cài đặt bộ nhớ đệm và điều kiện mạng luôn nhất quán; nếu không thì cấu hình thời gian đã thay đổi có thể mô tả quá trình thiết lập thử nghiệm thay vì nguồn gốc.
Tại sao việc chuyển hướng lại quan trọng đối với máy chủ đã được công bố — công cụ này sẽ thông báo URL mà bạn đã cung cấp cho nó; chuyển hướng có thể dẫn đến nơi khác và bảng điều khiển mạng hiển thị vị trí
Thông báo tên máy chủ đã gửi là hữu ích nhưng nhất thiết phải không đầy đủ khi cho phép chuyển hướng. Công cụ rút ngắn đáng tin cậy có thể trỏ đến bộ nhớ CDN một cách hợp pháp, trong khi một chuỗi không mong muốn có thể xuyên qua các tổ chức. Giao diện không giải quyết trước chuỗi đó vì làm như vậy bản thân nó sẽ yêu cầu liên hệ.
Những người đánh giá yêu cầu danh sách cho phép nên xác minh mọi tên máy chủ được quan sát hoặc tránh hoàn toàn các liên kết rút gọn. ToolAcre chặn các đích đến riêng tư rõ ràng trong URL đã gửi nhưng không xác nhận lại từng mục tiêu chuyển hướng trong mã ứng dụng; bảo vệ mạng trình duyệt vẫn là một lớp khác. CDN cuối cùng có thể có chính sách quyền riêng tư và quyền tài phán khác với trình rút ngắn, vì vậy quá trình xem xét đích phải mở rộng ra ngoài thương hiệu hiển thị trong liên kết đã gửi.
Điều này không bao gồm - yêu cầu phạm vi, tiếp tục hoặc máy chủ phát trực tuyến với mã hóa phân đoạn và không có độ dài
Quy trình làm việc này không gửi các yêu cầu Phạm vi, tiếp tục các byte bị gián đoạn, buộc Độ dài Nội dung hoặc diễn giải lại khung truyền phân đoạn dưới dạng tổng số đã biết. HEAD có thể báo cáo `Accept-Ranges: bytes`, tuy nhiên quá trình tải xuống hiện tại vẫn thực hiện một GET thông thường và tích lũy phản hồi từ đầu.
Nó cũng không xác thực. Chuyển hướng đến trang đăng nhập có thể dẫn đến HTML hoặc HTTP bị từ chối vì cookie bị bỏ qua. Việc coi trang đó là phương tiện có thể tải xuống sẽ là sai lầm, do đó, cảnh báo MIME trước đó và kiểm tra tiêu đề phản hồi cuối cùng là các biện pháp bảo vệ hữu ích. Các máy chủ sử dụng khung chunked hoặc ở cấp độ giao thức có thể cung cấp nội dung hoàn chỉnh không có Độ dài nội dung và giao diện người dùng tránh biến sự không chắc chắn hợp pháp đó thành 0 một cách chính xác.
Bài học rút ra: biết bước nhảy của bạn - cách sử dụng Direct Media Downloader và bảng điều khiển mạng cùng nhau để xem mọi máy chủ đã thực sự liên hệ
Liên kết trực tiếp mô tả sự bắt đầu của hành trình HTTP, không nhất thiết phải là một máy chủ vật lý. Trình tự có thể quan sát là GET ban đầu, mọi chuyển hướng được theo dõi, tiêu đề phản hồi, đoạn nội dung đầu tiên, các đoạn tiếp theo, tạo Blob và một hành động lưu cục bộ riêng biệt sau khi hoàn thành.
Ghép nối thông báo về máy chủ ban đầu của Direct Media Downloader với bảng điều khiển Mạng khi nguồn gốc đích đến có vấn đề. Sự kết hợp đó cho thấy những gì đã được hứa trước khi liên hệ và những gì thực sự xảy ra sau đó mà không phát minh ra sự hỗ trợ cho việc chuyển tiền có thể tiếp tục, proxy ẩn hoặc dự đoán chuyển hướng. Trình tự thời gian này cũng giải thích tại sao việc lưu chỉ xuất hiện sau khi hoàn thành: quá trình triển khai không hiển thị Blob được lắp ráp một phần như thể đó là một phản hồi đầy đủ đã được xác minh.