Не уверен, почему мой вызов FETCH JavaScript не удается, когда сервер возвращает HttpStatus 200 OK

1

У меня есть клиентское приложение 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;
}

Изображение 174551 Изображение 174551 Изображение 174551

Редактировать # 1:

  • Добавлен код handleErrors в соответствии с запросом.

Редактировать # 2:

  • Добавлена вкладка " Response " в инструментах Chrome dev
Теги:
fetch
fetch-api

1 ответ

0
Лучший ответ

Черт - ответ был CORS :: У меня не было установки CORS на моем веб-сервере.

Ключи:

  • Используя Postman для тестирования моей конечной точки, она работала на 100%
  • Комментарий @sideshowbarker, предлагающий мне задать вопрос CORS.

Быстрый поиск в Google привел меня к этому простому объяснению:

Защита браузера запрещает веб-странице делать запросы AJAX в другом домене. Это ограничение называется политикой одного и того же происхождения и не позволяет злоумышленнику считывать конфиденциальные данные с другого сайта. Однако иногда вы можете позволить другим сайтам называть ваш веб-API.

Совместное использование ресурсов (CORS) - это стандарт W3C, который позволяет серверу смягчать политику одного и того же происхождения. Используя CORS, сервер может явно разрешать некоторые запросы с кросс-началом, отвергая других.


Что такое "то же происхождение"?

Два URL имеют одинаковое происхождение, если у них одинаковые схемы, хосты и порты. (RFC 6454) Эти два URL имеют одинаковое происхождение:

Эти URL-адреса имеют различное происхождение, чем предыдущие два:

Поэтому в моем сценарии я:

Итак, что было diff?

  • Scheme: http vs https <- разные
  • Host: localhost vs localhost <- same/ok
  • Port: 3000 против 44387 <- другой

поэтому по крайней мере одна из этих трех частей была diff, поэтому мне нужно было включить CORS на моем бэкэнде.

Когда я это сделал, все работало нормально :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню