Какво е 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, стойностите се закръглят