Sobes.tech
Senior

Ինչպե՞ս է տեղի ունենում ֆայլերի կեշավորումը պրոտոկոլի մակարդակում։

sobes.tech AI

Պատասխան AI-ից

HTTP պրոտոկոլի մակարդակով կեշավորումը կատարվում է գլխագրերի և մեթոդների միջոցով, որոնք թույլ են տալիս հաճախորդին և սերվերին որոշել, արդյոք անհրաժեշտ է վերից բեռնել ռեսուրսը կամ օգտագործել այն տեղական կեշից: հիմնական մեխանիզմներ՝

  1. Սերվերից կեշավորման գլխագրեր:

    • Cache-Control: որոշում է կեշավորման հրահանգները, օրինակ՝ առավելագույն կյանքի ժամկետը (max-age), թույլատրել կեշավորումը (public, private), արգելել կեշավորումը (no-cache, no-store), պահանջել վերանայել (must-revalidate):
    • Expires: հնացած գլխագիր, որը ցույց է տալիս ամսաթիվը և ժամանակը, երբ ռեսուրսը համարվում է հնացած: Կարող է վերագրանցվել Cache-Controlmax-age-ով:
    • ETag: Էնտիթի-տեգ (Entity Tag) - ռեսուրսի տարբերակի եզակի նշան, որը ստեղծում է սերվերը:
    • Last-Modified: ամսաթիվ և ժամանակ ռեսուրսի վերջին փոփոխության:
  2. Հաճախորդից պայմանական հարցումներ:

    • If-None-Match: հաճախորդը ուղարկում է մի քանի ETag-ներ, որոնք ունի կեշում: Եթե ոչ մեկը չի համընկնում սերվերի ընթացիկ ETag-ին, սերվերը ուղարկում է ամբողջ ռեսուրսը 200 OK կոդով: Եթե համընկնում է, սերվերը վերադարձնում է 304 Not Modified առանց մարմնի, և հաճախորդը օգտագործում է կեշում պահած տարբերակը:
    • If-Modified-Since: հաճախորդը ուղարկում է վերջին փոփոխության ամսաթիվը, որը ունի կեշում: Եթե ռեսուրսը սերվերում փոխվել է այդ ամսաթվից հետո, սերվերը ուղարկում է ամբողջ ռեսուրսը 200 OK կոդով: Եթե ոչ, վերադարձնում է 304 Not Modified:

Կեշավորման ալգորիթմը՝

  1. Հաճախորդը ուղարկում է ռեսուրսի հարցում:
  2. Սերվերը ուղարկում է ռեսուրսը, ավելացնելով Cache-Control, Expires, ETag, Last-Modified գլխագրերը:
  3. Հաճախորդը պահում է ռեսուրսը (պատասխանի մարմինը) այդ գլխագրերով տեղական կեշում:
  4. Երբ հաջորդ հարցում է նույն ռեսուրսի համար, հաճախորդը ստուգում է կեշում գտնվող գլխագրերը:
    • Եթե ռեսուրսը թարմ է Cache-Control (max-age) կամ Expires-ով, օգտագործում է կեշում պահած ռեսուրսը:
    • Եթե ոչ, ուղարկում է պայմանական հարցում՝ օգտագործելով If-None-Match և/կամ If-Modified-Since:
  5. Սերվերը ստանում է պայմանական հարցումը:
    • Եթե ռեսուրսը չի փոխվել, պատասխան է տալիս 304 Not Modified:
    • Եթե փոխվել է, պատասխան է տալիս 200 OK և նոր ռեսուրսով:
  6. Հաճախորդը ստանում է պատասխանն ու գործադրում ըստ դրա:
    • 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

Այս մեխանիզմները զգալիորեն նվազեցնում են սերվերների բեռը և արագացնում էջերի բեռնումը օգտատերերի համար, քանի որ բրաուզերները կարող են խուսափել լրիվ վերից բեռնումից։