Nginx ignore ses add_header si réponse n'est pas 200

Le problème exposé dans ce sujet a été résolu.

Bonjour

J’ai besoin d’une petite aide SVP.

Quand je fait une req Ajax, si mon statut code de la réponse est bien 200 : quand je regardes Response Headers (via mon inspecteur Chrome), j’ai bien mes headers Access-Control.

Mais le problème c’est que quand je fait une req Ajax, si mon statut code de la réponse est 422 (ou 400) : quand je regardes Response Headers (via mon inspecteur Chrome), mes headers Access-Control sont absent. Pourquoi ?

Ceci m’est problématique surtout si je veux que me servir de mon Web App PHP en tant qu’API. Je travail avec Laravel, mais ce problème n’est pas dur à Laravel mais bien à Nginx (je viens de tester le même comportement avec un site web PHP que j’ai fais sans FrameWork).

Voici un exemple de Vhost que j’utilise :

server {
    listen 80;

    server_name www.domain-test.local;

    root /path-sur-mon-pc/public/;
    index index.php index.html index.htm;

    #### CORS
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, OPTIONS, DELETE';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Headers' '*';

    #### Locations
    # On interdit les dotfiles
    location ~ /\. {
        deny all;
    }

    # Lorsque l'on arrive sur le site
    location / {
        # Ré-écriture d'URL (pour architecture MVC)
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Une idée SVP ?

Il me semble qu’avec Nginx que ce soit normal, car les headers sont utiles que pour les codes de réponse, qui sont égaux à 200, 201, 204, 206, 301, 302, 303, 304, ou 307.

Mais pour ne pas avoir des problèmes de cors, j’ai besoin de ces headers même quand je retourne des erreurs 422.

Merci d’avance.

+0 -0

En regardant rapidement, je pense qu’il faut ajouter un always dans les directives add_header. Sinon, elle ne seront prises en compte qu’en cas de succès, c’est bien le comportement que tu observes actuellement.

If the always parameter is specified (1.7.5), the header field will be added regardless of the response code.

https://nginx.org/en/docs/http/ngx_http_headers_module.html

Ça donnerait donc :

    #### CORS
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, OPTIONS, DELETE' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Headers' '*' always;

Normalement, tu n’en as pas besoin. Tant que OPTION a les bon headers, ça devrait le faire.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte