2017-06-14 1 views
1

J'essaie de créer une requête get en utilisant Fetch. La demande ressemble à ceci:La création d'une requête get à l'aide des options fetch-only est envoyée

fetch('https://requestb.in/14ikb6j1', { 
    method: 'get', 
    headers: { 
    'Authorization': 'Token token=xxxxx' 
    }}); 

Si je fais cette demande à mon propre serveur, elle échoue à chaque fois sur la demande d'options. Je ne peux pas comprendre pourquoi.

Si je fais cette demande à requestbin, il y a d'abord une demande d'options. Cependant, après avoir reçu la réponse des options, la requête get réelle n'est jamais faite.

C'est ce que requestbin a reçu:

OPTIONS /14ikb6j1 

HEADERS 

Referer: http://localhost:9000/ 
Host: requestb.in 
Total-Route-Time: 0 
Via: 1.1 vegur 
Accept-Encoding: gzip 
Cf-Visitor: {"scheme":"https"} 
Cf-Ipcountry: NL 
Cf-Ray: 36edd35d1cad2b28-AMS 
Cf-Connecting-Ip: 37.153.231.90 
Connection: close 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Accept: */* 
Connect-Time: 1 
Access-Control-Request-Method: GET 
Content-Length: 0 
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 
X-Request-Id: 69b120c1-0f18-454b-a7fd-91f082252a06 
Access-Control-Request-Headers: authorization 
Origin: http://localhost:9000 

C'est ce que les journaux chrome:

chrome dev tools


La chose est étrange, je reçois un statut 200 - OK comme résultat. Cependant, la console enregistre encore ceci:

Fetch API cannot load https://requestb.in/14ikb6j1 . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:9000 ' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. :9000/#/branching:1 Uncaught (in promise) TypeError: Failed to fetch

Mais si je fais cette demande en utilisant Postman il ne fonctionne pas: postman request

GET /14ikb6j1 
HEADERS 

Cf-Ipcountry: NL 
Cf-Ray: 36eddb797ebf7223-AMS 
Authorization: Token token=xxxx 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Total-Route-Time: 0 
Via: 1.1 vegur 
Connection: close 
Cf-Connecting-Ip: 37.153.231.90 
Connect-Time: 0 
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 
Postman-Token: 57486701-6f9a-4aab-be1b-776f0d376920 
Accept: */* 
Host: requestb.in 
X-Request-Id: 73a7a35e-0d89-41fd-b760-2aa952349871 
Accept-Encoding: gzip 
Cf-Visitor: {"scheme":"https"} 
Cache-Control: no-cache 

Comment puis-je faire cette demande avec obtenir les en-têtes d'authentification travail?

+0

''Content-Type': 'application/json'' pour une requête GET. Est-ce correct? – Forivin

+0

@Forivin Désolé, vous avez raison. Mis à jour, la suppression de ces en-têtes de type de contenu ne change rien. – Randy

Répondre

2

Ceci est probablement un problème CORS. Le serveur auquel vous envoyez la demande n'autorise pas les demandes provenant d'un domaine différent. Vérifiez la console de votre navigateur et recherchez les erreurs. Vous pourriez trouver quelque chose comme ceci:

Fetch API cannot load https://requestb.in/14ikb6j1 . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' https://localhost:9000 ' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

+0

Mais pourquoi mon postman demande-t-il de travailler si le cors est désactivé? – Randy

+1

Parce que le facteur n'a pas de domaine. Il agit comme si un utilisateur normal ouvrait un site Web. En tant que facteur d'extension de navigateur obtient ce genre de privilèges, que les sites Web ne peuvent pas obtenir par eux-mêmes. C'est une fonction de sécurité simple intégrée aux navigateurs pour empêcher le site Web A de communiquer avec le site Web B, à moins que le site Web B ne le permette. – Forivin