web-dev-qa-db-fra.com

Comment résoudre «le contrôle en amont n'est pas valide (redirection)» ou «la redirection n'est pas autorisée pour une demande de contrôle en amont»

J'ai suivi cette étape pour configurer mon serveur pour activer CORS. https://docs.Microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-Origin-requests-in-web-api

Mais maintenant, dans ma console de développement de navigateur, je vois ce message d'erreur:

XMLHttpRequest ne peut pas charger https: // serveraddress/abc . La réponse pour le contrôle en amont n'est pas valide (redirection)

Savez-vous que puis-je faire pour y remédier? Je fais une demande CORS en HTTPS. Je pense que cela provoque l'échec du "contrôle en amont non valide (redirection)". Mais je ne sais pas pourquoi ni ce qui redirige la demande OPTIONS.

Merci.

15
n179911

Votre code déclenche l'envoi de votre navigateur par CORS preflight OPTIONS request , et le serveur répond par un 3xx rediriger. Il doit répondre par un 2xx message de réussite à la place.

Vous pourrez peut-être ajuster votre code pour éviter de déclencher le navigateur pour envoyer la demande OPTIONS.

En ce qui concerne tout ce qui se passe dans ce cas, il est important de savoir que les navigateurs effectuent un contrôle en amont CORS si:

  • la méthode de demande est autre chose que GET, HEAD ou POST
  • vous avez défini des en-têtes de demande personnalisés autres que Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width ou Width
  • le Content-Type l'en-tête de demande a une valeur autre que application/x-www-form-urlencoded, multipart/form-data, ou text/plain

Si vous ne pouvez pas modifier votre code pour éviter aux navigateurs de faire un contrôle en amont, alors une autre option est:

  1. Examinez l'URL dans l'en-tête de réponse Location dans la réponse à la demande OPTIONS.
  2. Modifiez votre code pour faire la demande directement à cette autre URL.

La différence entre les URL peut être quelque chose d'aussi simple qu'une barre oblique de fin dans le chemin d'accès - par exemple, vous devrez peut-être modifier l'URL dans votre code en http://localhost/api/auth/login/ (remarquez la barre oblique) plutôt que http://localhost/api/auth/login (pas de barre oblique de fin).

Vous pouvez utiliser le volet Réseau dans les outils de développement du navigateur pour examiner la réponse à la demande OPTIONS et pour trouver l'URL de redirection dans la valeur de l'en-tête de réponse Location.

18
sideshowbarker