J'essaie d'envoyer des fichiers à mon serveur avec une demande de publication, mais lorsqu'il envoie, il provoque l'erreur:
Le champ d'en-tête de demande Content-Type n'est pas autorisé par Access-Control-Allow-Headers.
J'ai donc recherché l'erreur sur Google et ajouté les en-têtes:
$http.post($rootScope.URL, {params: arguments}, {headers: {
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}
Ensuite, je reçois l'erreur:
Le champ d'en-tête de demande Access-Control-Allow-Origin n'est pas autorisé par Access-Control-Allow-Headers
J'ai donc fait une recherche sur Google et la seule question similaire que j'ai pu trouver a été une demi-réponse, puis fermée comme hors sujet. Quels en-têtes dois-je ajouter / supprimer?
Réponses:
Le serveur (auquel la requête POST est envoyée) doit inclure l'en-
Access-Control-Allow-Headers
tête (etc.) dans sa réponse . Les mettre dans votre demande du client n'a aucun effet.En effet, il appartient au serveur de spécifier qu'il accepte les demandes d'origine croisée (et qu'il autorise l'en-
Content-Type
tête de demande, etc.) - le client ne peut pas décider par lui-même qu'un serveur donné doit autoriser CORS.la source
Content-Type
?J'ai eu le même problème. Dans la documentation jQuery, j'ai trouvé:
Donc, bien que le serveur autorise la demande d'origine croisée mais ne le permet pas
Access-Control-Allow-Headers
, il générera des erreurs. Par défaut, le type de contenu angulaire estapplication/json
, qui essaie d'envoyer une demande OPTION. Essayez d'écraser l'en-tête par défaut angulaire ou autorisezAccess-Control-Allow-Headers
à l'extrémité du serveur. Voici un échantillon angulaire:la source
or allow Access-Control-Allow-Headers in server end
Comment?header
pour définir l'en-tête de la réponseSi cela aide quelqu'un (même si c'est un peu pauvre car nous ne devons le permettre qu'à des fins de développement), voici une solution Java car j'ai rencontré le même problème. [Modifier] N'utilisez pas le caractère générique * car c'est une mauvaise solution, utilisez
localhost
si vous avez vraiment besoin que quelque chose fonctionne localement.la source
Le serveur (auquel la demande POST est envoyée) doit inclure l'en - tête Content-Type dans sa réponse.
Voici une liste d'en-têtes typiques à inclure, y compris un en-tête "X_ACCESS_TOKEN" personnalisé:
C'est ce que votre serveur http doit configurer pour le serveur Web auquel vous envoyez vos demandes.
Vous pouvez également demander à votre serveur de dévoiler l'en-tête "Content-Length".
Il reconnaîtra cela comme une demande CORS (Cross-Origin Resource Sharing) et devrait comprendre les implications de la configuration de ces serveurs.
Pour plus de détails, voir:
la source
Vous pouvez activer l'en-tête approprié en PHP avec ceci:
la source
Ce qui suit fonctionne pour moi avec nodejs:
la source
Les en-têtes que vous essayez de définir sont des en- têtes de réponse . Ils doivent être fournis, dans la réponse, par le serveur auquel vous faites la demande.
Ils n'ont pas leur place sur le client. Il serait inutile d'avoir un moyen d'accorder des autorisations si elles pouvaient être accordées par le site qui en demandait l' autorisation plutôt que par le site propriétaire des données.
la source
Si quelqu'un rencontre ce problème avec un serveur express, ajoutez le middleware suivant
la source
si vous testez des requêtes javascript pour ionic2 ou angularjs 2, dans votre chrome sur PC ou Mac, assurez-vous d'installer le plug-in CORS pour le navigateur Chrome pour autoriser l'origine croisée.
mayba get requests fonctionnera sans avoir besoin de cela, mais post and put et delete vous aurez besoin d'installer le plugin cors pour que les tests se passent sans problème, ce n'est certainement pas cool, mais je ne sais pas comment les gens le font sans plugin CORS.
et assurez-vous également que la réponse json ne retourne pas 400 par un certain statut json
la source
c'est un problème de backend. si vous utilisez l'api des voiles sur le backend, changez cors.js et ajoutez votre fichier ici
la source
Dans Asp Net Core , pour le faire fonctionner rapidement pour le développement; dans
Startup.cs
,Configure method
ajoutezla source
Dans mon cas, je reçois plusieurs paramètres en tant que @HeaderParam dans une méthode de service Web.
Ces paramètres DOIVENT être déclarés dans votre filtre CORS de cette façon:
la source
Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers
erreur signifie que leAccess-Control-Allow-Origin
champ de l'en-tête HTTP n'est pas géré ou autorisé par la réponse. Supprimer leAccess-Control-Allow-Origin
champ de l'en-tête de la demande.la source
Si vous utilisez
localhost
PHP et définissez-le pour résoudre le problème:De votre utilisation front-end:
et boum plus de problèmes
localhost
!la source