как пропустить Preflight Requset в vue с типом содержимого: application / json - PullRequest
0 голосов
/ 06 июля 2019

ошибка: «Метод 405 не разрешен» при вызове типа метода post в команде запроса vue

Мне нужна функция API вызова с типом содержимого: application / json и тип метода post с командой запроса в vue, ноБраузер добавляет запрос предварительной проверки с типом метода параметров, и это вызывает ошибку: «Метод 405 не разрешен»

   var options = {
    method: "POST",
    url: "http://api.sample.com/login",
    headers: {
      "Access-Control-Request-Method":"POST",
      "cache-control": "no-cache",
      "content-type": "application/json",
    },
    body: '{ Username: "demo", Password: "demo", Domain: "test" }'
  };

  request(options, function(error, response, body) {
    if (error) throw new Error(error);
    body.data;
    alert("ok");
  });

1 Ответ

0 голосов
/ 06 июля 2019

Вызов OPTIONS выполняется всякий раз, когда вы делаете запрос на отправку из разных стран. Это означает, что домен, на котором работает ваше приложение, отличается от домена, в котором находится API. Для этих запросов предварительный запрос является обязательным, поскольку браузер должен выяснить, разрешено ли вам выполнять эти запросы. Ошибка 405 означает, что сервер считает, что вам не разрешено делать этот запрос.

Чтобы решить эту проблему, вы можете переместить API в тот же домен, что и ваш веб-интерфейс. Обратите внимание, что он не может быть на поддомене.

Другой способ решения этой проблемы - отправка правильных заголовков. В вашем случае вы, по крайней мере, пропускаете заголовок ответа Access-Control-Allow-Methods. Обязательно отправьте этот заголовок и либо динамически выясните, какие методы разрешены, либо сделайте что-то вроде следующего. Это позволило бы работать наиболее распространенным методам.

Access-Control-Allow-Methods: GET, POST, PUT, DELETE

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


В комментариях вы сказали, что это работало нормально, когда вы делали то же самое в ASP.NET. ASP.NET - это язык на стороне сервера, что означает, что запросы в этом контексте не имеют понятия «перекрестного происхождения». Взаимное происхождение вступает в игру только в браузере, где приложение работает на реальном домене.

Предполагая, что вы можете настроить прокси-сервер в своем домене приложения, вы также можете создать прокси-сервер, который передает все запросы к API, с которым вы действительно хотите установить связь. Вы должны развернуть свой домен на https://example.com и выполнить свои запросы на https://example.com/api/endpoint. Ваш прокси-сервер будет прослушивать запросы, начинающиеся с https://example.com/api, и перенаправлять его на https://whatever.the.api.is/ с соответствующей конечной точкой и данными.

Пожалуйста, имейте в виду, что, хотя некоторые API-интерфейсы могут быть просто неправильно настроены, отсутствие заголовков ответов из разных источников может означать, что API-интерфейс не предназначен для использования через браузер. Частично это может быть связано с тем, что запрос содержит секрет, который не должен раскрываться пользователям, использующим ваше приложение, а должен находиться только на сервере. Использование в этом случае прокси-сервера настроило бы вас на атаку олицетворением, потому что вы могли бы раскрыть секрет вашего приложения, но победить перекрестные заголовки, заставив приложение показывать, что API находится в том же домене.

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