在HTTP OPTIONS请求中在Apache上返回“200 OK”

我试图实现跨域HTTP访问控制,而不触及任何代码。

我有我的Apache(2)服务器返回正确的访问控制标题与此块:

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

当浏览器发送一个HTTP OPTIONS请求(它存储在REQUEST_METHOD环境variables中)时,我现在需要阻止Apache执行我的代码,返回200 OK

当请求方法是OPTIONS时,如何configurationApache来响应“200 OK”?

我已经试过这个mod_rewrite块,但访问控制标头丢失。

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

您正在向非成功(非2xx)响应(例如redirect)添加标头,在这种情况下,只有与始终对应的表才能用于最终响应。

正确的“标题集”:

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

如果你设置了一个用于authentication访问的目录,Chrome浏览器和Safari浏览器(也可能是其他浏览器)总是在XmlHttpRequest调用之前发送一个未经确认的OPTIONS请求,总是得到401,如果我们没有设置.htaccess文件/ apacheconfiguration允许OPTIONS方法而不要求authentication。 这让我疯狂了2天,这是网站pipe理员保守秘密的那种“深奥的”信息,我想! 无论如何,我configuration我的.htaccess这样,现在它的工作原理:

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

然后,你必须在PHP脚本上正确设置标题。

有时这个approuch可以帮助:

 <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] 

当你有类似Apache的服务器时,它是有用的