Архив на категория: Web Development

HTTP Client Hints API

Какво е Client Hints API?

Client Hints (CH) API е набор от HTTP хедъри за проактивна комуникация и трансфер на ресурси и съдържание (content-negotiation).
Към момента на писане на статията статуса на предложението е „Experimental„.
Ето и какво ще разгледаме днес:

Как функционира?

Client Hints API функционира на application ниво, и по-конкретно като extension на самият HTTP протокол, но само, когато е наличен TLS. Представлява размяна хедъри към заявките, които дават различни параметри (ресурси, информация за използваната мрежа, скорост и др.) за клиента свързващ се към сървъра като за целта сървъра инициира комуникацията, че иска тези данни. Ако погледнем следния пример – при заявка за даден ресурс на сървъра:

Сървърът връща този ресурс, добавяйки следният Accept-CH хедър:

Accept-CH = <sh-list>

И по-конкретно:

Accept-CH: Sec-CH-Example, Sec-SH-Example-2

Когато клиентът (обикновено вашият браузър) получи този хедър, това индикира, че източника (сървъра) поддържа Client Hints.

Пример за комуникация

По-цялостен и реалистичен пример за комуникация, би изглеждал така.
Client:

GET https://example.com/

Server:

Accept-CH: viewport-width, dpr, device-memory, rtt, downlink, ect
Accept-CH-Lifetime: 30

Client:

Viewport-Width: 1920
DPR: 1
Device-Memory: 8
RTT: 50
Downlink: 10
ECT: 4g

Кои са хедърите в спецификацията?

Accept-CH – Списък с необходимите хедъри от сървъра (origin)
Accept-CH-Lifetime
Viewport-Width – Ширината на дисплея в пиксели
DPR – Device Pixel Ration, индикира съотношението на физическите пиксели на дисплея към логическите в CSS (aka CSS pixel ratio)
Device-Memory* – Приблизителното стойност на оперативна памет на клиента. Примерни стойности: 0.25, 0.5, 1, 4, 8 т.н.
RTT* – Round Trip Time в милисекунди. Тъй като говорим в контекста на протокол от application layer-а, а не стандартния TTL в transport layer-а, стойностите са закръглени до 25-тата милисекунда.
Downlink* – Индикира скоростта на клиента в Mbps (megabits per second), отново закръглена.
ECT* – Effective Connection Time. Валидни стойности: 4g, 3g, 2g и slow-2g.
Save-Data – Специфичен хедър за Android у-ва, които сървъра не може да „изисква“ в първоначалния списък на Accept-CH. Активира Data Saver мерките за минимизиране на трафика. Валидна стойност: On.
Sec-CH-UA – Името на браузъра и major версията му. Примерна стойност: „Google Chrome“; v=“83″.
Sec-CH-UA-Platform – Индикира име на ОС и версията ѝ.
Sec-CH-UA-Arch – Информация за архитектурата на клиента.
Sec-CH-UA-Model – Определя модела на използваното устройство.
Sec-CH-UA-Mobile – Индикира дали response-а (като UX) трябва да е конкретно за мобилни устройства.

Допълнителна информация

Can I Use – Client Hints (DPR, Width, Viewport-Width)
Chrome Platform Status – Client Hints
Mozilla Developer Network – Client Hints
HTTP Client Hints Proposal

* С оглед превенция на fingerprinting, стойностите се закръглят