本文描述了HTTP协议使用Etag对内容进行缓存以便减少不必要的网络传输以提高运行效率的机制。后面用英文写,但我的英文不太好,如有错误之处,希望大家帮我纠正,我的联系方式在后面。
This article describes the HTTP procotol mechanism of using Etag to cache resources and resume file download in order to reduce unnecessory network transfer so the performance can increase.
190Please respect copyright.PENANAsLAA2iyWqf
Section A. ETag
Etag is an identity of a resource, for example, we can use "10000_20241125150500" as the identity of a file where 10000 is the file size and 20241125150500 is the last modifed time of the file. We tell client browsers the etag of a file, then the browser cache the file and its etag, when next time the file is requested again, the browser can first just send the etag of the file to server, and if the server find the etag remain unchanged, then the browser can use the cache, no need to get the file from server once again.
The server send the etag of a resource by header like this:190Please respect copyright.PENANAIgI7rXDgDx
---------------http response with etag----------------190Please respect copyright.PENANA5XqlL6VUmm
HTTP/1.1 200 OK190Please respect copyright.PENANAGMDiDfYFNP
Date: Mon, 25 Nov 2024 10:56:12 GMT190Please respect copyright.PENANAOuHAdRLvRK
accept-ranges: bytes190Please respect copyright.PENANA6amAh18fk8
ETag: "534231200_1732277116"190Please respect copyright.PENANAU6qcroEvaG
Content-Length: 534231200190Please respect copyright.PENANAZxkpwvpTjg
Content-Type: application/octet-stream190Please respect copyright.PENANAhlMtSSTWdn
Content-Disposition: attachment; filename="zen.iso"
(http body for the resource)190Please respect copyright.PENANAkRoCH02lcf
-----------------------------------------------------
190Please respect copyright.PENANAQCw4oy9s5L
Section B. if-none-match
The browser send back the etag to ask server if it has been changed by header like this:190Please respect copyright.PENANAyZjI63PAgV
-----http request for a cached resource------190Please respect copyright.PENANAsPa6lTuGwD
GET /zen.iso HTTP/1.1190Please respect copyright.PENANAlEkySRmlSo
if-none-match: "534231200_1732277116"190Please respect copyright.PENANAtgK6omrZep
---------------------------------------------
If the etag is unchanged, the server response like this:
1. for get and head requests:190Please respect copyright.PENANAThXWiiyel8
-----------http response for unchanged resource------190Please respect copyright.PENANAWxhEekUHZc
HTTP/1.1 304 Not Modified
(http body canbe empty, the client will used its cache)190Please respect copyright.PENANAOXu6c8pUJl
----------------------------------------------------
2. for other methods requests:190Please respect copyright.PENANAlEa0dwJkAb
-----------http response for unchanged resource------190Please respect copyright.PENANAldsZ3Yguy6
HTTP/1.1 412 Precondition Failed
(http body canbe empty, the client will used its cache)190Please respect copyright.PENANAV0zkoaDBAa
----------------------------------------------------
190Please respect copyright.PENANA65WMIjvp37
If the etag changes, the server response 200 OK with the new file content like this:190Please respect copyright.PENANAFzTc07qR5h
---------------http response with etag----------------190Please respect copyright.PENANAqD17sG3JMR
HTTP/1.1 200 OK190Please respect copyright.PENANAZBahAr8WKq
Date: Mon, 25 Nov 2024 10:56:12 GMT190Please respect copyright.PENANAyTb0Iubp16
accept-ranges: bytes190Please respect copyright.PENANAk9cWSH5Ghj
ETag: "534231200_1732277116"190Please respect copyright.PENANANM5okyyP2D
Content-Length: 534231200190Please respect copyright.PENANAquaQg4qyD8
Content-Type: application/octet-stream190Please respect copyright.PENANAK4alFpTW4U
Content-Disposition: attachment; filename="zen.iso"
(http body for the resource)190Please respect copyright.PENANAG5ygQbyoGm
-----------------------------------------------------
190Please respect copyright.PENANAaW2C2QxKYm
Section C. if-match
When resuming a download in the browser download manager, the browser sends a range request with the if-match header like this:190Please respect copyright.PENANAVxTCYXdVZC
------resume download request-------190Please respect copyright.PENANANhucTikQlc
GET /zen.iso HTTP/1.1190Please respect copyright.PENANAiJUXqvfy9h
Range: bytes=287718144-190Please respect copyright.PENANAMVY79ccMFd
If-Match: "534231200_1732277116"190Please respect copyright.PENANA2ROtGA19PY
-----------------------------------190Please respect copyright.PENANAoYKGQs0uaJ
It tells the server to check the etag in If-Match, if unchanged, resume to get the remain content; otherwise, return 412 Precondition Failed.
The server response for unchanged etag is like this:190Please respect copyright.PENANACRVaOZcSMg
-------------range response-------------------190Please respect copyright.PENANA13jiAk1gog
HTTP/1.1 206 Partial Content190Please respect copyright.PENANAOItMNAKcOG
accept-ranges: bytes190Please respect copyright.PENANALaCwB5CTeW
content-range: bytes 287718144-534231199/534231200190Please respect copyright.PENANAZuI94dpNbI
ETag: "534231200_1732277116"190Please respect copyright.PENANAKyuEYo33K9
Content-Length: 246513056190Please respect copyright.PENANAKwL9GNEZlh
Content-Type: application/octet-stream190Please respect copyright.PENANAvv1vrDPUw6
Content-Disposition: attachment; filename="zen.iso"
(http body is the remain file content)190Please respect copyright.PENANAvluhRO2RD8
-------------------------------------------
If the etag changes, response 412 like this:190Please respect copyright.PENANAy8LcmhPEVI
-----------http response for changed resource------190Please respect copyright.PENANAajML6Uphif
HTTP/1.1 412 Precondition Failed
(http body canbe empty, the client will stop downloading the resumed file)190Please respect copyright.PENANA1oJ897xQOp
---------------------------------------------------
190Please respect copyright.PENANArcWYrdmSa7
Section D. if-range
If-Range is similar with If-Match, it's used by chrome when resuming a download in the download manager, whereas firefox use If-Match. They are the same except that when the etag changes, if-range response the resource content from beginning, so the resumed download will start downloading from beginning, while if-match just response the 412 error to stop the resumed download. I think chrome do a better job.
---resume download request by chrome---190Please respect copyright.PENANAqn2yHr2W7N
GET /zen.iso HTTP/1.1190Please respect copyright.PENANALIet19lN2p
Range: bytes=287718144-190Please respect copyright.PENANA9JeaUEPMzz
If-Range: "534231200_1732277116"190Please respect copyright.PENANAvXSl7N9Dqm
------------------------------------190Please respect copyright.PENANA3LYH9uKRpx
It tells the server to check the etag in If-Range, if unchanged, resume to get the remain content; otherwise, return 200 OK and the file content from the beginning.
The server response for unchanged etag is like this:190Please respect copyright.PENANAu8N2WiVcuo
-------------range response-------------------190Please respect copyright.PENANAaCpYMhyyQP
HTTP/1.1 206 Partial Content190Please respect copyright.PENANACFccdHZ91v
accept-ranges: bytes190Please respect copyright.PENANAAnrVb30JUQ
content-range: bytes 287718144-534231199/534231200190Please respect copyright.PENANA66gc5Q72AW
ETag: "534231200_1732277116"190Please respect copyright.PENANAknUtUz54Fy
Content-Length: 246513056190Please respect copyright.PENANA1qvHBYiAsR
Content-Type: application/octet-stream190Please respect copyright.PENANA3sL2wglSEq
Content-Disposition: attachment; filename="zen.iso"
(http body is the remain file content)190Please respect copyright.PENANAJ1WVM2PCm5
-------------------------------------------
If the etag changes, response 200 from beginning like this:190Please respect copyright.PENANAhCutIvtJAw
-----------http response from the beginning------190Please respect copyright.PENANAF5Ek7cnD9X
HTTP/1.1 200 OK190Please respect copyright.PENANAcsKKTKhmWo
Date: Mon, 25 Nov 2024 10:56:12 GMT190Please respect copyright.PENANAhZB38eY5Sj
accept-ranges: bytes190Please respect copyright.PENANA15o0LWlvDL
ETag: "534231200_1732277116"190Please respect copyright.PENANAzRGFQMgO0a
Content-Length: 534231200190Please respect copyright.PENANATq0jqofZjJ
Content-Type: application/octet-stream190Please respect copyright.PENANAilqTQzptcf
Content-Disposition: attachment; filename="zen.iso"
(http body for the resource)190Please respect copyright.PENANAQiFc4ZlzDG
---------------------------------------------------
190Please respect copyright.PENANAo50hb5njQn
Section X. Thanks
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match190Please respect copyright.PENANAmAqyWY3zpX
https://blog.csdn.net/catoop/article/details/134174653190Please respect copyright.PENANAAshs35UFDi
https://blog.csdn.net/phker/article/details/50722619
Section Y. Contacts Me
If you found any errors or have any suggestions for this article, please let me know, my wechat: si_jinmin, my email: [email protected]190Please respect copyright.PENANAdC536Xddkn
如果您发现本文有任何错误,或者对本文有好的建议,欢迎与我联系探讨,我的微信: si_jinmin, 我的email: [email protected]
如果您對C/C++ Programming, Linux, HTTP Protocol, Website Development, Vue, Git, VsCode感興趣,邀請您加入「Linux/C/C++ Website Development」微信群,請加我的微信(si_jinmin)以便拉您进群。
ns216.73.216.113da2