112 votes

Quelles restrictions s'appliquent à l'opaque réponses?

Opaque réponses sont définies dans le cadre de l' Extraction de l'API, et de représenter le résultat d'une demande faite à une distance de l'origine lors de la SCRO n'est pas activé.

La pratique, les limitations et les "pièges" existent autour de la façon dont opaque réponses peuvent être utilisés, à la fois à partir de JavaScript et que les ressources sur une page?

163voto

Jeff Posnick Points 6850

L'accès à l'Opaque Réponses " en-Têtes / du Corps

Le plus simple limitation autour opaque réponses, c'est que vous ne pouvez pas obtenir des informations à partir de la plupart des propriétés de l' Response classe, à l'instar headers, ou appeler les différentes méthodes qui composent l' Body interface, json() ou text(). Ceci est en accord avec la "boîte noire" de la nature d'une matière opaque réponse.

L'utilisation d'Opaque Réponses que les Ressources sur une Page

Opaque réponses peut être utilisé comme une ressource sur une page web chaque fois que le navigateur permet à un non-SCRO cross-origin resource être utilisé. Voici un sous-ensemble d'éléments pour lesquels la non-SCRO croix-de l'origine des ressources, et à cet effet opaque réponses sont valables, adapté du Mozilla Developer Network documentation:

  • <script>
  • <link rel="stylesheet">
  • <img>, <video>, et <audio>
  • <object> et <embed>
  • <iframe>

Un notable de cas d'utilisation pour lesquels opaque réponses ne sont pas valable, c'est pour des ressources de police.

En général, afin de déterminer si vous pouvez utiliser une opaque réponse comme un type particulier de ressource sur une page, vérifier les spécifications. Par exemple, la spécification HTML explique que la non-SCRO croix-origine (c'est à dire opaque) les réponses peuvent être utilisés pour l' <script> éléments, bien qu'avec certaines restrictions pour empêcher la fuite des informations d'erreur.

Opaque Réponses et le Cache de Stockage de l'API

Un "piège" que développeur peut-être à l'opacité des réponses consiste à utiliser avec le Cache de Stockage de l'API. Deux pièces de l'arrière-plan des informations pertinentes:

  • L' status de la propriété d'une matière opaque réponse est toujours la valeur 0, indépendamment du fait que la demande initiale a réussi ou échoué.
  • Le Cache de Stockage de l'API add()/addAll() méthodes permettra à la fois de refuser si les réponses résultant de l'une des demandes ont un code d'état qui n'est pas dans le 2XX gamme.

À partir de ces deux points, il en résulte que, si la demande effectuée dans le cadre de l' add()/addAll() résultats des appels dans une opaque réponse, il ne pourra pas être ajouté à la cache.

Vous pouvez contourner ce problème en effectuer explicitement un fetch() et puis l'appel de l' put() méthode avec l'opacité de la réponse. En procédant ainsi, vous êtes effectivement opter pour le risque que la réponse que vous êtes de la mise en cache peut-être une erreur renvoyée par le serveur.

const request = new Request('https://third-party-no-cors.com/', {mode: 'no-cors'});
// Assume `cache` is an open instance of the Cache class.
fetch(request).then(response => cache.put(request, response));

Opaque Réponses et le navigateur.API de stockage

Afin d'éviter les fuites d'informations inter-domaine, il est important de rembourrage ajoutée à la taille d'une matière opaque de réponse utilisée pour le calcul du quota de stockage des limites (c'est à dire si un QuotaExceeded exception est levée) et rapporté par l' navigator.storage API.

Les détails de ce remplissage varient d'un navigateur à l'autre, mais pour Google Chrome, cela signifie que le minimum de la taille que toute seule en cache opaque réponse contribue à l'utilisation du stockage est d'environ 7 méga-octets. Vous devez garder cela à l'esprit lors de la détermination de la façon dont de nombreux opaque réponses que vous souhaitez cache, car vous pourriez facilement dépassé le quota de stockage de limites beaucoup plus tôt que vous auriez normalement s'attendre sur la base de la taille de l'opacité des ressources.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X