react-native 无法从获取中获得304未修改状态

dbf7pr2w  于 4个月前  发布在  React
关注(0)|答案(9)|浏览(112)

#### 描述

我正在实现一个React Native应用程序中图像的缓存机制。这涉及到利用AWS S3存储图像文件,并使用JavaScript的fetch API检索它们。然而,即使在fetch请求中正确添加了`If-Modified-Since`和`If-None-Match`标头,我也遇到了一个问题,即response.status属性没有返回预期的304状态。
最初,我确实收到了预期的304响应。然而,在修改headers中的`If-None-Match`后,随后的响应切换到了200,如预期。令人困惑的是,在将`If-None-Match`恢复为其原始值后,所有后续请求始终返回200。fetch API不应该始终返回304状态吗?
我已经在各种HTTP客户端(包括Postman、cURL和浏览器和Node.js环境中的fetch API)进行了广泛的测试,始终都返回304状态。奇怪的是,似乎只有React Native中的fetch API表现出这种行为。

#### 重现步骤

1. 克隆[this](https://github.com/alvinlalbit/react-native-cachetest)仓库
1. 运行`npm run android`或`npm run ios`,影响两个平台
1. 查看控制台或屏幕上的文本组件中显示的状态代码,最初应为304
1. 更改headers中的`If-None-Match`
1. 查看控制台或屏幕上的文本,它将变为200
1. 将`If-None-Match`恢复为其原始值`2c845032f84e1139a41c639609406664`,从此以后该url将始终为200
v440hwme

v440hwme1#

我有一个在iOS上困扰了我几个月的问题,那就是我发送给S3的DELETE请求中,深层次的我的应用程序里出现了这两个头部信息(If-None-Match和If-Modified-Since)。我已经和S3团队见过面,他们确定这一定是发生在iOS层面上的,因为唯一能捕获到这两个头部信息的网络调试器是Charles Proxy。这个线程稍微相关。

我很乐意进行电话沟通,提供私有仓库访问权限和重现步骤。

查看aws-amplify/amplify-js#13133

332nm8kg

332nm8kg2#

在从0.73.6升级到0.74.1后,我们在iPhone 7上遇到了类似的问题。我们实现了一个依赖于304状态码的自定义缓存机制。原本应该返回空的304状态码的POST请求现在返回了带有之前数据的200状态码。在iPhone 8及以后的版本和Android上,它似乎仍然可以正常工作。

oipij1gg

oipij1gg3#

@alvinlalbit@madox2 你能尝试上面的修复方法吗?尽管根据苹果的规格,这个修复方法在旧版本的iOS上无法工作。

jum4pzuy

jum4pzuy4#

你链接的复制者是不完整的,它没有你的更改。

yv5phkfx

yv5phkfx5#

@alvinlalbit ,你链接的复现仓库不完整,里面没有你的更改。
Hi @blakef ,我创建了复现仓库,我的队友对它进行了一些更新。你能告诉我哪些具体的更改缺失吗?这样我们就可以解决这个问题了。谢谢!

6qqygrtg

6qqygrtg6#

@alvinlalbit ,你链接的复现仓库不完整,里面没有你的更改。
Hi @blakef ,我创建了复现仓库,我的队友对它进行了一些更新。你能告诉我哪些具体的更改缺失吗?这样我们就可以解决这个问题了。谢谢!
Hi ,请尝试在本地修复 #45263

mkh04yzy

mkh04yzy7#

如果你分享的内容与你描述的应用程序不相似,它看起来像默认应用程序。

pgccezyw

pgccezyw8#

如果你分享了,它与你描述的应用程序不相似。它看起来像默认应用程序。
对不起,做了必要的更改,现在👍

kulphzqa

kulphzqa9#

@alvinlalbit ,你链接的复现仓库不完整,里面没有你的更改。
Hi @blakef ,我创建了复现仓库,我的队友对它进行了一些更新。你能告诉我哪些具体的更改缺失吗?这样我们就可以解决这个问题了。谢谢!
Hi ,请尝试在本地修复 #45263
hi @huzhanbo1996 ,当然可以,我会尝试你的修复方法。你有关于如何从源代码构建React Native的资源吗?

相关问题