Tại sao trình duyệt web của tôi đôi khi không hiển thị thời gian tải xuống còn lại?
Đôi khi, đồng hồ đo tiến độ 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ỉ cần giơ tay lên và từ bỏ hiển thị thời gian tải xuống còn lại. Tại sao đôi khi nó đóng đinh 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 và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.
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 ta không luôn luôn bẩn thỉu:
Thỉnh thoảng, 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 hiểu biết về tổng kích thước của tệp hoặc khoảng thời gian tải xuống - nó chỉ hiển thị tốc độ tải xuống, với tổng tốc độ như 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ơi nào có được thông tin này ở nơi đầu tiên?
Thực sự ở đâu?
Những câu trả lời
Gronostaj, người đóng góp cho SuperUser cung cấp cái nhìn sâu sắc sau:
Để yêu cầu tài liệu từ máy chủ web, 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 bạn (bây giờ có thể bị ẩn, nhưng khi bạn nhấp vào thanh địa chỉ, sao chép URL và dán nó vào một số trình soạn thảo văn bản, bạn sẽ thấy
http: //
lúc bắt đầu). Đây là một giao thức dựa trên văn bản đơn giản và nó hoạt động như thế này:Đầu 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 (Tác nhân người dùng, v.v.). Ví dụ: để tải trang chính trên trang web SuperUser,
http://superuser.com/
, trình duyệt của tôi gửi một yêu cầu giống như thế này:GET / HTTP / 1.1 Máy chủ: superuser.com Kết nối: giữ nguyên 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) Mã hóa chấp nhận: 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: [đã xóa để bảo mật] DNT : 1 If-Modified-Kể từ: Thứ ba, 09/07/2013 07:14:17 GMT
Dòng đầu tiên chỉ định tài liệu nào máy chủ sẽ trả về. Các dòng khác được gọi là tiêu đề; họ trông như thế này:
Tên tiêu đề: Giá trị tiêu đề
Những dòng này gửi thêm thông tin 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, theo sau là một số tiêu đề (có chi tiết về tài liệu) và cuối cùng, nếu tất cả đều ổn, nội dung của tài liệu. Đây là nội dung trả lời của máy chủ SuperUser cho yêu cầu của tôi như sau:
HTTP / 1.1 200 OK Kiểm soát bộ đệm: công khai, tuổi tối đa = 60 Loại nội dung: text / html; charset = utf-8 Hết hạn: Thứ ba, ngày 09 tháng 7 năm 2013 07:27:20 GMT Sửa đổi lần cuối: Thứ ba, ngày 09 tháng 7 năm 2013 07:26:20 GMT Thay đổi: * X-Frame-Tùy chọn: SAMEORIGIN Ngày: Thứ ba, 09 tháng 7 năm 2013 07:26:19 GMT Nội dung Độ dài: 139672 [snip sn]]
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 là200 OK
. Nó có nghĩa là máy chủ sẽ trả lại 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 thứ khác: bạn có thể đã thấy404 không tìm thấy
, và403 Cấm
là khá phổ biến, quá. 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, nó 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
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, bởi vì hầu hết các định dạng tài liệu không thể đọc được mà không xử lý trước.
Trở lại tiêu đề. Điều thú vị nhất đối với chúng tôi là cái cuối cùng,
Thời lượng nội dung
. Nó thông báo cho trình duyệt biết cần bao nhiêu byte dữ liệu sau dòng trống, vì vậy về cơ bả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 kích thước tài liệu (ví dụ: khi tài liệu được tạo nhanh), đôi khi các lập trình viên lười biếng không bao gồm nó (khá phổ biến trên các trang web 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.
Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.