У меня есть клиентское приложение SPA, которое выполняет вызов REST на мой локальный веб-сервер. Я использую javascript для вызова и использую fetch()
для этого.
Мой ответ - HttpStatus 200 (я могу выполнить мой код веб-сервера и подтвердить это с помощью инструментов Chrome dev, посмотрев на запрос/ответы XHR).
Я выполняю HTTP POST (на мой веб-сервер). Ответ - это Http 200 OK (а не 201).
Прежде чем кто-нибудь начнет корректировать меня на POST, возвращая 200 → это конечная точка LOGIN/AUTHENTICATION, следовательно, 200, а не 201.
Итак - есть ли способ, которым я могу понять, почему выборка делает это?
Обновление: поэтому, когда я использую Chrome, в ответе говорится: Failed to load response data
. НО! если я делаю то же POST, используя (программу) Postman, тогда я получаю тело ответа...
здесь мой код..
export function authenticateUser(idToken) {
var formData = new FormData();
formData.append('idToken', idToken);
fetch('https://localhost:44387/authentication',
{
method: 'POST',
body: formData
})
.then(handleErrors)
.then(response => console.log("ok"))
.catch(error => console.log(error));
}
export function handleErrors(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response;
}
handleErrors
в соответствии с запросом.Response
" в инструментах Chrome dev Черт - ответ был CORS
:: У меня не было установки CORS
на моем веб-сервере.
Ключи:
Postman
для тестирования моей конечной точки, она работала на 100%CORS
.Быстрый поиск в Google привел меня к этому простому объяснению:
Защита браузера запрещает веб-странице делать запросы AJAX в другом домене. Это ограничение называется политикой одного и того же происхождения и не позволяет злоумышленнику считывать конфиденциальные данные с другого сайта. Однако иногда вы можете позволить другим сайтам называть ваш веб-API.
Совместное использование ресурсов (CORS) - это стандарт W3C, который позволяет серверу смягчать политику одного и того же происхождения. Используя CORS, сервер может явно разрешать некоторые запросы с кросс-началом, отвергая других.
Что такое "то же происхождение"?
Два URL имеют одинаковое происхождение, если у них одинаковые схемы, хосты и порты. (RFC 6454) Эти два URL имеют одинаковое происхождение:
Эти URL-адреса имеют различное происхождение, чем предыдущие два:
- http://example.net - Разный домен
- http://example.com:9000/foo.html - Разный порт
- https://example.com/foo.html - Разная схема
- http://www.example.com/foo.html - Разный субдомен
Поэтому в моем сценарии я:
Итак, что было diff?
Scheme
: http
vs https
<- разныеHost
: localhost
vs localhost
<- same/okPort
: 3000
против 44387
<- другой поэтому по крайней мере одна из этих трех частей была diff, поэтому мне нужно было включить CORS
на моем бэкэнде.
Когда я это сделал, все работало нормально :)