Name Modified Size
LICENSE.md4 years ago1.08 KB
README.md4 years ago3.15 KB
create.htaccess4 years ago130
create.js4 years ago184
create.php4 years ago103
demo4 years ago50.75 KB

HTTP Client Hints

The Client Hints (CH) header communicates device capabilities to the server, allowing the server to return the best possible experience back to the device.

This project aims to polyfill CH to the best abilities of the device and server.

HTTP Client Hints Draft

How it works:

One line of JavaScript can make a variety of hints available to the server. For instance, if the following script is included at the top of the document, all future requests (even those made from that same document) can leverage these hints. The draft calls for 3 hints; device pixel ratio, device width, and device height.

document.cookie = 'CH=dh=' + screen.height +
    ',dpr=' + (window.devicePixelRatio || 1) +
    ',dw=' + screen.width +
    ';expires=' + new Date(+new Date+31536000000).toGMTString() +

Since these 3 CH are unlikely to change in a given session, the above snippet could be wrapped in a server-side conditional to load just once.

<?php if (!isset($_SERVER['HTTP_CH'])) : ?>
    <script>document.cookie = ...</script>
<?php endIf; ?>

The native implementation of CH works by sending hints through a request header, which the server could cache. This polyfill emulates the projected end-result — a server with a cache of hints.

What is included:


An Apache configuration snippet for converting a CH cookie into a server environment variable.


A JavaScript snippet for creating a CH cookie.


A PHP snippet for conditionally creating a CH cookie when the server environment variable is not yet found.

What the future holds:

An issue on GitHub suggests including more dynamic data in CH, such as device orientation, viewport size, and zoom level as well.

Admittedly, these values change frequently and are difficult to cache, whereas the currently drafted hints are unlikely to change in the life of the device.

Since CH adoption is in its early stages, Ilya Grigorik, author of the HTTP Client Hints Draft, argues that the CH header must be kept as small and as static as possible to prove its viability.

Native implementation status:

All of these contributions to CH are dedicated to the public domain with no copyright.