Fiddler之HTTP协议缓存、压缩与URL Encode

HTTP协议中的缓存
    HTTP缓存:当web请求到达缓存时,如果本地有“已缓存”,就可以从本地缓存设备提取文档,而不需要从服务器中提取
    缓存的优点:
        1.减少冗余的数据传输,节省传输时间
        2.减少了服务器的负担,大大提高了网站的性能
        3.加快了客户端加载网页的速度
    fiddler中查看缓存的header:
        HTTP请求与响应中的Cache
    判断缓存是否为最新(新鲜度):
        1.浏览器把缓存文件的最后修改时间通过Header“If-Modified-Since”告诉Web服务器
        2.浏览器把缓存文件的ETag通过Header “If-None-Match”告诉Web服务器
            通过缓存文件的修改时间判断:
                1.当浏览器客户端需要请求一个文档,它先查看本地缓存,发现有此文档的缓存,会获取文档的最后修改时间,通过“If-Modified-Since”发送HTTP请求给Web服务器
                2.Web服务器收到HTTP请求,将服务器的文档修改时间和HTTP请求中的相比较,如果时间一样,则表示缓存为最新。Web服务器会发送304状态码给客户端,告诉客户端直接使用缓存中的版本
                3.如果文档已经更新,Web服务器会发送最新的版本给客户端
    与缓存相关的header:
        HTTP请求相关:
            Cache-Control: max-age=0 以秒为单位
            If-Modified-Since: Tue, 24 Mar 2020 08:19:03 GMT 缓存文件的最后修改时间
            If-None-Match: "5e79c277-56485" 缓存文件的Etag值
            Cache-Control:no-cache 不使用缓存
            Pragma:no-cache 不使用缓存
        HTTP响应相关:
            Cache-Control: max-age=60 60秒后缓存过期(相对时间)
            Date: Sun, 12 Apr 2020 01:00:03 GMT 当前响应发送的时间
            Expires: Thu, 16 Apr 2020 18:55:17 GMT 缓存过期的时间(绝对时间)
    ETag
        ETag实体标签,是根据实体内容生成的一段hash字符串,可以标识资源的状态,当资源发送变化,ETag也会发生变化
        ETag是服务端生成的,客户端不会关心ETag如何产生
        使用Etag是为了解决Last-Modified无法解决的问题
            1.一些服务器无法精确得到文件最后修改时间
            2.一些文件更新过于频繁
            3.一些文件只修改了更新时间,内容并未改变
    浏览器不使用缓存
        1.强制刷新:Ctrl+F5,浏览器会发送HTTP请求,header中带有Cache-Control:no-cache,明确告诉服务器不使用缓存
        2.web服务器会发送最新的文档发送给浏览器客户端
    直接使用缓存,不去服务器验证
        第一次登陆一个网站,和第二次登陆,session不一样,因为第二次登陆会使用一些缓存,并没有发送HTTP请求
    public与private
        Cache-Control:public 公有缓存,缓存可以由数千名用户共享
        Cache-Control:private 私有缓存,缓存是单个用户专有的

HTTP协议压缩和URL Encode
    HTTP压缩
        Web服务器和浏览器之间压缩传输“文本内容”的方法,HTTP采用压缩算法,比如用gzip压缩HTML等文件,能减少网络传输的数据量,提供用户显示网页的速度
        压缩过程:
            1.浏览器发送HTTP请求给Web服务器,请求中header的Accept-Encoding:gzip,deflate告诉服务器,浏览器支持gzip压缩
            2.Web服务器收到HTTP请求后生成原始HTTP响应,其中有原始的Connect-Type和Connect-Length
            3.Web服务器通过gzip对HTTP响应进行编码,编码后的header中有Connect-Type和Connect-Length,并增加了Connect-Encoding:gzip,然后把HTTP响应发送给浏览器
            4.浏览器接收到HTTP响应后,根据Connect-Encoding:gzip对HTTP响应进行解码,获取到原始的HTTP响应后显示出网页
        内容编码类型:
            gzip表明实体采用GNU zip编码
            compress表明实体采用Unix的文件压缩
            defalte表明实体使用zlib格式压缩
            identity表明没有对实体进行编码;当没有Connect-Encoding header时,默认此情况
            gzip、compress、defalte都为无损压缩算法
                JPEG文件使用gzip压缩效果不好,gzip占用了一些服务器和客户端的CPU
                gzip压缩原理:
                    gzip压缩是在一个文本文件中找出类似的字符串,并临时替换他们,使整个文件变小
    URL Encode
        URL编码就是将所有非英文字母、数字符号都替换成百分号后加两位十六进制数,比如空格编码为%20
        编码:
            单击工具栏TextWizard--->点击编码方式为Encode

发布了51 篇原创文章 · 获赞 428 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_45331873/article/details/105467362