在Apache服务器上启用SSL之后,AJAX POST请求上出现错误301

时间:2018-10-15 19:15:27

标签: ajax laravel ssl cors

我正在构建一个简单的基于Laravel的REST API(通过基于Apache的Ubuntu服务器提供),Angular 6 Web应用程序通过其HttpClient模块使用它。

它在我的本地主机上正常运行,直到将其上传到Firebase托管(启用https)。因此,我必须在服务器上实施商业SSL证书,在通过POSTMAN通过POSTMAN进行请求或通过Google Chrome进行GET请求时,它都可以正常工作,但是当我尝试从网络应用程序调用它时,会显示此错误:

enter image description here

我的客户代码非常简单:

generateReport(data) {
    const headers = new HttpHeaders({"Content-Type":"application/json"});
    return this.httpClient.post(this.env.apiURL+'excel/show/',
      data,
      {headers:headers});
  }

这是我的虚拟主机配置:

<VirtualHost *:443>
        ServerName eduardoibarra.com
        ServerAlias www.eduardoibarra.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine  on
        SSLCertificateFile /root/www_eduardoibarra_com.crt
        SSLCertificateKeyFile /root/server.key
        SSLCertificateChainFile /root/COMODORSADomainValidationSecureServerCA.crt
        <Directory /var/www/html>
                Order Allow,Deny
                Options FollowSymLinks
                Allow from all
                AllowOverride All
                RewriteEngine On
        </Directory>
</VirtualHost>

总结一下,

  

Http服务器+本地主机客户端环境= 工作正常

     

Https服务器+ POSTMAN或Chrome = 工作正常

     

Https服务器+ https客户端环境= 给出了301错误以上

*注意:我还通过Barry的cors库在Laravel上启用了CORS,使用标头直接在public / index.php文件上以及在具有相同结果的virtualhost配置上启用了CORS。

1 个答案:

答案 0 :(得分:1)

也许您需要在OPTIONS中明确允许Access-Allow-Control-Methods方法。同样在apache中,您应该捕获OPTIONS并返回http状态200,因为OPTIONS返回301重定向。

尝试以下类似的Apache设置:

<Location /laravel/public>
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

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