Tại sao trình duyệt web của tôi đôi khi không hiển thị số lần tải xuống còn lại?

Mục lục:

Tại sao trình duyệt web của tôi đôi khi không hiển thị số lần tải xuống còn lại?
Tại sao trình duyệt web của tôi đôi khi không hiển thị số lần tải xuống còn lại?

Video: Tại sao trình duyệt web của tôi đôi khi không hiển thị số lần tải xuống còn lại?

Video: Tại sao trình duyệt web của tôi đôi khi không hiển thị số lần tải xuống còn lại?
Video: Tắt tính năng tự mở lại ứng dụng sau khi khởi động lại máy Surface - YouTube 2024, Tháng tư
Anonim
Đôi khi, đồng hồ đo tiến trình tải xuống trung thành trên trình duyệt của bạn (hoặc ứng dụng khác) chỉ cần ném tay trong không khí và từ bỏ hiển thị thời gian tải xuống còn lại. Tại sao đôi khi nó làm móng thời gian tải xuống dự kiến và đôi khi không báo cáo tất cả lại với nhau?
Đôi khi, đồng hồ đo tiến trình tải xuống trung thành trên trình duyệt của bạn (hoặc ứng dụng khác) chỉ cần ném tay trong không khí và từ bỏ hiển thị thời gian tải xuống còn lại. Tại sao đôi khi nó làm móng thời gian tải xuống dự kiến và đôi khi không báo cáo tất cả lại với nhau?

Phiên Hỏi & Đáp hôm nay đến với chúng tôi theo lịch sự của SuperUser - một phân khu 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 siêu người dùng Coldblackice muốn biết tại sao trình duyệt của anh ấy không phải lúc nào cũng ăn bẩn:

Occasionally, when downloading a file in a web browser, the download progress doesn’t “know” the total size of the file, or how far along in the download it is - it just shows the speed at which it’s downloading, with a total as “Unknown”.

Why wouldn’t the browser know the final size of some files? Where does it get this information in the first place?

Thực sự ở đâu?

Những câu trả lời

Người đóng góp của SuperUser Gronostaj cung cấp thông tin chi tiết sau:

To request documents from web servers, browsers use the HTTP protocol. You may know that name from your address bar (it may be hidden now, but when you click the address bar, copy the URL and paste it in some text editor, you’ll see

https://

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 (User-Agent, v.v.). Ví dụ: để tải trang chính trên trang web SuperUser,

https://superuser.com/

trình duyệt của tôi gửi một yêu cầu giống như sau:

GET / HTTP/1.1 Host: superuser.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Accept-Encoding: gzip,deflate,sdch Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: [removed for security] DNT: 1 If-Modified-Since: Tue, 09 Jul 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:

Header name: Header value

Những dòng này gửi thông tin bổ sung giúp máy chủ quyết định việc cần làm.

Nếu tất cả là tốt, máy chủ sẽ trả lời bằng cách gửi tài liệu được yêu cầu. Phản hồi bắt đầu với thông báo trạng thái, tiếp theo 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 tốt, 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 như sau:

HTTP/1.1 200 OK Cache-Control: public, max-age=60 Content-Type: text/html; charset=utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Tue, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 […snip…]

Sau dòng cuối cùng, máy chủ của SuperUser sẽ đó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,

200 OK

. 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ấy

404 Not Found

403 Forbidden

cũng khá phổ biến. Sau đó, các tiêu đề tiếp theo.

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ứ trong quá khứ đó 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 một tài liệu để tải xuống, nó có thể sẽ là một số ký tự sai ngữ pháp, bởi vì hầu hết các định dạng tài liệu không đọc được mà không cần 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,

Content-Length

. Nó thông báo cho trình duyệt biết bao nhiêu byte dữ liệu mà nó sẽ mong đợi 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 kích thước tài liệu không thể dự đoán được (ví dụ khi tài liệu được tạo khi đang bay), đô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 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 số lượng dữ liệu mà máy chủ sẽ gửi và do đó hiển thị kích thước tài liệu nhưkhông xác định, đợi máy chủ đóng kết nối. Và đó là lý do cho các kích thước tài liệu không xác định.

Có cái gì để thêm vào lời giải thích? Â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 có hiểu biết công nghệ khác? Xem toàn bộ chuỗi thảo luận tại đây.

Đề xuất: