Aujourd'hui, ĂȘtre en ligne est une condition courante pour de nombreuses personnes. Nous achetons, communiquons, lisons des articles, recherchons des informations sur divers sujets. Le rĂ©seau nous connecte au monde entier, mais surtout, il connecte les gens. J'utilise moi-mĂȘme Internet depuis 20 ans et ma relation avec lui a changĂ© il y a huit ans lorsque je suis devenu dĂ©veloppeur Web.
Les développeurs connectent les gens.
Les développeurs aident les gens.
Les développeurs donnent aux gens des opportunités.
Les dĂ©veloppeurs peuvent crĂ©er un rĂ©seau pour tout le monde, mais cette capacitĂ© doit ĂȘtre utilisĂ©e de maniĂšre responsable. En fin de compte, il est important de crĂ©er des choses qui aident les gens et les responsabilisent. Dans cet article, je veux parler de la façon dont les en-tĂȘtes HTTP peuvent vous aider Ă crĂ©er de meilleurs produits pour le meilleur travail de tous les utilisateurs sur Internet.
HTTP - Protocole de transfert hypertexte
Parlons d'abord de HTTP. HTTP est un protocole utilisé par les ordinateurs pour demander et envoyer des données sur Internet.
Lorsque le navigateur demande une ressource au serveur, il utilise HTTP. Cette demande comprend un ensemble de paires clĂ©-valeur contenant des informations telles que la version du navigateur ou les formats de fichier qu'elle comprend. Ces paires sont appelĂ©es en-tĂȘtes de demande.
Le serveur rĂ©pond avec la ressource demandĂ©e, mais envoie Ă©galement des en-tĂȘtes de rĂ©ponse contenant des informations sur la ressource ou le serveur lui-mĂȘme.
Request: GET https://the-responsible.dev/ Accept: text/html,application/xhtml+xml,application/xml Accept-Encoding: gzip, deflate, br Accept-Language: en-GB,en-US;q=0.9,en;q=0.8,de;q=0.7 ... Response: Connection: keep-alive Content-Type: text/html; charset=utf-8 Date: Mon, 11 Mar 2019 12:59:38 GMT ... Response Body
Aujourd'hui, HTTP est le fondement d'Internet et offre de nombreuses façons d'optimiser l'expĂ©rience utilisateur. Voyons comment utiliser les en-tĂȘtes HTTP pour crĂ©er un rĂ©seau sĂ©curisĂ© et accessible.
Le rĂ©seau doit ĂȘtre sĂ©curisĂ©
Je ne me sentais jamais en danger lorsque je cherchais quelque chose sur Internet. Mais plus j'en apprenais sur le World Wide Web, plus j'étais inquiet. Vous pouvez lire comment les
pirates modifient les bibliothĂšques CDN mondiales ,
des sites aléatoires exploitent des cryptomonnaies dans le navigateur de leurs visiteurs, ainsi que comment,
grùce à l'ingénierie sociale, les gens ont réguliÚrement accÚs à des projets open source réussis . Ce n'est pas bon. Mais pourquoi devriez-vous vous en soucier?
Si vous développez pour le Web aujourd'hui, n'écrivez pas seulement du code. Aujourd'hui, dans le développement web, beaucoup de gens travaillent sur un seul site. Vous pouvez également utiliser beaucoup d'open source. De plus, à des fins de marketing, vous pouvez inclure plusieurs scripts tiers. Des centaines de personnes fournissent du code exécuté sur votre site. Et les développeurs doivent travailler dans de telles réalités.
Peut-on faire confiance Ă toutes ces personnes et Ă tout le code source?
Je ne pense pas qu'il faille faire confiance à un code tiers. Heureusement, il existe des moyens de protéger votre site et de le rendre plus sécurisé. De plus, des outils tels que le
casque peuvent ĂȘtre utiles, par exemple, pour des applications express .
Si vous souhaitez analyser la quantité de code tiers exécuté sur votre site, vous pouvez regarder dans le panneau des développeurs ou essayer de demander le générateur de carte.HTTPS et HSTS - assurez-vous que votre connexion est sécurisée
Une connexion sécurisée est le fondement d'un Internet sécurisé. Sans demandes cryptées
passant par HTTPS , vous ne pouvez pas ĂȘtre sĂ»r qu'il n'y a personne d'autre entre votre site et les visiteurs. Une personne peut rapidement mettre en place un rĂ©seau Wi-Fi public et
lancer une attaque d'homme au milieu contre quiconque se
connecte à ce réseau . à quelle fréquence utilisez-vous le Wi-Fi public? De plus, à quelle fréquence vérifiez-vous si elle est fiable?
Heureusement, aujourd'hui,
les certificats TLS sont gratuits ; HTTPS est devenu la norme, et les navigateurs fournissent des fonctionnalitĂ©s avancĂ©es uniquement pour les connexions sĂ©curisĂ©es, et mĂȘme marquent les sites Web non HTTPS comme dangereux, ce qui facilite la mise en Ćuvre de ce protocole. Malheureusement, nous ne sommes pas toujours en sĂ©curitĂ© lorsque nous sommes sur Internet. Quand quelqu'un veut ouvrir un site, il n'entre pas le protocole dans la barre d'adresse (et pourquoi le devrait-il?). Il en rĂ©sulte une requĂȘte HTTP non chiffrĂ©e. Les sites en cours d'exĂ©cution redirigent l'utilisateur vers HTTPS. Mais que se passe-t-il si quelqu'un intercepte la premiĂšre demande non sĂ©curisĂ©e?
Vous pouvez utiliser les en-tĂȘtes de rĂ©ponse
HSTS (HTTP Strict Transport Security) pour indiquer aux navigateurs que votre site ne fonctionne que via HTTPS.
Strict-Transport-Security: max-age=1000; includeSubDomains; preload
Cet en-tĂȘte indique au navigateur que vous ne souhaitez pas utiliser les requĂȘtes HTTP, puis il appliquera automatiquement les mĂȘmes requĂȘtes Ă la mĂȘme source avec une connexion sĂ©curisĂ©e. Si vous essayez d'ouvrir la mĂȘme URL via HTTP, le navigateur utilisera Ă nouveau HTTPS et redirigera l'utilisateur.
Vous pouvez configurer la durée pendant laquelle cette option doit rester active (
max-age
en secondes) si vous souhaitez réutiliser HTTP plus tard. Si vous souhaitez activer les sous-domaines, vous pouvez le configurer à l'aide de
includeSubDomains
.
Si vous souhaitez faire tout votre possible pour que le navigateur ne demande jamais votre site via HTTP, vous pouvez également définir le pointeur de
preload
et
envoyer votre site Ă la liste globale. Si la configuration HSTS de votre site correspond Ă l'
max-age
minimum minimum d'un an et est active pour les sous-domaines, elle peut ĂȘtre incluse dans la liste de navigation interne pour les sites qui fonctionnent uniquement via HTTPS.
Vous ĂȘtes-vous dĂ©jĂ demandĂ© pourquoi vous ne pouvez plus utiliser de variables d'environnement locales telles que
my-site.dev
dans votre navigateur via HTTP? La raison en est précisément dans cette liste interne -
.dev
automatiquement inclus dans cette liste, car en février 2019, il est devenu un véritable domaine de premier niveau.
L'en-tĂȘte HSTS rend non seulement votre site un peu plus sĂ»r, mais accĂ©lĂšre Ă©galement son travail. Imaginez que quelqu'un accĂšde Ă une connexion mobile lente. Si la premiĂšre demande a Ă©tĂ© effectuĂ©e via HTTP uniquement pour recevoir une redirection, l'utilisateur ne peut rien voir Ă l'Ă©cran pendant plusieurs secondes. Et avec HSTS, vous pouvez enregistrer ces secondes, et le navigateur utilisera automatiquement HTTPS.
CSP - indiquez clairement ce qui est autorisé sur votre site
Maintenant que votre site fonctionne via une connexion sĂ©curisĂ©e, vous pouvez rencontrer un problĂšme lorsque les navigateurs commencent Ă bloquer les demandes qui atteignent une adresse non sĂ©curisĂ©e en raison de politiques de contenu mixtes. L'en-tĂȘte
CSP (Content Security Policy) offre un excellent moyen de gĂ©rer ces situations. Vous pouvez dĂ©finir votre ensemble de rĂšgles CSP Ă l'aide de mĂ©ta-Ă©lĂ©ments dans le code HTML fourni ou via les en-tĂȘtes HTTP.
Content-Security-Policy: upgrade-insecure-requests
Le pointeur de
upgrade-insecure-requests
oblige le navigateur Ă convertir comme par magie toutes les requĂȘtes HTTP en requĂȘtes HTTPS.
Cependant, CSP n'est pas limitĂ© au protocole utilisĂ©. Il offre des moyens dĂ©taillĂ©s de dĂ©terminer quelles ressources et activitĂ©s sont autorisĂ©es sur votre site. Vous pouvez, par exemple, spĂ©cifier les scripts Ă exĂ©cuter ou oĂč tĂ©lĂ©charger les images. Si quelque chose n'est pas autorisĂ©, le navigateur bloque cette action et empĂȘche les attaques potentielles sur votre site.

Au moment d'écrire ces lignes, il y avait 24 options de configuration différentes pour CSP. Ils vont des scripts aux feuilles de style en passant par les techniciens de maintenance.
Vous pouvez trouver la critique complÚte sur MDN.à l'aide de CSP, vous pouvez spécifier ce que votre site doit inclure et ce qui ne doit pas.
Content-Security-Policy: default-src 'self'; script-src 'self' just-comments.com www.google-analytics.com production-assets.codepen.io storage.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: images.contentful.com images.ctfassets.net www.gravatar.com www.google-analytics.com just-comments.com; font-src 'self' data:; connect-src 'self' cdn.contentful.com images.contentful.com videos.contentful.com images.ctfassets.net videos.ctfassets.net service.just-comments.com www.google-analytics.com; media-src 'self' videos.contentful.com videos.ctfassets.net; object-src 'self'; frame-src codepen.io; frame-ancestors 'self'; worker-src 'self'; block-all-mixed-content; manifest-src 'self' 'self'; disown-opener; prefetch-src 'self'
L'ensemble de rÚgles ci-dessus est pour mon site personnel, et si vous pensez que cet exemple de définition CSP est trÚs compliqué, alors vous avez absolument raison. J'ai implémenté ce kit lors de ma troisiÚme tentative, déployant et annulant à nouveau, car il a cassé le site plusieurs fois. Mais il y a une meilleure façon.
Pour éviter de pirater votre site, CSP propose également un mode de génération de rapports uniquement.
Content-Security-Policy-Report-Only: default-src 'self'; ... report-uri https://stefanjudis.report-uri.com/r/d/csp/reportOnly
En utilisant le mode
Content-Security-Policy-Report-Only
, les navigateurs enregistrent simplement les ressources qui seraient bloquées, au lieu de les bloquer. Ce mécanisme de rapport vous permet de vérifier et de configurer votre ensemble de rÚgles.
Les deux en-tĂȘtes,
Content-Security-Policy
et
Content-Security-Policy-Report-Only
, offrent également un moyen de déterminer le point de terminaison pour envoyer un
report-uri
violation et des informations de journalisation (
report-uri
). Vous pouvez configurer le serveur de journaux et utiliser les informations de journal envoyĂ©es pour configurer les rĂšgles CSP jusqu'Ă ce qu'il soit prĂȘt Ă ĂȘtre envoyĂ©.
Le processus recommandé est le suivant: exécutez d'abord CSP en mode rapport, analysez les violations entrantes avec du trafic réel, et uniquement lorsqu'aucune violation de vos ressources contrÎlées n'est détectée, activez-la.
Si vous cherchez un service qui pourrait vous aider à traiter avec ces magazines, je recommande l' URI de rapport , cela m'aide beaucoup.Implémentation générale du CSP
Aujourd'hui, les navigateurs prennent bien en charge le CSP, mais malheureusement, peu de sites l'utilisent. Pour voir combien de sites fournissent du contenu Ă l'aide de CSP, j'ai envoyĂ© une demande Ă
HTTParchive et constaté que seulement 6% des sites consultés utilisent cette politique. Je pense que nous pouvons rendre Internet plus sûr et protéger nos
utilisateurs contre l'
extraction involontaire de crypto-monnaies .

Le rĂ©seau doit ĂȘtre accessible.
Pendant que j'Ă©cris cet article, je suis assis devant le relativement nouveau MacBook en utilisant une connexion Wi-Fi domestique rapide. Les dĂ©veloppeurs oublient souvent que cette situation n'est pas standard pour la plupart de nos utilisateurs. Les personnes visitant nos sites utilisent de vieux tĂ©lĂ©phones et des connexions douteuses. Les sites lourds et encombrĂ©s avec des centaines de requĂȘtes leur laissent une mauvaise impression.
Et ce n'est pas seulement une question d'impression.
Les gens paient des montants diffĂ©rents pour le trafic en fonction de leur lieu de rĂ©sidence . Imaginez que vous crĂ©ez un site Web pour un hĂŽpital. Les informations Ă ce sujet peuvent ĂȘtre cruciales et sauver des vies. Si la page du site Web de l'hĂŽpital a une taille de 5 Mo, elle fonctionnera non seulement lentement, mais peut ĂȘtre trop chĂšre pour ceux qui en ont le plus besoin. Le prix de cinq mĂ©gaoctets de trafic en Europe ou aux Ătats-Unis est nĂ©gligeable par rapport au prix en Afrique. Les dĂ©veloppeurs sont responsables de rendre les pages Web accessibles Ă tous. Cette responsabilitĂ© consiste Ă fournir les bonnes ressources, Ă choisir les bons outils (avez-vous vraiment besoin d'un framework JS pour atterrir?) Et Ă Ă©viter les demandes.
Cache-Control - Ăvitez les demandes de ressources immuables
Aujourd'hui, un site peut contenir des centaines de ressources, du CSS aux scripts et aux images.
Cache-Control
, les dĂ©veloppeurs peuvent spĂ©cifier la durĂ©e pendant laquelle la ressource doit ĂȘtre considĂ©rĂ©e comme «fraĂźche» et peut ĂȘtre renvoyĂ©e depuis le cache du navigateur.
Cache-Control: max-age=30, public
Avec une configuration correcte de
Cache-Control
, le transfert de donnĂ©es est prĂ©servĂ© et les fichiers peuvent ĂȘtre utilisĂ©s Ă partir du cache du navigateur pendant un certain nombre de secondes (
max-age
). Les navigateurs doivent revérifier les ressources mises en cache aprÚs cette période.
Cependant, si les visiteurs actualisent la page, les
navigateurs la revĂ©rifieront quand mĂȘme, y compris les liens vers les ressources pour s'assurer que les donnĂ©es mises en cache sont toujours valides. Les serveurs rĂ©pondent avec un en-tĂȘte 304, signalant que les donnĂ©es mises en cache sont toujours valides, ou un en-tĂȘte 200 lors de la transmission de donnĂ©es mises Ă jour. Cela vous permet d'enregistrer les donnĂ©es transfĂ©rĂ©es, mais pas nĂ©cessairement les demandes faites.
C'est lĂ que la fonction
immutable
entre en jeu.
Immuable - ne demandez jamais une ressource deux fois
Dans les applications frontales modernes, les fichiers CSS et script ont généralement des noms uniques, par exemple
styles.123abc.css
. Le nom de ce fichier dépend du contenu. Et lorsque vous modifiez le contenu des fichiers, leurs noms changent également.
Ces fichiers uniques pourraient potentiellement ĂȘtre mis en cache pour toujours, y compris lorsqu'un utilisateur actualise une page.
immutable
peut empĂȘcher le navigateur de revĂ©rifier la ressource Ă un intervalle de temps spĂ©cifique. Ceci est trĂšs important pour les objets avec des sommes de contrĂŽle et permet d'Ă©viter les demandes de validation rĂ©pĂ©tĂ©es.
Cache-Control: max-age=31536000, public, immutable
L'implémentation d'une mise en cache optimale est trÚs difficile, et en particulier la mise en cache du navigateur n'est pas trÚs intuitive, car elle a différentes configurations. Je vous recommande de lire les documents suivants:
Accept-Encoding - compression maximale (au minimum)
Avec l'aide du
Cache control
du
Cache control
nous pouvons enregistrer les demandes et réduire la quantité de données transmises à plusieurs reprises sur le réseau. Nous pouvons non seulement enregistrer les demandes, mais également réduire ce qui est transmis.
Donnant des ressources, les développeurs doivent veiller à envoyer le moins de données possible. Pour les ressources de texte telles que HTML, CSS et JavaScript, la compression joue un rÎle important dans la sauvegarde des données transférées.
La méthode de compression la plus populaire aujourd'hui est GZIP. Les serveurs ont suffisamment de puissance pour compresser des fichiers texte à la volée et fournir des données compressées sur demande. Mais GZIP n'est plus la meilleure option.
Si vous examinez les demandes de fichiers texte gĂ©nĂ©rĂ©es par le navigateur, telles que HTML, CSS et JavaScript, et analysez les en-tĂȘtes, vous trouverez parmi eux un
accept-encoding
.
Accept-Encoding: gzip, deflate, br
Cet en-tĂȘte indique au serveur les algorithmes de compression qu'il comprend. Le paramĂštre
br
peu connu, signifie
compression Brotli et est utilisé sur les sites à fort trafic tels que Google et Facebook. Pour utiliser Brotli, votre site doit fonctionner via HTTPS.
Cet algorithme de compression a été créé en tenant compte de la petite taille du fichier. Si vous essayez de compresser le fichier manuellement sur votre appareil local, vous constaterez que Brotli se comprime vraiment mieux que GZIP.

