首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Alamofire 4 Swift缓存控制- HTTP状态码304 (如果修改后)

Alamofire是一种流行的Swift网络请求库,用于简化iOS应用程序中的网络请求操作。它提供了许多功能和工具,以便开发人员可以轻松地进行网络通信。

缓存控制是指在网络请求中使用缓存来提高性能和减少网络流量。HTTP状态码304表示资源未修改,服务器会返回这个状态码来告诉客户端使用缓存的副本。Alamofire 4提供了对缓存控制的支持,使开发人员可以更好地管理缓存。

在Alamofire 4中,可以通过设置URLRequest.CachePolicy来控制缓存行为。常见的缓存策略包括:

  1. .useProtocolCachePolicy:使用协议缓存策略,即根据服务器返回的缓存控制头来决定是否使用缓存。
  2. .reloadIgnoringLocalCacheData:忽略本地缓存,每次都从服务器请求最新数据。
  3. .returnCacheDataElseLoad:优先使用缓存,如果缓存不存在则从服务器请求数据。
  4. .returnCacheDataDontLoad:只使用缓存,不从服务器请求数据。

对于HTTP状态码304,Alamofire会自动处理缓存逻辑。当服务器返回304状态码时,Alamofire会检查本地缓存是否存在对应的响应,并将缓存的响应返回给开发人员。这样可以减少网络流量和提高响应速度。

Alamofire还提供了其他功能,如请求重试、请求优先级、请求取消等。开发人员可以根据具体需求使用Alamofire来进行网络请求,并根据需要进行缓存控制。

腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储等。具体推荐的腾讯云产品和产品介绍链接地址可以在腾讯云官方网站上查找。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Jekyll-Admin-Mac-模板处理

    制作导航条 使用网络框架Alamofire 使用 SwiftyJSON iOS10开启启用 HTTP 请求 使用 ObjectMapper 关于 Swift 闭包里面循环引用...使用网络框架Alamofire 我们使用 Swift最大的请求框架 Alamofire。...在层次支持的视图中,视图完成的任何绘图都将缓存到底层图层对象。然后,可以以比显式显示视图内容更有效的方式来操纵缓存的内容。AppKit会自动创建底层图层对象(使用该方法)并处理视图内容的缓存。...如果该方法返回,则不应直接与底层对象进行交互。相反,使用此类的方法对视图及其图层进行任何更改。如果返回,则在视图方法中修改图层是合适的(并且适当)。...304B23CD-056C-4D8C-A4AA-62BB60E75B22 经过查证是下面代码导致的。 self.attributedTitle = mutableAttributeString ?

    6.7K30

    Swift 编写网络层单元测试

    ,可以写一些清空状态和还原现场的操作,以免影响之后的测试,譬如task?....上面的测试非常简单吧,但是按《单元测试的艺术》一书中的观点,这样的测试已经不能算是单元测试,而是步入集成测试的范畴了: 集成测试是对一个工作单元进行的测试,这个测试对被测试的工作单元没有完全的控制,并使用该单元的一个或多个真实的依赖物...其实 Alamofire 就有采用我上面说的方法进行测试,所以如果你的网络层像我一样是以 Alamofire 为基础构建的,那就表示你不太需要再去写这样的测试了,你只要保证跟 Alamofire 无关的那些代码本身逻辑正确...工作单元可能有三种最终结果:返回值、改变系统状态和调用第三方对象。相应的单元测试一般可以分为三类:基于返回值的测试、基于状态的测试和交互测试。...要测试状态的改变一般需要先测试初始状态,然后调用改变状态的方法,再测试改变后的状态。而交互测试可能就需要用到 fake (伪对象),fake 分为 stub (存根)和 mock (模拟对象)两种。

    2K20

    Alamofire验证器Validation

    alamofire.png Alamofire简单使用 Alamofire融合Swift本身的特点,使用起来更加简单方便。下面引用官方Demo,发起一个请求并json解析处理。...response.request))") // original url request print("Response: \(String(describing: response.response))") // http...程序就此进入假死状态。 一般我们只处理服务器返回200 成功的状态,其他的状态我们可直接判定为响应出现了错误。此时就需要在响应时进行验证 即这里所描述的 Validation,响应验证器。...statusCode); break } } } 添加validate()默认验证 状态在 (200...验证器Validation Validation本身是一个闭包,在请求完成后调用该闭包对响应进行验证,如果符合验证的条件返回成功,不符合条件返回错误。

    1.6K10

    我常用的iOS开源库

    前言 OC库和Swift库相似功能的很多 选择的建议是:如果OC库在Swift中完全能用 就优先用OC库 原因是:Swift语言还是不太稳定 语言一更新 程序一大改 实在是太痛苦了 菜单相关 语言 项目名称...MWPhotoBrowser 图片预览 ObjectC PYPhotoBrowser 图片预览 ObjectC MJPhotoBrowser 图片选取 ObjectC QRCodeGenerator 二维生成...UIColor-Hex-Swift UIColor+Hex 缓存 语言 项目名称 项目说明 ObjectC PINCache 快速的缓存框架 网络相关 语言 项目名称 项目说明 ObjectC AFNetworking...网络请求库 ObjectC YYModel 实体类注入 与 JOSN转换 ObjectC SocketRocket WebSocket客户端 Swift Alamofire 网络请求库 Swift SwiftyJSON...转JSON Swift Alamofire-SwiftyJSON 方便以上两个组件的结合使用 Swift ObjectMapper JSON与对象互转 Swift Transporter 文件下载 ObjectC

    2.7K54

    网页性能优化浅谈与实践

    简单图示: 对 http304 状态结合 max-age 设置缓存命中流程 1.浏览器初次访问服务器,服务器返回200状态 2.浏览器再次请求服务器时,浏览器会先判断max-age,如果到期则直接请求服务器...从缓存控制缓存校验两个角度来看http缓存 1.缓存控制控制缓存的开关,用于标识请求或访问中是否开启了缓存,使用了哪种缓存方式。...304状态,不返回资源;如果不一致则返回200和修改后的资源,并带上新的时间。...Tips : If-Modified-Since和If-Unmodified-Since的区别是,前者告诉服务器如果时间一致,返回状态304; 后者告诉服务器如果时间不一致,返回状态412。...Tips : If-None-Match和If-Match的区别是,前者告诉服务器如果一致返回状态304,而不一致则返回资源,后者告诉服务器如果不一致,返回状态412 ---- Pragma 描述:

    59820

    Alamofire-URLSession必备技能

    Alamofire的优雅之处在于它完完全全是由Swift写成的,并且没有从它的Objective-C版本-AFNetworking那继承任何特性。...如果请求拥有一个缓存的响应,那么URL加载系统会检查这个响应来决定,如果它指定内容必须重新生效的话。假如内容必须重新生效,将建立一个连向源端的连接来查看内容是否发生变化。...=4:本地缓存数据、代理和其他中介都要忽视他们的缓存,直接加载源数据 NSURLRequestReloadIgnoringCacheData=NSURLRequestReloadIgnoringLocalCacheData...如果缓存中没有已存数据来响应请求的话,数据从源端加载 NSURLRequestReturnCacheDataDontLoad = 3:指定已存的缓存数据用来满足请求,不管生命时长和过期时间。...如果缓存中没有已存数据来响应URL加载请求的话,不去尝试从源段加载数据,此时认为加载请求失败。

    2K20

    第六章·Web基础之http协议

    下面的有些网站返回的是 HTTP/1.1 200 OK 200是正确访问的状态  下图中 GET那一部分内容被称为:请求头信息 GET和HTTP之间有一个空行被称为:请求空行 HTTP中的信息被称为...下图所示:为什么有的时候状态是200 有的时候是304?...TCP_MISS dirn:-2:-2 #缓存版本号 x-powered-by: PHP/7.1.21 #缓存时间 x-swift-cachetime: 0 #保存时间 x-swift-savetime...响应方法 响应报文中的状态 状态(status-code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。...状态分为以下五类:  状态 含义 200 成功 301 永久重定向(跳转) 302 临时重定向(跳转) 304 本地缓存 307 内部重定向(跳转) 400 客户端错误 401 认证失败 403

    61920

    http请求头中缓存的实现

    什么是http缓存呢,当我们使用chrome浏览器,按F12打开控制台,在网络请求中有时候看到状态是200,有时候状态304,当我们去看这种请求的时候,我们会发现状态304状态结果是:Status...Code: 304 Not Modified,而状态为200的时候一般会有四种情况,一种是直接返回200,没有任何其他的标志,另一种是Status Code: 200 OK (from memory...最后一种不是太常见,Status Code: 200 (from Service Worker).后面这三种状态看到的效果是灰色的,其实从给出的信息也能看出来是从缓存中获取上数据。...其实我们可以按状态来区分其为两大类,分别是写上缓存--304和强制缓存--200 协商缓存304) 这种方式使用到了headers请求头里的两个字段,Last-Modified & If-Modified-Since...200状态304状态何时出现 在没有设置Cache-Contral的情况下,设置Last-Modified和ETag缓存,会出现200(from cache)和304 交替出现的情况。

    2K30

    HTTP缓存控制

    一、查看浏览器缓存 查看浏览器缓存需要下载一个工具ChromeCacheView: http://www.nirsoft.net/utils/chrome_cache_view.html 二、缓存控制...2.3 缓存验证确认 Cache-Control:must-revalidate 如上定义,当使用了must-revalidate指令,那就意味着缓存在考虑使用一个陈旧的资源时,必须先验证它的状态,已过期的缓存将不被使用...设置的强缓存时间较长比如1年,期间资源发生了改变。在强缓存有效期内重新发送请求,此时客户端会从缓存获取资源,但是此时,我想要的是修改后的资源,如何解决? 解决这2个问题需要用到:协商缓存。...字段中带到服务端 若在if-modified-since字段值之后对应的资源都没有更新过,则返回304 Not Modified状态 否则读取资源并返回,同时更新last-modified 5.2 示例...如果相等,走第5步 3. 如果不相等,则继续判断请求头的If-Not-Modified与对应资源的Last-Modified是否相等 4. 如果相等,走第5步 5. 响应304,结束请求 6.

    59710

    Swift 项目中涉及到 JSONDecoder,网络请求,泛型协议式编程的一些记录和想法

    对于来自网络的 JSON 结构化数据的处理,可以使用 JSONDecoder 这个苹果自己提供的字符串转模型类,这个类是在 Swift 4 的 Fundation 模块里提供的,可以在Swift 源码目录...实现这个功能代码就在上文提到的 Swift 源码目录 swift/stdlib/public/SDK/Fundation/ 下的 JSONEncoder.swift 文件,如果不想把源码下下来也可以在...在 Swift 里就是 Alamofire GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift 。...不过如果还有另外几处也要进行网络请求,拿这一坨代码不是要到处写了。那么先看看 Alamofire 干这个活是什么样子的?...默认都按照 GET 方法请求,在实际项目中会用到其它比如 POST 等方法,Alamofire 的做法是这样的: /// HTTP method definitions. /// /// See https

    6.7K20

    AlamoFire 的使用 (下载队列,断点续传)

    # 背景 新项目包含了上传下载网络请求相关功能,由于是 swift 编写所以自然而然选择了 AlamoFire (好像也没得选) 来做底层,正常的网络请求 post、get 等都是直接傻瓜式调用 AlamoFire...("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4", method: .get, parameters: nil, encoding: URLEncoding.default...= default) -> Alamofire.DownloadRequest 这个接口需要我们传入已存在的数据,然后基于我们传入的数据进行下载,它支持从新指定目的地路径,如果你有需要可以重新指定 Alamofire.download...# GCD 我们很自然而然的想到 GCD,但是 GCD 有一个问题无法控制最大并发数,而且对队列的管理也并不完善,比如我们要下载 100 个文件,如果同时下载的话开辟 100 个线程,那肯定是不行的,先不说移动设备是否支持...("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4", method: .get, parameters: nil, encoding: URLEncoding.default

    2.5K40

    彻底解决SESSION过期异常:一文讲透Http缓存机制

    Expires Expires 是 HTTP/1.0 控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires 的值时,直接使用缓存结果。...到了 HTTP/1.1,Expire 已经被 Cache-Control 替代,原因在于 Expires 控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因...这里我们以博客的请求为例,状态为灰色的请求则代表使用了强制缓存,请求对应的 Size 值则代表该缓存存放的位置,分别为 memory cache/from memory cache 和 disk cache...如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态 304状态或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应...://blog.csdn.net/huwei2003/article/details/70139062 304状态在SEO中意义: 一个网站被搜索引擎抓取的次数以及频率越多那么他是越有利于排名的,但是如果网站出现太多的

    2.4K30
    领券