Alamofire 不会自动设置 `If-None-Match` header
Alamofire does not set `If-None-Match` header automatically
我有一个 iOS 应用程序,它使用 Alamofire 5.2.2 对 2 个不同的服务器(server A
和 server B
)进行 API 调用。根据我的理解和我在 Whosebug 上阅读的内容,只要缓存策略设置为 .useProtocolCachePolicy
和 return 状态代码,Alamofire 应该会自动设置 If-None-Match
请求 header 200
如果服务器响应状态代码 304
.
到应用程序
我能够对 server A
进行 API 调用,Alamofire 正在按预期设置 If-None-Match
header。但是,通过使用同一组代码,当我对 server B
.
进行 API 调用时,Alamofire 没有设置 If-None-Match
header
我注意到的一件事是 server A
使用了强验证:
Etag: "7266bc2f1b245365bb1a74da5185bca6"
然而,server B
使用的是弱验证:
ETag: W/"6672-pKPf8kg1eUMH8msoW0et1yskcQQ"
我还尝试在调用 server B
时手动设置 If-None-Match
header,服务器响应状态代码 304
。我期待 Alamofire 为我的应用程序 return 状态代码 200
,相反,它 returns 状态代码 304
.
知道为什么 Alamofire 在 API 调用 server B
时不自动设置 If-None-Match
吗?这是一个 Alamofire 错误还是服务器配置问题?我可以做些什么来获得与 API 调用 server A
?
相同的行为
提前致谢。
304 响应似乎是预料之中的,因为大多数服务器使用它来指示缓存数据仍然完好。来自 Microsoft's MDN documentation:
The server compares the client's ETag (sent with If-None-Match) with the ETag for its current version of the resource, and if both values match (that is, the resource has not changed), the server sends back a 304 Not Modified status, without a body, which tells the client that the cached version of the response is still good to use (fresh).
Alamofire 在这里不做任何事情,它全部由 URLSession
在幕后处理。
显然,我的问题的原因是因为 server B
有响应 header Cache-Control = no-store
并且 Alamofire 尊重这个 header 并忽略给定的 Etag。
我有一个 iOS 应用程序,它使用 Alamofire 5.2.2 对 2 个不同的服务器(server A
和 server B
)进行 API 调用。根据我的理解和我在 Whosebug 上阅读的内容,只要缓存策略设置为 .useProtocolCachePolicy
和 return 状态代码,Alamofire 应该会自动设置 If-None-Match
请求 header 200
如果服务器响应状态代码 304
.
我能够对 server A
进行 API 调用,Alamofire 正在按预期设置 If-None-Match
header。但是,通过使用同一组代码,当我对 server B
.
If-None-Match
header
我注意到的一件事是 server A
使用了强验证:
Etag: "7266bc2f1b245365bb1a74da5185bca6"
然而,server B
使用的是弱验证:
ETag: W/"6672-pKPf8kg1eUMH8msoW0et1yskcQQ"
我还尝试在调用 server B
时手动设置 If-None-Match
header,服务器响应状态代码 304
。我期待 Alamofire 为我的应用程序 return 状态代码 200
,相反,它 returns 状态代码 304
.
知道为什么 Alamofire 在 API 调用 server B
时不自动设置 If-None-Match
吗?这是一个 Alamofire 错误还是服务器配置问题?我可以做些什么来获得与 API 调用 server A
?
提前致谢。
304 响应似乎是预料之中的,因为大多数服务器使用它来指示缓存数据仍然完好。来自 Microsoft's MDN documentation:
The server compares the client's ETag (sent with If-None-Match) with the ETag for its current version of the resource, and if both values match (that is, the resource has not changed), the server sends back a 304 Not Modified status, without a body, which tells the client that the cached version of the response is still good to use (fresh).
Alamofire 在这里不做任何事情,它全部由 URLSession
在幕后处理。
显然,我的问题的原因是因为 server B
有响应 header Cache-Control = no-store
并且 Alamofire 尊重这个 header 并忽略给定的 Etag。