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