Apache-2.2
在 Apache 中對 HTTP OPTIONS 請求返回“200 OK”
我試圖在不接觸任何程式碼的情況下實現跨域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 腳本上正確設置標題。