我遇到一个问题,即
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
。
我花了一天的时间...我已经完成了后端,所以如果我将授权更改为X-Authorization,我将不得不在所有前端更改此设置,这是第三个...
事实证明存在一些问题,您唯一需要做的就是在 URI 末尾添加“/”,因此在这种情况下而不是 “等待获取(
${API_URL}/contact
,”它应该是
“等待获取(${API_URL}/contact/
,”