J'envoie une requête POST à un serveur auquel je suis propriétaire et auquel j'ai accès.La requête POST avec contrôle en amont contient l'origine autorisée mais les erreurs d'origine ne sont pas autorisées
Cela déclenche une demande de contrôle en amont CORS avec la méthode OPTIONS et renvoie les en-têtes de réponse suivants:
HTTP/1.1 200
Allow: HEAD,POST,GET,OPTIONS
Last-modified: Mon, 26 Jun 2017 13:57:08 BST
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET
Access-Control-Allow-Headers: origin, content-type, accept, authorization
Access-Control-Expose-Headers: Set-Cookie
Content-Type: application/vnd.sun.wadl+xml
Content-Length: 1126
La requête POST rapports ultérieurs puis
Fetch API cannot load http://localhost:8080/api/reservation. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 500. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
en utilisant javascript fetch
.
Comme indiqué ci-dessus, un POST à mon point de terminaison /reservation
entraîne une telle erreur. Cependant, les requêtes POST vers d'autres points de terminaison sur mon serveur sont réussies et n'obtiennent aucun rapport indiquant que l'origine n'est pas autorisée. Les deux exécutent le même code fetch
; émettre OPTIONS contrôle en amont, puis POST.
var RestRequest = {
post: function(endpoint, payload, callback, secondCallback) {
fetch('http://localhost:8080/api' + endpoint, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
method: 'post',
credentials: 'include',
body: payload
})
.then(function (response) {
return response.json()
})
.then(function (result) {
callback(result)
if (secondCallback != null) {
secondCallback()
}
})
}
};
Pourquoi mon navigateur que l'origine plaint faisant la demande ne peut avoir accès lorsqu'un prévol CORS clairement autorisé à accéder à cette origine spécifique?
La modification des filtres de réponse CORS de mon serveur pour permettre toutes les origines entraîne le même message d'erreur. Faire les mêmes demandes à partir du plugin Postman réussit.
Le code d'état 200 provenait de la requête OPTIONS de contrôle en amont CORS. – Shiri
Droit désolé je n'ai pas remarqué, mais le problème est toujours le même. S'il y a une erreur 500 sur votre serveur, les en-têtes ne seront pas envoyés. Donc, le problème que vous avez n'est pas avec CORS, mais un autre bug sur votre serveur. –
Il n'y a pas de bug sur le serveur car l'utilisation de Postman pour émettre exactement la même requête réussit. Il semble que cela puisse être un problème avec l'API 'fetch' de javascript car l'utilisation de' unirest' pour gérer les requêtes REST réussit également. Le code 500 semble provenir d'une requête POST incomplète, provoquant le serveur à lancer un 500 après le fait car il attend un corps dans la requête POST et n'en a pas reçu un car le navigateur a coupé la procédure quand il a réalisé que l'origine n'était pas t autorisé. Dans ce cas, je ne suis pas sûr de savoir pourquoi un type de requête POST l'a fait au serveur si ce n'était pas autorisé. – Shiri