Senior
Ինչպե՞ս է տեղի ունենում ֆայլերի կեշավորումը պրոտոկոլի մակարդակում։
sobes.tech AI
Պատասխան AI-ից
HTTP պրոտոկոլի մակարդակով կեշավորումը կատարվում է գլխագրերի և մեթոդների միջոցով, որոնք թույլ են տալիս հաճախորդին և սերվերին որոշել, արդյոք անհրաժեշտ է վերից բեռնել ռեսուրսը կամ օգտագործել այն տեղական կեշից: հիմնական մեխանիզմներ՝
-
Սերվերից կեշավորման գլխագրեր:
Cache-Control: որոշում է կեշավորման հրահանգները, օրինակ՝ առավելագույն կյանքի ժամկետը (max-age), թույլատրել կեշավորումը (public,private), արգելել կեշավորումը (no-cache,no-store), պահանջել վերանայել (must-revalidate):Expires: հնացած գլխագիր, որը ցույց է տալիս ամսաթիվը և ժամանակը, երբ ռեսուրսը համարվում է հնացած: Կարող է վերագրանցվելCache-Control-իmax-age-ով:ETag: Էնտիթի-տեգ (Entity Tag) - ռեսուրսի տարբերակի եզակի նշան, որը ստեղծում է սերվերը:Last-Modified: ամսաթիվ և ժամանակ ռեսուրսի վերջին փոփոխության:
-
Հաճախորդից պայմանական հարցումներ:
If-None-Match: հաճախորդը ուղարկում է մի քանիETag-ներ, որոնք ունի կեշում: Եթե ոչ մեկը չի համընկնում սերվերի ընթացիկETag-ին, սերվերը ուղարկում է ամբողջ ռեսուրսը 200 OK կոդով: Եթե համընկնում է, սերվերը վերադարձնում է 304 Not Modified առանց մարմնի, և հաճախորդը օգտագործում է կեշում պահած տարբերակը:If-Modified-Since: հաճախորդը ուղարկում է վերջին փոփոխության ամսաթիվը, որը ունի կեշում: Եթե ռեսուրսը սերվերում փոխվել է այդ ամսաթվից հետո, սերվերը ուղարկում է ամբողջ ռեսուրսը 200 OK կոդով: Եթե ոչ, վերադարձնում է 304 Not Modified:
Կեշավորման ալգորիթմը՝
- Հաճախորդը ուղարկում է ռեսուրսի հարցում:
- Սերվերը ուղարկում է ռեսուրսը, ավելացնելով
Cache-Control,Expires,ETag,Last-Modifiedգլխագրերը: - Հաճախորդը պահում է ռեսուրսը (պատասխանի մարմինը) այդ գլխագրերով տեղական կեշում:
- Երբ հաջորդ հարցում է նույն ռեսուրսի համար, հաճախորդը ստուգում է կեշում գտնվող գլխագրերը:
- Եթե ռեսուրսը թարմ է
Cache-Control(max-age) կամExpires-ով, օգտագործում է կեշում պահած ռեսուրսը: - Եթե ոչ, ուղարկում է պայմանական հարցում՝ օգտագործելով
If-None-Matchև/կամIf-Modified-Since:
- Եթե ռեսուրսը թարմ է
- Սերվերը ստանում է պայմանական հարցումը:
- Եթե ռեսուրսը չի փոխվել, պատասխան է տալիս 304 Not Modified:
- Եթե փոխվել է, պատասխան է տալիս 200 OK և նոր ռեսուրսով:
- Հաճախորդը ստանում է պատասխանն ու գործադրում ըստ դրա:
- 304 Not Modified դեպքում օգտագործում է կեշում պահած ռեսուրսը:
- 200 OK դեպքում թարմացնում է կեշը նոր ռեսուրսով:
// Սերվերից պատասխան գլխագրերի օրինակ:
// Cache-Control: public, max-age=3600
// Expires: Mon, 15 Aug 2022 12:00:00 GMT
// ETag: "abcdef123456"
// Last-Modified: Fri, 12 Aug 2022 10:00:00 GMT
// Հաճախորդից պայմանական հարցման օրինակ:
// GET /path/to/resource HTTP/1.1
// Host: example.com
// If-None-Match: "abcdef123456"
// If-Modified-Since: Fri, 12 Aug 2022 10:00:00 GMT
// Սերվերի պատասխան օրինակ՝ ETag/Last-Modified համընկնելու դեպքում:
// HTTP/1.1 304 Not Modified
// Date: Mon, 15 Aug 2022 11:00:00 GMT
// Cache-Control: public, max-age=3600
Հիմնական գլխագրերի աղյուսակը՝
| Գլխագիր | Ուղարկող | Օգտագործում | Օրինակ արժեքներ |
|---|---|---|---|
Cache-Control |
Սերվեր | Ընդհանուր կանոններ կեշավորման | max-age=3600, no-cache, public |
Expires |
Սերվեր | Ամսաթիվ՝ ռեսուրսի ժամկետի ավարտը | Mon, 15 Aug 2022 12:00:00 GMT |
ETag |
Սերվեր | Վերագրանցման տարբերակի նշան | "abcdef123456" |
Last-Modified |
Սերվեր | Վերջին փոփոխության ամսաթիվ | Fri, 12 Aug 2022 10:00:00 GMT |
If-None-Match |
Հաճախորդ | Պայմանական հարցում՝ օգտագործել կեշ, եթե ETag համընկնում է |
"abcdef123456" |
If-Modified-Since |
Հաճախորդ | Պայմանական հարցում՝ օգտագործել կեշ, եթե ռեսուրսը չի փոխվել այն ամսաթվից հետո | Fri, 12 Aug 2022 10:00:00 GMT |
Այս մեխանիզմները զգալիորեն նվազեցնում են սերվերների բեռը և արագացնում էջերի բեռնումը օգտատերերի համար, քանի որ բրաուզերները կարող են խուսափել լրիվ վերից բեռնումից։