Apache-2.2

在 Apache 中對 HTTP OPTIONS 請求返回“200 OK”

  • April 21, 2014

我試圖在不接觸任何程式碼的情況下實現跨域HTTP 訪問控制。

我的 Apache(2) 伺服器使用此塊返回正確的訪問控制標頭:

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

我現在需要阻止 Apache 在瀏覽器發送HTTP OPTIONS請求(它儲存在REQUEST_METHOD環境變數中)時執行我的程式碼,返回200 OK.

當請求方法為 OPTIONS 時,如何配置 Apache 以響應“200 OK”?

我試過這個mod_rewrite塊,但訪問控制標頭失去了。

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

您正在向非成功(非 2xx)響應(例如重定向)添加標頭,在這種情況下,最終響應中僅使用始終對應的表。

正確的“標題集”:

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

如果您為經過身份驗證的訪問設置目錄,Chrome 和 Safari 等瀏覽器(可能還有其他瀏覽器)總是在 XmlHttpRequest 呼叫之前發送一個未經驗證的 OPTIONS 請求,如果我們不設置 .htaccess 文件/apache 配置,該請求總是得到 401 並且失敗允許 OPTIONS 方法而不需要身份驗證。這讓我發瘋了 2 天,這就是網站管理員保守秘密的那種“深奧”資訊,我猜!無論如何,我像這樣配置了我的 .htaccess,現在它可以工作了:

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

然後你必須在 PHP 腳本上正確設置標題。

引用自:https://serverfault.com/questions/231766