Renvoyer «200 OK» dans Apache sur les requêtes HTTP OPTIONS


12

J'essaie d'implémenter un contrôle d'accès HTTP interdomaine sans toucher à aucun code.

J'ai mon serveur Apache (2) renvoyant les en-têtes de contrôle d'accès corrects avec ce bloc:

Header set Access-Control-Allow-Origin "*"                   
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" 

Je dois maintenant empêcher Apache d'exécuter mon code lorsque le navigateur envoie une HTTP OPTIONSdemande (il est stocké dans la REQUEST_METHODvariable d'environnement), en retournant 200 OK.

Comment puis-je configurer Apache pour répondre "200 OK" lorsque la méthode de demande est OPTIONS?

J'ai essayé ce mod_rewritebloc, mais les en-têtes de contrôle d'accès sont perdus.

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]       

Réponses:


12

Vous ajoutez un en-tête à une réponse non réussie (non 2xx), telle qu'une redirection, auquel cas seule la table correspondant à toujours est utilisée dans la réponse finale.

"Jeu d'en-têtes" correct:

Header always set Access-Control-Allow-Origin "*"                   
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"

7

Si vous définissez un répertoire pour un accès authentifié, les navigateurs tels que Chrome et Safari (peut-être d'autres aussi) envoient toujours une demande OPTIONS sans accréditation avant l'appel XmlHttpRequest, qui obtient toujours 401 et échoue si nous ne définissons pas la configuration du fichier .htaccess / apache pour autoriser la méthode OPTIONS sans exiger d'authentification. Cela m'a rendu fou pendant 2 jours et c'est le genre d'informations "ésotériques" que les webmasters gardent secrètes, je suppose! Quoi qu'il en soit, j'ai configuré mon .htaccess comme ceci et maintenant cela fonctionne:

AuthUserFile <path to password file>
AuthName "Thou shalt not pass!"
AuthType Basic
Options -Indexes
<LimitExcept OPTIONS>
  Require valid-user
</LimitExcept>

Ensuite, vous devez définir correctement les en-têtes sur les scripts PHP.


1
Cette dernière ligne est importante. Si le service Web sous-jacent ne peut pas gérer la OPTIONSdemande, vous recevrez une erreur 404.
— user2297366

7

Parfois, cette approbation peut aider:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ blank.html [QSA,L]

C'est utile quand vous avez un serveur de type apache


il a déverrouillé des demandes pour moi. étonnamment. sur apache 2.4 Avec cette règle sur blank.html qui n'existe pas!
— Nadir
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.