waf*_*ffl 5 etag fetch react-native
我在 react native 应用程序中遇到一个非常奇怪的问题,其中使用 etag 进行简单的 fetch 总是返回 a200而不是预期的304:
const response = await fetch(url, {
method: 'GET',
headers: {
'If-None-Match': etag
},
});
Run Code Online (Sandbox Code Playgroud)
哪里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
这也只返回 a 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 + '"'
Run Code Online (Sandbox Code Playgroud)
无济于事,我做错了什么?
将相同的 fetch 请求放入一个 html 文件并在浏览器中进行测试以达到预期的304状态。
我在 React Native 应用程序上使用 Axios 时遇到了同样的问题。我还尝试了相反的“If-Match”并得到了 200,所以就好像标题根本不存在一样。
const query = {
method: 'GET',
url: `someurl`,
headers: {
Authorization: `Bearer ${token}`,
'If-Match': etag,
},
};
let response = await axios(query);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |