web-dev-qa-db-fra.com

les demandes d'origine croisées sont bloquées dans Tomcat 8 avec le code d'état HTTP 403

cela peut sembler un problème connu et de nombreuses questions se posent sur le sujet, mais ma situation est très étrange. J'ai une application Web simple déployée sur Tomcat 8.0.36. J'ai correctement configuré le CORS:

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.Apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Les requêtes croisées sont bloquées par le navigateur:

Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin ' https://www.mytestpage.com ' n'est donc pas autorisé à accéder. La réponse avait le code d'état HTTP 403.

Dans le fichier journal Tomcat, je vois également le code de réponse de 403. Ce qui est intéressant, c'est que le code de mon application n'est jamais exécuté en cas de requêtes croisées. Les demandes sont bloquées avant d’atteindre mon application et 403 est envoyé immédiatement. Je n'ai pas d'Apache devant Tomcat, c'est tout simplement Tomcat. J'ai essayé beaucoup de choses, y compris la liste blanche des origines et la spécification des en-têtes autorisés - rien n'y fait. J'ai également essayé de définir l'en-tête par programme jusqu'à ce que je découvre que le code en cas de demande d'origine croisée n'est jamais exécuté.

UPD: le point de terminaison accepte les demandes POST. Ces demandes POST sont envoyées sous forme de requêtes XmlHttpRequests à partir de l'extrait de code JS. 

Des idées ce que cela peut être?

p.s je peux faire avec succès les mêmes demandes d'origine.

7
bekon

J'ai trouvé quel était le problème - je devais définir l'en-tête Content-Type dans la demande, sinon la demande serait bloquée. - Filtre Tomcat CORS

2
bekon

Vous devez en fait définir à la fois Access-Control-Allow-Origin et Access-Control-Allow-Methods. Voici un exemple:

Access-Control-Allow-Origin: http://www.myhost.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE

De plus, vous devez accepter la méthode "OPTIONS" qui renvoie les deux lignes d’entête Access-Control-Allow-*. Certains navigateurs peuvent émettre ce type de demande avant votre demande réelle (demande "PUT", par exemple) pour obtenir les informations d'accès du service.

1
Boris Brodski