web-dev-qa-db-fra.com

Pourquoi chercher retourne une réponse avec status = 0?

Je veux utiliser l'API d'extraction pour obtenir un document HMTL complet à partir d'une URL.

let config = {
method: 'GET',
headers: {
    'Content-Type': 'application/json',
    'Accept': 'text/html',
    'Accept-Language': 'zh-CN',
    'Cache-Control': 'no-cache'
},
mode: 'no-cors'};

fetch('http://www.baidu.com', config).then((res)=> {
console.log(res);}).then((text)=> {});

exécuter le code en chrome, il déclenche une demande et renvoie html en réseau chrome. mais chercher le retour retour:

 enter image description here

Pourquoi le statut est-il et comment puis-je obtenir la résolution correcte comme dans le newwork chrome?

11
pingfengafei

Sur le no-cors partie de config.mode:

no-cors - Empêche la méthode d'être autre chose que HEAD, GET ou POST. Si un serviceWorker intercepte ces demandes, il ne peut ajouter ou remplacer aucun en-tête, à l'exception de ceux-ci. En outre, JavaScript ne peut accéder aux propriétés de la réponse résultante. Cela garantit que ServiceWorkers n'affecte pas la sémantique du Web et évite les problèmes de sécurité et de confidentialité résultant de la fuite de données sur plusieurs domaines.

En effet, la réponse que vous obtenez en faisant une telle demande (avec no-cors spécifié en tant que mode) ne contiendra aucune information indiquant si la demande a réussi ou non, ce qui donne le code d'état 0. Supprimer mode de votre appel fetch montrera que le CORS avait fait a échoué.

Pour savoir ce que 0 signifie dans votre cas particulier, consultez d’autres réponses SO.

9
Brian

Je ne sais pas comment faire cela dans un environnement de navigateur, mais je sais qu'il est disponible pour fetch quelque chose d'un site d'origine multiple dans le noeud.

require('es6-promise').polyfill();
require('isomorphic-fetch');
fetch('https://www.baidu.com', {
  mode: 'no-cors'
})
  .then((res) => {
    console.log(res.status); //=> 200
  });

Ainsi, vous pouvez utiliser un serveur de nœud pour fetch ce que vous voulez, puis respond pour votre client.

Je souhaite aussi fetch quelque chose de certains sites dans un navigateur, ce qui semble impossible. C'est peut-être vraiment impossible de le faire, car Internet doit protéger les sites Web sur lesquels nous souhaitons obtenir des ressources.

0
enzeberg