在一个react本地应用程序中,我遇到了一个非常奇怪的问题,在这个应用程序中,使用etag进行简单的提取总是返回200而不是预期的304
const response = await fetch(url, {
method: 'GET',
headers: {
'If-None-Match': etag
},
});其中etag类似于"33a64df551425fcc55e4d42a148795d9f25f89d4"
当我直接通过邮递员/失眠症之类的东西提出这个请求时,它是有效的,我得到了适当的304响应。
在Reactotron中检查应用程序时,我可以看到网络请求头似乎是正确的:

如果我将JSON请求复制为cURL,就会得到以下内容:
卷曲"if-none-match:"33a64df551425fcc55e4d42a148795d9f25f89d4"“-H https://url/to/api
只需稍作修改,只显示标题:
curl -sD - -o /dev/null -H -H https://url/to/api
它也只返回一个200,但是如果我像这样转义etag周围的引号,它可以工作:
curl -sD - -o /dev/null -H -H https://url/to/api
我真的很困惑,因为我尝试过以下所有的变体:
'If-None-Match': etag
'If-None-Match': `"${etag}"`
'If-None-Match': `\"${etag}\"`
'If-None-Match': '"' + etag + '"'没有用,我做错了什么?
将相同的提取请求放入html文件中,并在浏览器中进行测试,以满足预期的304状态。
发布于 2021-07-08 19:05:20
我得到了同样的问题,使用Axios在一个反应本土应用程序。我也尝试了相反的‘如果-匹配’和得到200,所以这就好像头甚至不在那里。
const query = {
method: 'GET',
url: `someurl`,
headers: {
Authorization: `Bearer ${token}`,
'If-Match': etag,
},
};
let response = await axios(query);发布于 2021-09-15 17:05:02
在引擎盖下,receives使用的是NSURLCache,即使它从上游接收到304,至少从我在网上读到的内容也会返回200。使用或app中的另一个此类代理查看一下,您将看到网络上的流量,然后它才会到达您的应用程序。谷歌还揭示了许多围绕缓存的边缘情况,比如默认情况下显然没有缓存私有响应。
https://stackoverflow.com/questions/57778288
复制相似问题