Firefox CORS不适用于在javascript文件中发出的请求

Firefox CORS不适用于在javascript文件中发出的请求,firefox,cors,apache2.4,Firefox,Cors,Apache2.4,我已经为我的静态子域配置了CORS,我可以使用主域和子域中的静态文件 问题是,我在javascript文件中有一个get请求,firefox只对该请求进行了抱怨,即与我在html代码中发出的其余请求相比,对相同的静态子域进行了抱怨 我不记得以前有过这个问题,也许是CORS(firefox)中的一些更改使它不再工作了 脚本(从.js文件中): 这就是它的实际功能,一个jquery ajax请求方法: if ( oLanguage.sUrl !== "" ) { /* Get the lan

我已经为我的静态子域配置了CORS,我可以使用主域和子域中的静态文件

问题是,我在javascript文件中有一个get请求,firefox只对该请求进行了抱怨,即与我在html代码中发出的其余请求相比,对相同的静态子域进行了抱怨

我不记得以前有过这个问题,也许是CORS(firefox)中的一些更改使它不再工作了

脚本(从.js文件中):

这就是它的实际功能,一个jquery ajax请求方法:

if ( oLanguage.sUrl !== "" )
{
    /* Get the language definitions from a file - because this Ajax call makes the language
     * get async to the remainder of this function we use bInitHandedOff to indicate that
     * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
     */
    $.ajax( {
        dataType: 'json',
        url: oLanguage.sUrl,
        success: function ( json ) {
            _fnLanguageCompat( json );
            _fnCamelToHungarian( defaults.oLanguage, json );
            $.extend( true, oLanguage, json );
            _fnInitialise( oSettings );
        },
        error: function () {
            // Error occurred loading language file, continue on as best we can
            _fnInitialise( oSettings );
        }
    } );
    bInitHandedOff = true;
}
firefox控制台中的错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://static.mydomain.com/js/DataTables-Spanish.json. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
CORS配置(在vhost块内):

编辑:如果我在配置中使用通配符而不是正则表达式,它可以正常工作:

<IfModule mod_headers.c>
    #SetEnvIfNoCase Origin: "https?://(www\.)?(domain\.com|sub1\.domain\.com)(:\d+)?$" ACAO=$0
    #Header set Access-Control-Allow-Origin: "%{ACAO}e" env=ACAO
    Header set Access-Control-Allow-Origin: *
    Header set Access-Control-Allow-Methods: "GET"
</IfModule>

#SetEnvIfNoCase来源:“https?:/(www\)?(domain\.com | sub1\.domain\.com)(:\d+)$”ACAO=$0
#标头集访问控制允许来源:“%{ACAO}e”env=ACAO
标题集访问控制允许原点:*
标题集访问控制允许方法:“GET”
所以现在的问题是:为什么它不能与正则表达式一起工作

如果我将标题放在最后一行,它将与正则表达式一起工作:


SetEnvIf Origin“https://(www.domain.com | sub1.domain.com | auth.domain.com)$”ACAO=$0
标题集访问控制允许方法“GET”
标头始终附加访问控制允许源“%{ACAO}e”env=ACAO

问题是我从另一个问题中提取了代码,但没有注意到以下内容:

SetEnvIfNoCase
这与我想要的正好相反,即将regex中的域列入白名单:

SetEnvIf Origin "https://(www.domain.com|sub1.domain.com|auth.domain.com)$" ACAO=$0
Header always append Access-Control-Allow-Origin "%{ACAO}e" env=ACAO
Header set Access-Control-Allow-Methods "GET"

其他html请求不应该被cors阻止,这就是为什么。

如果您直接在浏览器中调用DataTables-Spanish.json文件,cors头是否存在?当我执行ctrl+F5时,是的。我在想,也许函数没有执行get方法?好的,现在再试一次你的代码…它现在可以工作了吗?也许你只是在缓存中有一些旧的头。不,它一直在抱怨,这真的很奇怪,因为我可以在它抱怨的页面中看到头(
access control allow methods:“GET”
)(适用于所有文件,而不仅仅是json)。
<IfModule mod_headers.c>
    #SetEnvIfNoCase Origin: "https?://(www\.)?(domain\.com|sub1\.domain\.com)(:\d+)?$" ACAO=$0
    #Header set Access-Control-Allow-Origin: "%{ACAO}e" env=ACAO
    Header set Access-Control-Allow-Origin: *
    Header set Access-Control-Allow-Methods: "GET"
</IfModule>
<IfModule mod_headers.c>
    SetEnvIf Origin "https://(www.domain.com|sub1.domain.com|auth.domain.com)$" ACAO=$0
    Header set Access-Control-Allow-Methods "GET"
    Header always append Access-Control-Allow-Origin "%{ACAO}e" env=ACAO
</IfModule>
SetEnvIfNoCase
SetEnvIf Origin "https://(www.domain.com|sub1.domain.com|auth.domain.com)$" ACAO=$0
Header always append Access-Control-Allow-Origin "%{ACAO}e" env=ACAO
Header set Access-Control-Allow-Methods "GET"