Общий хостинг Запуск CORS с тем же доменом и портом - PullRequest
0 голосов
/ 27 апреля 2019

A боролись в течение последних нескольких дней с CORS, особенно с предварительными запросами при установке без CORS. Я отправляю запрос из приложения SPA через axios (domain.com:80) в API отдыха (domain.com:80/api) , и он классифицируется как запрос CORS. Локально, с той же настройкой, запросы в порядке, не вызывая предполетные .

В моем исследовании тот же запрос о происхождении должен иметь:

  • тот же домен
  • тот же поддомен
  • тот же порт
  • тот же протокол

Я думаю, что моя производственная среда проверяет все вышеперечисленное, но что-то говорит обратное.

Мое окружение размещено у поставщика общего хоста в следующем порядке:

SPA (Vue) - http: / domain: 80 / company-name /
API (Laravel) - http: / domain: 80 / company-name / api

Я уже пробовал:

  • Клонирование среды локально (Работает нормально - не отправляет предварительные запросы)
  • Включить / отключить Access-Control-Allow-Headers
  • Если честно, я даже не знаю, что попробовать дальше: |

Решение этой проблемы сделает мое приложение на 100% быстрее, поэтому для меня это очень важно. Но это просто не имеет смысла. Может быть, я упускаю что-то очевидное.

Возможно, это может быть связано с прокси, что делает мой провайдер общего хостинга. Но даже я бы не знал, как это проверить.

Пример запроса предварительной проверки (из вкладки «Сеть» в Dev Tools):

Общее
URL запроса: http: / domain / company-name / api / perfil / 3
Способ запроса: ВАРИАНТЫ
Код состояния: 200 ОК
Удаленный адрес: 185.200.153.100: 80
Политика реферера: no-referer-when-downgrade

Заголовки ответа
Контроль доступа-Разрешить-заголовки: АВТОРИЗАЦИЯ
Методы контроля доступа-разрешения: GET
Access-Control-Allow-Origin: http: / domain
Access-Control-Max-Age: 25200
Cache-Control: без кеша, приватный
Подключение: закрыть
Длина контента: 0
Content-Type: text / html; кодировка = UTF-8 * +1067 * Дата: сб, 27 апреля 2019 18:28:40 GMT
Сервер: Apache

Заголовки запроса
Примерные заголовки показаны
Access-Control-Request-Headers: авторизация
Метод запроса контроля доступа: GET
Происхождение: http: / domain
Реферер: http: / domain / company-name / perfis
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537,36 (KHTML, как Gecko) Chrome / 73.0.3683.103 Safari / 537.36

Пример запроса (сразу после ответа перед полетом):

Общее
URL запроса: http: / domain / company-name / api / perfil / 3
Способ запроса: GET
Код состояния: 200 OK
Удаленный адрес: 185.200.153.100: 80
Политика реферера: no-referer-when-downgrade

Заголовки ответа
Диапазон принятия: байты
Access-Control-Allow-Origin: http: / domain
Access-Control-Expose-Headers: *
Возраст: 0
Cache-Control: без кеша, приватный
Подключение: keep-alive
Тип контента: приложение / JSON
Дата: сб, 27 апреля 2019 18:28:41 GMT
Сервер: Apache
Передача-кодировка: чанки
Варьируется: Происхождение, Авторизация
Через: 1.1 лак-v4
X-RateLimit-Limit: 60
X-RateLimit-Осталось: 58
X-Varnish: 46418125

Заголовки запроса
Принять: приложение / JSON, текст / обычный, /
Авторизация: Носитель {токен}
Происхождение: http: / domain
Реферер: http: / domain / company-name / perfis
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36
(KHTML, как Gecko) Chrome / 73.0.3683.103 Safari / 537.36

домен / .htaccess

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteRule ^(api)($|/) - [L]
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css|woff2)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

домен / API / .htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Если вам нужны какие-либо другие данные, не стесняйтесь спрашивать.

1 Ответ

0 голосов
/ 29 апреля 2019

Может быть, я упускаю что-то очевидное.

Да.

В СПА я брал domain/api, когда действительно www.domain/api был правым.Приведение исходного URL-адреса к URL-адресу запроса, как объясняется @ sideshowbarker

Что касается проверки URL-адресов, то часть «домен» должна быть точно такой же.Так, например, «api.domain.com» и «www.domain.com» - это два разных источника.Заголовки, скопированные с вкладки «Сеть», содержат «Происхождение: http: / domain» и «http: / domain / company-name / api / perfil / 3».Итак, я хочу вам сказать, что происхождение любого реального URL-адреса «http: / domain / company-name / api / perfil / 3» не совсем совпадает с тем, что на самом деле представляет собой «Origin: http: / domain».Либо часть «домен» не совсем одинакова, либо они не оба «http» или оба «https», или вы указали какой-то номер порта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...