如何在Apache中为HTTP基本身份验证响应设置访问控制允许源文件头?

如何在Apache中为HTTP基本身份验证响应设置访问控制允许源文件头?,apache,webserver,apache-config,basic-authentication,Apache,Webserver,Apache Config,Basic Authentication,我想使用XHR登录到使用HTTP基本身份验证的站点。下面的文章就是这样做的 http = new XMLHttpRequest(); http.open("get", "http://...", false, username, password); http.send(""); 问题是,在不同于身份验证所在域的域中,这不起作用。解决方案非常简单:将Access Control Allow Origin标头设置为*。因此,我将Apache配置更改为: <Location />

我想使用XHR登录到使用HTTP基本身份验证的站点。下面的文章就是这样做的

http = new XMLHttpRequest();
http.open("get", "http://...", false, username, password);
http.send("");
问题是,在不同于身份验证所在域的域中,这不起作用。解决方案非常简单:将Access Control Allow Origin标头设置为*。因此,我将Apache配置更改为:

<Location />
    Header set Access-Control-Allow-Origin "*"

    AuthType Basic
    AuthName "trac"
    AuthUserFile /home/admin/development/pass.htpasswd
    Require valid-user
</Location>
这些响应没有访问控制允许源标题。这似乎很奇怪

当我对内部页面使用相同的页眉指令时,页眉被设置

为什么没有设置标题? 如何在Apache中为HTTP基本身份验证响应设置访问控制允许源文件头?

答案是:

Header always set Access-Control-Allow-Origin "*"
而不是

Header set Access-Control-Allow-Origin "*"
原因在于:

Header[condition]set | append | merge | add | unset | echo | edit Header[value][replacement][early | env=[!]变量]

optional condition参数确定此指令将针对哪个内部响应表标题进行操作。服务器的其他组件可能已将其响应头存储在对应于onsuccess的表或对应于always的表中“始终”在此上下文中指的是您添加的标题是否会在成功和不成功的响应期间发送,但如果您的操作是现有标题的功能,则必须继续阅读,以了解进一步的复杂性

在与下面列出的情况类似的情况下,onsuccess的默认值可能需要更改为always。还请注意,在某些情况下,使用这两种条件重复此指令是有意义的,因为相对于现有标头,始终不是onsuccess的超集:

  • 您正在向非成功(非2xx)响应(如重定向)添加标题,在这种情况下,最终响应中仅使用与“始终”对应的表。
  • 您正在修改或删除由CGI脚本生成的头,在这种情况下,CGI脚本位于与“始终”对应的表中,而不在默认表中
  • 您正在修改或删除由服务器的某个部分生成的标头,但在默认的onsuccess条件下找不到该标头

在您的情况下,您发送的是401响应,而不是经典的200响应,并且如果您不使用
总是
关键字,则标题仅设置为200响应。

我知道,回答晚了,但这可能会有帮助。
Header set Access-Control-Allow-Origin "*"