Đôi khi, đồng hồ đo tiến trình tải xuống trung thực trên trình duyệt của bạn (hoặc ứng dụng khác) chỉ đưa tay vào không trung và từ bỏ việc hiển thị thời gian tải xuống còn lại. Tại sao đôi khi nó bắt kịp thời gian tải xuống dự kiến và đôi khi không báo cáo tất cả cùng nhau?
Phiên Hỏi & Đáp hôm nay đến với chúng tôi với sự hỗ trợ của SuperUser — một phần của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều hành.
Câu hỏi
Người đọc SuperUser Coldblackice muốn biết lý do tại sao trình duyệt của anh ấy không phải lúc nào cũng dọn dẹp:
Đôi khi, khi tải xuống một tệp trong trình duyệt web, tiến trình tải xuống không "biết" tổng kích thước của tệp hoặc bao xa trong quá trình tải xuống - nó chỉ hiển thị tốc độ tải xuống, với tổng là "Không xác định".
Tại sao trình duyệt không biết kích thước cuối cùng của một số tệp? Nó lấy thông tin này ở đâu?
Thực sự ở đâu?
Những câu trả lời
Cộng tác viên SuperUser Gronostaj cung cấp thông tin chi tiết sau:
Để yêu cầu tài liệu từ máy chủ web, các trình duyệt sử dụng giao thức HTTP. Bạn có thể biết tên đó từ thanh địa chỉ của mình (tên này có thể bị ẩn ngay bây giờ, nhưng khi bạn nhấp vào thanh địa chỉ, sao chép URL và dán vào một trình soạn thảo văn bản nào đó, bạn sẽ thấy
http://lúc bắt đầu). Đó là một giao thức dựa trên văn bản đơn giản và nó hoạt động như sau:Trước tiên, trình duyệt của bạn kết nối với máy chủ của trang web và gửi URL của tài liệu mà nó muốn tải xuống (các trang web cũng là tài liệu) và một số chi tiết về chính trình duyệt ( Đại lý người dùng Vân vân). Ví dụ: để tải trang chính trên trang SuperUser,
http://superuser.com/, trình duyệt của tôi sẽ gửi một yêu cầu giống như sau:GET / HTTP / 1.1 Máy chủ: superuser.com Kết nối: giữ cho cuộc sống Chấp nhận: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 Tác nhân người dùng: Mozilla / 5.0 (Windows NT 6.1; WOW64) Chấp nhận mã hóa: gzip, deflate, sdch Ngôn ngữ chấp nhận: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [removed for security] ĐNT: 1 Nếu-Sửa đổi-Kể từ: Thứ Ba, ngày 09 tháng 7 năm 2013 07:14:17 GMTDòng đầu tiên chỉ định tài liệu mà máy chủ sẽ trả về. Các dòng khác được gọi là tiêu đề; chúng trông như thế này:
Tên tiêu đề: Giá trị tiêu đềNhững dòng này gửi thông tin bổ sung giúp máy chủ quyết định phải làm gì.
Nếu tất cả đều ổn, máy chủ sẽ phản hồi bằng cách gửi tài liệu được yêu cầu. Phản hồi bắt đầu bằng một thông báo trạng thái, sau đó là một số tiêu đề (với thông tin chi tiết về tài liệu) và cuối cùng, nếu tất cả đều ổn, là nội dung của tài liệu. Đây là câu trả lời của máy chủ SuperUser cho yêu cầu của tôi trông giống như sau:
HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Nội dung-Loại: text / html; charset = utf-8 Hết hạn: Thứ Ba, ngày 09 tháng 07 năm 2013 07:27:20 GMT Sửa lần cuối: Thứ Ba, ngày 09 tháng 7 năm 2013 07:26:20 GMT Thay đổi: * X-Frame-Options: SAMEORIGIN Ngày: Thứ Ba, ngày 09 tháng 07 năm 2013 07:26:19 GMT Nội dung-Độ dài: 139672 <! DOCTYPE html> <html> [...snip...] </html>Sau dòng cuối cùng, máy chủ của SuperUser đóng kết nối.
Dòng đầu tiên (
HTTP / 1.1 200 OK) chứa mã phản hồi , trong trường hợp này, nó là200 được. Nó có nghĩa là máy chủ sẽ trả về một tài liệu, theo yêu cầu. Khi máy chủ không quản lý để làm như vậy, mã sẽ là một cái gì đó khác: bạn có thể đã thấy404 không tìm thấyvà403 bị cấmcũng khá phổ biến. Sau đó, các tiêu đề theo sau.Khi trình duyệt tìm thấy một dòng trống trong phản hồi, trình duyệt biết rằng mọi thứ vượt qua dòng đó là nội dung của tài liệu mà nó yêu cầu. Vì vậy, trong trường hợp này
<! DOCTYPE html>là dòng đầu tiên của mã trang chủ của SuperUser. Nếu tôi yêu cầu tải xuống một tài liệu, nó có thể là một số ký tự vô nghĩa vì hầu hết các định dạng tài liệu đều không thể đọc được nếu không được xử lý trước.Quay lại tiêu đề. Điều thú vị nhất đối với chúng tôi là điều cuối cùng,
Thời lượng nội dung. Nó thông báo cho trình duyệt có bao nhiêu byte dữ liệu mà nó sẽ mong đợi sau dòng trống, vì vậy về cơ bản, nó là kích thước tài liệu được biểu thị bằng byte. Tiêu đề này không bắt buộc và có thể bị máy chủ bỏ qua. Đôi khi không thể dự đoán được kích thước tài liệu (ví dụ: khi tài liệu được tạo nhanh chóng), đôi khi các lập trình viên lười biếng không đưa nó vào (khá phổ biến trên các trang tải xuống trình điều khiển), đôi khi các trang web được tạo bởi những người mới không biết của một tiêu đề như vậy.Dù sao, bất kể lý do là gì, tiêu đề có thể bị thiếu. Trong trường hợp đó, trình duyệt không biết máy chủ sẽ gửi bao nhiêu dữ liệu và do đó hiển thị kích thước tài liệu là không xác định , chờ máy chủ đóng kết nối. Và đó là lý do cho kích thước tài liệu không xác định.