Ошибка 301 при запросе AJAX POST после включения ssl на сервере Apache - PullRequest
0 голосов
/ 15 октября 2018

Я создаю простой REST API на основе Laravel (он обслуживается через сервер Ubuntu на основе Apache), который используется веб-приложением Angular 6 через его модуль HttpClient.

Он работал правильно на моем локальном хосте, пока язагрузил его на хостинг Firebase (который включает https).Поэтому мне пришлось внедрить коммерческий SSL-сертификат на моем сервере, он прекрасно работал, обслуживая POST-запросы через POSTMAN или GET-запросы через Google Chrome, но когда я пытаюсь вызвать его из моего веб-приложения, он показывает эту ошибку:

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 ошибку выше

* Примечание: я также включил CORS на Laravel через библиотеку cors Барри, прямо в public /Файл index.php с использованием заголовков и конфигурации виртуального хоста с одинаковыми результатами.

1 Ответ

0 голосов
/ 15 октября 2018

Возможно, вам нужно явно разрешить метод 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>
...