【问题标题】:Enable CORS in httpd.conf在 httpd.conf 中启用 CORS
【发布时间】:2019-01-01 13:19:52
【问题描述】:

我正在开发一个网络应用程序,它使REST 调用其域之外的另一个网络应用程序。

但每当它尝试进行 REST 调用时,我都会在 chrome 中遇到 CORS 问题。

错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

我知道这个问题已经被问过很多次了,我已经尝试了很多建议,但没有一个对我有用。

我使用httpd 作为网络服务器。

下面是我系统的httpd.conf。 我在<Directory> 中添加了Header set Access-Control-Allow-Origin "*",正如here 所建议的那样。

请提出建议。

谢谢

httpd.conf

ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
    AllowOverride none
  Header set Access-Control-Allow-Origin "*"
    Require all granted
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<Files ".ht*">
    Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf

ProxyRequests Off
ProxyPreserveHost On
<VirtualHost *:80>
  ProxyPass / http://localhost:9000/        # My local sonarqube URL
  ProxyPassReverse / http://myhost.com
  ErrorLog logs/sonar/error.log
  CustomLog logs/sonar/access.log common
</VirtualHost>

【问题讨论】:

    标签: javascript html apache cors httpd.conf


    【解决方案1】:

    在基于 Debian 的发行版中。启用 mod_headers 运行

    a2enmod headers
    sudo service apache2 reload
    

    在 CentOS 和其他基于 RedHat 的发行版中

    编辑 apache 读取的配置文件,如 httpd.conf 并添加

    LoadModule headers_module modules/mod_headers.so
    

    然后用sudo service httpd restart重新加载apache

    在 httpd.conf 或 apache 读取的某些文件(如 apache2.conf)中,文件 *.conf 位于 sites-available/ 或 sites-enabled/ 等文件夹中

    Header set Access-Control-Allow-Origin: *
    

    * 或您想要的一个或多个域

    请记住,这必须放在接收 请求,而不是发送请求的服务器,并且限制是 由浏览器而不是服务器制作,请参见: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

    还有另一种方法不是编辑一些 .conf 文件,它在文档根级别创建一个名为 .htaccess 的文件,内部为:Header set Access-Control-Allow-Origin *

    【讨论】:

    • 我看不到 Apache 已安装。我只能看到httpd。此外,要启动服务器,我使用service httpd start。在我的机器上也找不到 a2enmod。在这种情况下,最好的选择是什么。我应该安装 a2enmod,还是有其他选择?
    • @reiley 这取决于操作系统,但它是相同的 apache2 和 httpd。关于 a2enmod 它也取决于操作系统阅读此nitstorm.github.io/blog/enabling-disabling-modules-sites-apache 我认为您应该在 httpd.conf 中添加 LoadModule headers_module modules/mod_headers.so
    • @reiley 我建议您首先尝试使用 .htaccess 文件,因为默认情况下通常可以使用 headers 模块
    • 在 httpd.conf 中我们在哪里添加以下行:LoadModule headers_module modules/mod_headers.so
    【解决方案2】:

    要启用 CORS,可以使用以下标头指令:

    Header set Access-Control-Allow-Origin "*"

    【讨论】:

      【解决方案3】:

      根据我的经验,如果 API 有任何问题,通常会返回此错误。

      您应该尝试在没有网络安全的情况下在 Chrome 中测试您的网络应用程序,看看问题是否真的是 CORS 问题。请参阅here 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2010-12-09
        • 2017-01-23
        • 2020-02-18
        • 2013-06-12
        • 2013-01-06
        • 2020-02-18
        • 2015-06-15
        • 2015-01-09
        相关资源
        最近更新 更多