Vous avez peut-ĂȘtre entendu que la compression Brotli est plus lente. La raison en est que Brotli a 11 modes de compression, et par dĂ©faut celui qui sĂ©lectionne les plus petits fichiers est obtenu, ce qui allonge la procĂ©dure. GZIP, d'autre part, dispose de 9 modes, et par dĂ©faut, un est sĂ©lectionnĂ© qui prend en compte Ă la fois la vitesse de compression et la taille du fichier. Par consĂ©quent, le mode Brotli n'est pas adaptĂ© Ă la compression Ă la volĂ©e par dĂ©faut, mais si vous changez le mode, vous pouvez compresser de petits fichiers Ă la mĂȘme vitesse que GZIP. Vous pouvez l'utiliser Ă la volĂ©e pour la compression et le considĂ©rer comme un remplacement potentiel de GZIP pour les navigateurs pris en charge.
De plus, si vous souhaitez enregistrer des fichiers autant que possible, vous pouvez oublier la compression dynamique et pré-générer des
fichiers GZIP optimisés en utilisant les fichiers zopfli et Brotli pour leur maintenance statique.
Si vous souhaitez en savoir plus sur la compression Brotli et sa comparaison avec GZIP, les employés d'Akamai ont effectué des recherches approfondies sur ce sujet .
Accepter et accepter-CH - Servir des ressources individuelles pour l'utilisateur
L'optimisation des ressources de texte est trÚs importante pour économiser des kilo-octets, mais qu'en est-il des ressources plus lourdes telles que les images pour enregistrer encore plus de données?
Accepter - maintenance des images au format correct
Les navigateurs nous montrent non seulement quels algorithmes de compression ils comprennent. Lorsque le navigateur demande une image, il fournit également des informations sur les formats de fichier qu'il comprend.
Accept: image/webp, image/apng, image/*,*/*;q=0.8
Pendant plusieurs années, une lutte a été menée autour d'un nouveau format d'image, mais a remporté le webp.
Webp est un format d'image inventé par Google , et la
prise en charge de ce format est désormais trÚs pertinente.
En utilisant cet en-tĂȘte de demande, les dĂ©veloppeurs peuvent envoyer une image
webp
mĂȘme si le navigateur a demandĂ©
image.jpg
, ce qui entraßne une taille de fichier plus petite. Dean Hume a écrit un
bon guide sur la façon de l'appliquer. TrÚs cool!

