【发布时间】:2020-01-06 18:01:17
【问题描述】:
我在 React Native 应用程序中遇到了一个非常奇怪的问题,其中带有 etag 的简单提取总是返回 200 而不是预期的 304:
const response = await fetch(url, {
method: 'GET',
headers: {
'If-None-Match': etag
},
});
其中etag 类似于"33a64df551425fcc55e4d42a148795d9f25f89d4"
当我直接通过 Postman/Insomnia 之类的方式提出此请求时,它正在工作,并且我得到了适当的 304 响应。
在 Reactotron 中检查应用程序,我可以看到网络请求标头似乎是正确的:
如果我将 JSON 请求复制为 cURL,我会得到以下信息:
curl -H "if-none-match:"33a64df551425fcc55e4d42a148795d9f25f89d4"" https://url/to/api
稍作修改以仅显示标题:
curl -sD - -o /dev/null -H "if-none-match:"33a64df551425fcc55e4d42a148795d9f25f89d4"" https://url/to/api
它也只返回一个200,但如果我像这样转义 etag 周围的引号,它可以工作:
curl -sD - -o /dev/null -H "if-none-match:\"33a64df551425fcc55e4d42a148795d9f25f89d4\"" https://url/to/api
我真的很困惑,因为我尝试了以下所有变体:
'If-None-Match': etag
'If-None-Match': `"${etag}"`
'If-None-Match': `\"${etag}\"`
'If-None-Match': '"' + etag + '"'
无济于事,我做错了什么?
将相同的 fetch 请求放入 html 文件并在浏览器中进行测试以达到预期的304 状态。
【问题讨论】:
标签: react-native fetch etag