本文描述了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.
375Please respect copyright.PENANAUt0CVn5O3A
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:375Please respect copyright.PENANAwSKFgMUWj2
---------------http response with etag----------------375Please respect copyright.PENANAY2HdzmJSjp
HTTP/1.1 200 OK375Please respect copyright.PENANA7SjNHZe3lW
Date: Mon, 25 Nov 2024 10:56:12 GMT375Please respect copyright.PENANAs846H3IAXK
accept-ranges: bytes375Please respect copyright.PENANAZZb7W7B2J3
ETag: "534231200_1732277116"375Please respect copyright.PENANAeRkFf2XGG3
Content-Length: 534231200375Please respect copyright.PENANA3cUQvzKsKA
Content-Type: application/octet-stream375Please respect copyright.PENANA1XJH0uPtPa
Content-Disposition: attachment; filename="zen.iso"
(http body for the resource)375Please respect copyright.PENANAZusSPbSOcK
-----------------------------------------------------
375Please respect copyright.PENANAPrH3KO1bAB
Section B. if-none-match
The browser send back the etag to ask server if it has been changed by header like this:375Please respect copyright.PENANAyjdYMl1xZt
-----http request for a cached resource------375Please respect copyright.PENANA8hg6PqlYLp
GET /zen.iso HTTP/1.1375Please respect copyright.PENANAXjdik51Pxp
if-none-match: "534231200_1732277116"375Please respect copyright.PENANAlAgaW0bcKV
---------------------------------------------
If the etag is unchanged, the server response like this:
1. for get and head requests:375Please respect copyright.PENANAm3Jh2bprtI
-----------http response for unchanged resource------375Please respect copyright.PENANAAeDTKCuhKk
HTTP/1.1 304 Not Modified
(http body canbe empty, the client will used its cache)375Please respect copyright.PENANAxWwHpKeljj
----------------------------------------------------
2. for other methods requests:375Please respect copyright.PENANA706uQ7oab6
-----------http response for unchanged resource------375Please respect copyright.PENANAHLoEqgmXrd
HTTP/1.1 412 Precondition Failed
(http body canbe empty, the client will used its cache)375Please respect copyright.PENANAx9bAfUH9ow
----------------------------------------------------
375Please respect copyright.PENANAwzMkZN8OOL
If the etag changes, the server response 200 OK with the new file content like this:375Please respect copyright.PENANAZab0AVMZ5f
---------------http response with etag----------------375Please respect copyright.PENANABfFSDnBfKp
HTTP/1.1 200 OK375Please respect copyright.PENANAjYjoQpyNR6
Date: Mon, 25 Nov 2024 10:56:12 GMT375Please respect copyright.PENANALs3j8BtXwy
accept-ranges: bytes375Please respect copyright.PENANALrMuDvUjef
ETag: "534231200_1732277116"375Please respect copyright.PENANAf4oKopEZ8z
Content-Length: 534231200375Please respect copyright.PENANAS4X00jw4Ka
Content-Type: application/octet-stream375Please respect copyright.PENANAVJRvR1MmBL
Content-Disposition: attachment; filename="zen.iso"
(http body for the resource)375Please respect copyright.PENANAViPbQK5wcP
-----------------------------------------------------
375Please respect copyright.PENANAXS6wiACmaH
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:375Please respect copyright.PENANAttcCcMiuqy
------resume download request-------375Please respect copyright.PENANAcWAGlyZUTm
GET /zen.iso HTTP/1.1375Please respect copyright.PENANAFgBcsVXqX9
Range: bytes=287718144-375Please respect copyright.PENANAOqMRSg9Dh0
If-Match: "534231200_1732277116"375Please respect copyright.PENANAc4WloJjmuH
-----------------------------------375Please respect copyright.PENANAzVoHn3Qhe1
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:375Please respect copyright.PENANAaHzTvjTKfz
-------------range response-------------------375Please respect copyright.PENANA5A9VtqBOxf
HTTP/1.1 206 Partial Content375Please respect copyright.PENANA4H3XIUS9u6
accept-ranges: bytes375Please respect copyright.PENANA5Z4gN9pwnd
content-range: bytes 287718144-534231199/534231200375Please respect copyright.PENANA6TA79T1ipW
ETag: "534231200_1732277116"375Please respect copyright.PENANAfZo581Usv4
Content-Length: 246513056375Please respect copyright.PENANAzxxWL1dXG6
Content-Type: application/octet-stream375Please respect copyright.PENANAvIWcDRUPBr
Content-Disposition: attachment; filename="zen.iso"
(http body is the remain file content)375Please respect copyright.PENANA37ho7QGONO
-------------------------------------------
If the etag changes, response 412 like this:375Please respect copyright.PENANA74wKcWOQEf
-----------http response for changed resource------375Please respect copyright.PENANAzhkyE0X8qy
HTTP/1.1 412 Precondition Failed
(http body canbe empty, the client will stop downloading the resumed file)375Please respect copyright.PENANAD1NHO3mtJi
---------------------------------------------------
375Please respect copyright.PENANAxy7POaMkYa
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---375Please respect copyright.PENANA3hEST0OzjQ
GET /zen.iso HTTP/1.1375Please respect copyright.PENANAsy9OInoTys
Range: bytes=287718144-375Please respect copyright.PENANAzrIO2tAkGC
If-Range: "534231200_1732277116"375Please respect copyright.PENANAWSE0l2I5cz
------------------------------------375Please respect copyright.PENANA0ibfrcfHNQ
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:375Please respect copyright.PENANALfswHmVHv2
-------------range response-------------------375Please respect copyright.PENANAtQ22IWPVqR
HTTP/1.1 206 Partial Content375Please respect copyright.PENANA5HQzaSNgjM
accept-ranges: bytes375Please respect copyright.PENANAsJJCZLw4c9
content-range: bytes 287718144-534231199/534231200375Please respect copyright.PENANAOkRBwVbfjL
ETag: "534231200_1732277116"375Please respect copyright.PENANA7k2IWqQiu6
Content-Length: 246513056375Please respect copyright.PENANAddMNxzqxKj
Content-Type: application/octet-stream375Please respect copyright.PENANAkJq9YVEAoK
Content-Disposition: attachment; filename="zen.iso"
(http body is the remain file content)375Please respect copyright.PENANALv3R6sHL5x
-------------------------------------------
If the etag changes, response 200 from beginning like this:375Please respect copyright.PENANAIobuOO8S1a
-----------http response from the beginning------375Please respect copyright.PENANAxU6lnFvysf
HTTP/1.1 200 OK375Please respect copyright.PENANAnIGpceGmZw
Date: Mon, 25 Nov 2024 10:56:12 GMT375Please respect copyright.PENANAFHCh2LPmPk
accept-ranges: bytes375Please respect copyright.PENANAnwYFc0plu3
ETag: "534231200_1732277116"375Please respect copyright.PENANAs86n2u8Qa6
Content-Length: 534231200375Please respect copyright.PENANAJVNLVOia5H
Content-Type: application/octet-stream375Please respect copyright.PENANACuEVYswMs4
Content-Disposition: attachment; filename="zen.iso"
(http body for the resource)375Please respect copyright.PENANAHFD6mRtqBF
---------------------------------------------------
375Please respect copyright.PENANAqfW1q0hipN
Section X. Thanks
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match375Please respect copyright.PENANAnnNmMvCfvL
https://blog.csdn.net/catoop/article/details/134174653375Please respect copyright.PENANAcKqqacieeC
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]375Please respect copyright.PENANArqx1aHDGxZ
如果您发现本文有任何错误,或者对本文有好的建议,欢迎与我联系探讨,我的微信: 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.217.114da2