Accept-CH - Servir des images de la bonne taille
Vous pouvez également activer
les invites client pour les navigateurs prenant en charge cette fonctionnalitĂ©. Les conseils client sont un moyen de dire aux navigateurs d'envoyer des informations supplĂ©mentaires sur la largeur de la zone de visualisation, la largeur de l'image et mĂȘme les conditions du rĂ©seau, telles que RTT (heure de transmission et de confirmation) et le type de connexion, par exemple
2g
.
Vous pouvez activer les conseils en ajoutant un méta-élément:
<meta http-equiv="Accept-CH" content="Viewport-Width, Downlink"> <meta http-equiv="Accept-CH-Lifetime" content="86400">
Ou en dĂ©finissant des en-tĂȘtes dans la requĂȘte HTML d'origine:
Accept-CH: Width, Viewport-Width Accept-CH-Lifetime: 100
Dans les demandes suivantes, les navigateurs commenceront à envoyer des informations supplémentaires pendant un certain temps (
Accept-CH-Lifetime
en secondes), ce qui peut aider les développeurs à adapter les images aux conditions de l'utilisateur sans modifier le code HTML.
Par exemple, pour plus d'informations, telles que la largeur de l'image cÎté serveur, vous pouvez fournir à vos images l'attribut
sizes
pour donner au navigateur des informations supplémentaires sur l'apparence de ces images.
<!-- this images is laid over the full width | 100 viewport width --> <img class="w-100" src="/img/header.jpg" alt="" sizes="100vw">
Une fois l'en
Accept-CH
tĂȘte de rĂ©ponse
Accept-CH
reçu et les images avec l'attribut
sizes
, les navigateurs incluront les en
viewport-width
tĂȘtes
viewport-width
et
width
la
viewport-width
affichage dans les demandes d'image, vous indiquant l'image la mieux adaptée.

Ayant un format et une taille d'image pris en charge, vous pouvez envoyer des données adaptées sans avoir à enregistrer des éléments d'image non fiables et faire attention uniquement au format et à la taille du fichier, comme indiqué ci-dessous.
<pictur> <!-- serve WebP to Chrome, Edge, Firefox and Opera --> <source media="(min-width: 50em)" sizes="50vw" srcset="/image/thing-200.webp 200w, /image/thing-400.webp 400w, /image/thing-800.webp 800w, /image/thing-1200.webp 1200w, /image/thing-1600.webp 1600w, /image/thing-2000.webp 2000w" type="image/webp"> <source sizes="(min-width: 30em) 100vw" srcset="/image/thing-crop-200.webp 200w, /image/thing-crop-400.webp 400w, /image/thing-crop-800.webp 800w, /image/thing-crop-1200.webp 1200w, /image/thing-crop-1600.webp 1600w, /image/thing-crop-2000.webp 2000w" type="image/webp"> <!-- serve JPEG to others --> <surce media="(min-width: 50em)" sizes="50vw" srcset="/image/thing-200.jpg 200w, /image/thing-400.jpg 400w, /image/thing-800.jpg 800w, /image/thing-1200.jpg 1200w, /image/thing-1600.jpg 1600w, /image/thing-2000.jpg 2000w"> <surce sizes="(min-width: 30em) 100vw" srcset="/image/thing-crop-200.jpg 200w, /image/thing-crop-400.jpg 400w, /image/thing-crop-800.jpg 800w, /image/thing-crop-1200.jpg 1200w, /image/thing-crop-1600.jpg 1600w, /image/thing-crop-2000.jpg 2000w"> <!-- fallback for browsers that don't support picture --> <img src="/image/thing.jpg" width="50%"> </pictur>
Si vous avez accĂšs Ă la largeur de la fenĂȘtre d'affichage et Ă la taille de l'image, vous pouvez placer la logique de redimensionnement des ressources au premier plan sur vos serveurs.
Cependant, gardez à l'esprit que vous ne devez pas créer d'images pour une largeur quelconque simplement parce que vous avez la largeur exacte de l'image. L'envoi d'images pour une plage de taille spécifique (
image-200
,
image-300
,
...
) permet d'utiliser la mise en cache CDN et économise du temps de calcul.
De plus, avec les technologies modernes telles que les travailleurs de service, vous pouvez mĂȘme intercepter et modifier les demandes directement dans le client pour servir les meilleurs fichiers image. Les info-bulles client Ă©tant activĂ©es, les techniciens de maintenance ont accĂšs aux informations de mise en page et, en combinaison avec l'API d'image, telle que
Cloudinary, vous pouvez configurer l'URL de l'image directement dans le navigateur pour recevoir des images de la bonne taille.
Si vous recherchez des informations plus dĂ©taillĂ©es sur les conseils des clients, vous pouvez lire des articles de Jeremy Wagner ou Ilya Grigorik sur ce sujet.Le rĂ©seau doit ĂȘtre prudent
Puisque chacun de nous passe de nombreuses heures par jour sur le rĂ©seau, il y a le dernier aspect que je considĂšre trĂšs important - le rĂ©seau doit ĂȘtre prudent.
Précharge - réduire le temps d'attente
En tant que développeurs, nous apprécions le temps de nos utilisateurs. Personne ne veut perdre de temps. , . , , .
: , , . , HTML . , , . .
Rel=preload , .
HTML-:
<link rel="preload" href="/font.woff2" as="font" type="font/woff2" crossorigin="anonymous">
:
Link: </font.woff2>; rel=preload; as=font; no-push
, , , , . .
:
- , .
- preload , prefetch preconnect.
Feature-Policy â
, .
.
. , . . , , â .
, , ? , ?
Feature-Policy. , , , , .
Feature-Policy: vibrate 'none'; geolocation 'none'
. , , , .
<iframe allow="camera 'none'; microphone 'none'">
Feature-Policy
, , , . , . .
MDN., â push-. ,
Feature-Policy
push- , . ,
GitHub.feature policy ,
, , , .
, . ,
«HTTP- â » .
, â . , , , ⊠. , , , -, , - .