У меня проблема, из-за которой заголовок Authorization
не добавляется в запрос на iOS, он работает на Android.
Сначала я подумал, что это axios
, http-клиент, но потом я переключился на простое использование fetch
, чтобы попробовать, все равно не работает.
На экране есть обработчик для отправки сообщения:
const handleSendPress = async () => {
await postContact(textInput);
}
И функция запроса:
export const postContact = async (message: string) => {
// await axiosInstance.post(`${API_URL}/contact`, {
// message,
// });
await fetch(`${API_URL}/contact`, {
method: 'POST',
body: JSON.stringify({
message,
}),
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: 'Bearer [JWT TOKEN]',
},
});
};
где я закомментировал axios
и жестко закодировал заголовок Authorization
.
Это работает на Android, но не работает на iOS, где сервер жалуется на отсутствие заголовка Authorization
в запросе.
Я не понимаю, есть идеи?
Оказывается, в iOS есть несколько зарезервированных HTTP-заголовков, и Authorization
— один из них, https://developer.apple.com/documentation/foundation/nsurlrequest.
Если вы установите значение для одного из этих зарезервированных заголовков, система может проигнорировать установленное вами значение, перезаписать его собственным значением или просто не отправить его.
Ключевое слово там быть может, поэтому обычно оно терпит неудачу, но в некоторых случаях проходит.
Вероятно, есть какой-то способ настроить это, но в итоге я просто изменил заголовок, который использую, на X-Authorization
.