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.