Fetch - запрос к другому сайту
Может вопрос аналогичен и есть уже другие, но я немного не разобрался. Как я слышал — fetch не может делать запросы на другие сайты или на порт. Вроде как надо указать какие-то заголовки специальные. Это так? Или если не так, то как сделать запрос к другому сайту?
var api = fetch("http://example.com:4540");
Есть собственный сайт, где нужно сделать запрос по порту.
Ответы (1 шт):
есди кратко, то:
fetch без проблем делает запрос на другие домены, так же, как и на свои родные.
только для кросс-доменных запросов есть дополнительная процедура, а именно:
- перед запросов (допустим,
POST), браузер делает предзапрос (preflight) на сервер в виде запроса с методомOPTIONS - в каждом запросе браузер автоматически вставляет в запрос заголовок
Access-Control-Allow-Origin, в который записывает Вам домен, например:Access-Control-Allow-Origin: https://lolo.com. сервер же, в свою очередь, смотрит на этот заголовок и решает, обрабатывать ли Ваш запрос, или нет. - если он согласен, то отправляет ответ со статусом 200, браузер его принимает и только после этого он оправляет Вас главный запрос, который Вы указали в Вашем
fetch. - если же сервер несогласен принимать Ваши запросы, то он отвергнет Ваш запрос и Вы получите ошибку в консоли.
собственно, более красиво и подробно здесь
UPDATE по вопросу в комментарии
если хотите указать Вашему Express серверу, чтобы он принимал любые кросс-доменные запросы, то вот одно из решений:
// это всё код middleware
app.use((req, res, next) => {
res.append('Access-Control-Allow-Origin', '*'); // разрешает принимать запросы со всех доменов
res.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); // какие методы в запросах разрешается принимать
next();
});