php – NGINX’Access-Control-Allow-Origin’标头包含多个值

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – NGINX’Access-Control-Allow-Origin’标头包含多个值脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个PHPNginx服务器(我们假设主机名为 http://myserver.com).我有一个PHP脚本,我通过Xhr从我的localhost上的网页访问.我将它用作类似于freegeoip.net的GeoIP服务器.

我正在尝试将XHR锁定到特定域.

这是我的配置设置:

location ~ \.PHP${
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.PHP;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_SCRIPT_NAME;
    include fastcgi_params;

    fastcgi_param GEOIP_COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param GEOIP_COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param GEOIP_COUNTRY_GEONAME_ID $geoip2_data_country_geoname_id;
    fastcgi_param GEOIP_CITY_NAME $geoip2_data_city_name;
    fastcgi_param GEOIP_CITY_GEONAME_ID $geoip2_data_city_geoname_id;
    fastcgi_param GEOIP_CONTINENT_CODE $geoip2_data_city_continent_code;
    fastcgi_param GEOIP_CONTINENT_GEONAME_ID $geoip2_data_city_continent_geoname_id;
    fastcgi_param GEOIP_LATITUDE $geoip2_data_city_location_latitude;
    fastcgi_param GEOIP_LONGITUDE $geoip2_data_city_location_longitude;
    fastcgi_param GEOIP_TIME_ZONE $geoip2_data_city_location_timezone;
    fastcgi_param GEOIP_ISP $geoip2_data_city_traits_isp;
    fastcgi_param GEOIP_IP_ADDRESS $geoip2_data_city_traits_ip_address;

    set $cors "";

    if ($http_origin ~* 'https?://(www\.domain1\.COM|www\.domain2\.com)')
    {
        set $cors "true";
    }

    if ($cors = 'true')
    {
        add_header 'Access-Control-Allow-Origin' "$http_origin";
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-tyPE,PRagma,DNT,If-Modified-since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With';
    }

    if ($request_method = 'OPTIONS')
    {
        return 204;
    }
}

我遇到的问题是,当我执行XHR请求时,我收到以下错误

XMLHttpRequest无法加载http://myserver.com/. ‘Access-Control-Allow-Origin’标头包含多个值’*,http:// localhost’,但只允许一个.因此不允许Origin’http:// localhost’访问.

我只有一次调用add_header’Access-Control-Allow-Origin’“$http_origin”;在配置文件中,为什么我有多个值?有没有办法可以禁用第一个话,即*?

1.)让应用程序动态批准并添加响应头.
$Allowed_domains = ['http://allowed.com','http://another_allowed.com'];

function add_cors_header() {
    if (in_array($_SERVER['http_origin'],$allowed_domains)) {
        header('Access-Control-Allow-Origin',$_SERVER['http_origin']);
    }
}

2.)或者在启用Lua的情况下安装OpenResty版本的Nginx并执行相同操作,但在Nginx conf文件中使用Lua.

脚本宝典总结

以上是脚本宝典为你收集整理的php – NGINX’Access-Control-Allow-Origin’标头包含多个值全部内容,希望文章能够帮你解决php – NGINX’Access-Control-Allow-Origin’标头包含多个值所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。