То, что я пытаюсь получить, это отправить пользовательский заголовок через запрос к API. У меня есть приложение реакции в качестве клиента и приложение express в качестве службы. В моем сервисе я устанавливаю следующее:
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept, Authorization, my-custom-header',
);
res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, PATCH');
next();
});
И в своем приложении реакции я использую топор ios, чтобы использовать сервис следующим образом:
const callEndpoint = (dataToPost) =>
axios.post(
{
`${my-url}/{my-endpoint}`,
{ dataToPost },
{ headers: { 'my-custom-header': 'anyStringValue' },
}
).then((res) => handleRes(res))
.catch((err) => handleErr(err));
Однако каждый когда я звоню callEndpoint(dataToPost)
Я получаю эту ошибку от CORS в предполетном полете:
Access to XMLHttpRequest at 'http://my-url/my-endpoint' from origin 'http://localhost:PORT' has been blocked by CORS policy: Request header field my-custom-header is not allowed by Access-Control-Allow-Headers in preflight response.
Я думал, что добавление my-custom-header
в конфигурации службы позволит мне продолжить, но это не так. Я также попытался установить 'Access-Control-Allow-Headers': '*'
, но не сработало.
Я также попытался использовать пакет cors
, например:
const corsOptions = function (req, callback) {
callback(null, { allowedHeaders: '*' })
}
app.use(cors(corsOptions));
Но при локальном тестировании я не получил Access-Control-Allow-Headers: *
в заголовках ответа. Итак, я даже не развернул этот кусок кода на сервере.
Что я должен сделать, чтобы мой настраиваемый заголовок проходил CORS при предварительном просмотре?
Заранее спасибо.