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.