CORS с ПОСТМАНОМ
Этот вопрос задавался пару раз, но я до сих пор чего-то не понимаю:
Когда я читаю ответы о
Нет заголовка "Access-Control-Allow-Origin"
проблема говорит о том, что на запрошенном сервере должна быть установлена настройка, чтобы разрешить кросс-домен: add_header 'Access-Control-Allow-Origin' '*';
,
Но, пожалуйста, скажите мне, почему, когда спрашиваете у почтальона (который является клиентом), это работает как чудо, и у меня есть ответ от запрошенного сервера?
Спасибо
7 ответов
Поскольку @Musa комментирует это, кажется, что причина в том, что:
Почтальон не заботится о СОП, это инструмент разработки, а не браузер
Кстати, вот расширение chrome, чтобы оно работало в вашем браузере (это для chrome, но вы можете найти его либо для FF, либо для Safari).
Отметьте здесь, если вы хотите узнать больше о Cross-Origin и почему он работает для расширений.
SOP - это конфигурация на стороне сервера, которую клиенты принимают или не применяют. Большинство браузеров применяют его для предотвращения проблем, связанных с CSRF. Большинство инструментов разработчика не заботятся об этом.
Если вы пользуетесь веб-сайтом и заполняете форму для отправки информации (например, своего номера социального страхования), вы хотите быть уверены, что информация отправляется на сайт, на который, по вашему мнению, она отправляется. Таким образом, браузеры были построены так, чтобы по умолчанию сказать: "Не отправляйте информацию в домен, отличный от посещаемого домена).
В конце концов это стало слишком ограниченным, но идея по умолчанию все еще остается в браузерах. Не позволяйте веб-странице отправлять информацию в другой домен. Но это все проверка браузера. Chrome, Firefox и т. Д. Имеют встроенный код, который говорит: "Перед отправкой этого запроса мы собираемся проверить, соответствует ли пункт назначения посещаемой странице".
Почтальон (или CURL в строке cmd) не имеет встроенных проверок. Вы вручную взаимодействуете с сайтом, поэтому у вас есть полный контроль над тем, что вы отправляете.
Хотя все ответы здесь действительно хорошо объясняют, что такое cors, прямой ответ на ваш вопрос будет из-за следующих различий почтальона и браузера.
Браузер: отправляет OPTIONS
вызов для проверки типа сервера и получения заголовков перед отправкой любого нового запроса в конечную точку API. Где он проверяетAccess-Control-Allow-Origin
. Принимая это во вниманиеAccess-Control-Allow-Origin
заголовок просто указывает, какие все ПЕРЕКРЕСТНЫЕ ИСТОЧНИКИ разрешены, хотя по умолчанию браузер разрешает только одно и то же происхождение.
Почтальон: отправляет напрямую GET
, POST
, PUT
, DELETE
запрос без проверки типа сервера и получения заголовка Access-Control-Allow-Origin
используя OPTIONS
звонок на сервер.
Обычно Postman используется для отладки и используется на этапе разработки. Но если вы хотите заблокировать его даже от почтальона, попробуйте это.
const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
//check for the referrer domain
app.all('/*', function(req, res, next) {
if(req.headers.referer.indexOf(referrer_domain) == -1){
res.send('Invalid Request')
}
next();
});
На практике, если кто-то использует POSTMAN для тестирования реализации API, использующей CORS, он захочет понять, что ДЕЛАТЬ для тестирования различных сценариев.
Объяснений много, а практических ответов нет.
Ответ: Просто создайте атрибут заголовка под названием «Origin» и установите значение для любого URL-домена, который вы хотите.
Используйте плагин для браузера / Chrome postman, чтобы проверить CORS/SOP как на веб-сайте. Вместо этого используйте настольное приложение, чтобы избежать этих элементов управления.