Ошибка CORS с использованием localhost, но не с использованием домена - PullRequest
0 голосов
/ 31 декабря 2018

Я занимаюсь разработкой веб-приложения реагирования, которое связывается с бэкэндом DRF через axios.При локальном развитии я обрабатывал CORS, устанавливая django-cors-headers и добавляя localhost: 3000 в CORS_ORIGIN_WHITELIST (3000 - порт по умолчанию для реагирования с create-реагировать-app):

CORS_ORIGIN_WHITELIST = (
    'localhost:3000',
)

Это работало нормальнопока я не развернулся на удаленном сервере, когда я внезапно начал снова видеть ошибки CORS:

Access to XMLHttpRequest at 'http://localhost:8000/api/path/' from 
origin 'http://example.com:3000' has been blocked by CORS policy...

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

Это имелоя был в тупике несколько часов, пока одно разочарование не заставило меня изменить запрос на реакцию с

axios.post(localhost:8000/api/path/, {                                          
    key1: val1,                                      
    key2: val2,                                          
    ...                                        
})
.then(response => {
    doSomeStuff(response);
});

на

axios.post(example.com:8000/api/path/, {                                          
    key1: val1,                                      
    key2: val2,                                          
    ...                                        
})
.then(response => {
    doSomeStuff(response);
});

и белый список с

CORS_ORIGIN_WHITELIST = (
    'localhost:3000',
)

на

CORS_ORIGIN_WHITELIST = (
    'example.com:3000',
)

В этот момент ошибки CORS прекратились.

Мой вопрос: почему это произошло?Насколько я понимаю, localhost и example.com были двумя именами одного и того же сервера, но любая другая комбинация белого списка localhost / example.com и запроса localhost / example.com приводит к ошибке.В чем разница с точки зрения CORS?

1 Ответ

0 голосов
/ 31 декабря 2018

localhost и example.com являются , а не двумя именами для одного и того же сервера.localhost разрешается в 127.0.0.1, локальный адрес, т. Е. Сервер находится внутри вашего компьютера.example.com разрешается на удаленный сервер.

CORS-разрешающий localhost разрешает запросы от localhost.CORS-разрешение example.com разрешает запросы от example.com.Это не ошибка.

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