首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏poslua

    If-None-Match 在刷票软件中的应用

    浏览器会存下这些标记,并在下次请求时带上 If-Modified-Since: 上次 Last-Modified 的内容或 If-None-Match: 上次 ETag 的内容,询问服务端资源是否过期。 有一些刷票软件开辟了个新的思路:通过伪造 If-None-Match 头来跳过 CDN 缓存,尽快获取源站的最新数据。 If-None-Match 是一个条件式请求首部,对应校验的源站头部为 ETag,当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中所列出的相匹配的时候,才会对请求进行相应的处理(有文件则响应 分析完了原理,屏蔽这些刷票软件也变得非常简单:就是在 CDN 上配置策略,删掉 If-None-MatchIf-None-Match 这些请求头,再进行后续的处理。实际上拦截效果也非常好: ?

    1.3K10发布于 2019-08-19
  • 来自专栏咸鱼学Python

    Python爬虫进阶必备 | 关于某电商网站的加密请求头 if-none-match 的分析

    在这个网站搜索商品的时候会出现请求头if-none-match,之前咸鱼的很多例子都没有写到如何分析请求头的加密参数应该如何分析,所以拿这个例子大概讲讲。 定位加密 按照之前的套路,想到的第一步是搜索if-none-match,搜索的结果非常具有迷惑性。【图2-1】 ? 打开这个文件,直接检索if-none-match没有找到命中项,但是搜索If-None-Match,可以看到有相关的命中项的。【图2-2】 ? 可以在这里看到t的值中就包含了我们需要的请求头if-none-match,所以可以猜测在这个 xhr 断点之前就已经完成了这个值的生成。

    1.2K20发布于 2020-03-25
  • 来自专栏博客迁移同步

    HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记

    Etag和If-None-Match:     Etag由服务器端生成,客户端通过If-None-Match这个条件请求来验证资源是否修改。 2.服务器会判断客户端发送过来的If-None-Match值与服务器的Etag值是否与相同,如果相同,就把If-None-Match的值置为false,状态码置为304(未修改——Not Modified 如果不相同,就将If-None-Match的值设为true,返回状态码为200,客户端重新解析服务器返回的数据。 问题来了,Etag和Last-Modified有什么区别? 它只是告诉浏览器和代理在使用它之前验证服务器的缓存内容(这是通过If-Modified-Since,If-Unmodified-Since,If-Match,If-None-Match属性完成的)。 如果文档的ETag仍然与If-None-Match标头的值匹配,则服务器将不发送实际文档。

    4.4K20编辑于 2023-05-06
  • 来自专栏灰子学技术

    Go:http包的一个坑

    = nil { fmt.Println(err) return } req.Header.Add("If-None-Match s(*http.Request=&{GET 0xc000132000 HTTP/1.1 1 1 map[If-None-Match:[W/"wyzzy"]] {0xc000066c30} 0x1233870 s(*http.Request=&{GET 0xc00016a000 HTTP/1.1 1 1 map[If-None-Match:[W/"wyzzy"]] {0xc000114c30} 0x1233870 s(*http.Request=&{GET 0xc00016a200 HTTP/1.1 1 1 map[If-None-Match:[W/"wyzzy"]] {0xc0001150e0} 0x1233870 s(*http.Request=&{GET 0xc0000ae000 HTTP/1.1 1 1 map[If-None-Match:[W/"wyzzy"]] {0xc000096180} 0x1233870

    3.5K30发布于 2021-01-06
  • 来自专栏大内老A

    [WCF REST] 提高性能的一个有效的手段:条件资源获取(Conditional Retrieval)

    当再次对相同的资源进行请求时,它会为HTTP请求添加一个名为If-None-Match报头,而该报头的值就是这个缓存的ETag值。 服务端接收到该请求之后会通过If-None-Match请求报头确认最新的资源数据是否与该报头值代表的数据一致,如果一致则回复一个状态为“304 (Not Modified)”的空消息,否则将新的资源置于回复消息的主体并附上基于新资源数据的 对于其他的4个CheckConditionalRetrieve方法,作为参数的entityTag(ETag)将与请求消息的If-None-Match进行比较,如果不一致也会抛出HTTP状态为NotModified 该方法的参数ifNoneMatch和eTag分别表示请求消息的If-None-Match报头和回复消息的ETag报头。 我们通过调用HttpWebRequest的静态方法Create基于服务操作地址创建一个HttpWebRequest对象,并设置该请求的If-None-Match报头的HTTP方法(GET)。

    82470发布于 2018-01-16
  • 来自专栏编程三昧

    【前端 · 面试 】HTTP 总结(九)—— HTTP 协商缓存

    浏览器携带的是具有判断意味的属性 —— If-Modified-Since(从什么时间以来是否改变) 和 If-None-Match(是否匹配不到)。 Etag 和 If-None-Match Etag 和 If-None-Match 是一对报文头,属于HTTP 1.1。 ETag 和 If-None-Match 的值是一串 hash 码,代表的是一个资源的标识符,当服务端的文件变化的时候,它的 hash 码会随之改变。 If-None-Match 再次请求服务器时,通过此字段通知服务器客户段缓存数据的唯一标识。 服务器收到请求后发现有头 If-None-Match 则与被请求资源的唯一标识进行比对: 不同,说明资源又被改动过,则响应整片资源内容,返回状态码 200。

    60110发布于 2021-08-10
  • 来自专栏数字化之路

    弱网客户端的福音:节省带宽的利器【ETag】

    与ETag一起使用的两个If-*头是 “If-None-Match”和“If-Match”——每一个HTTP头都有它自己的语义,正如本文后面所讨论的。 在这一点上,ETag值将根据响应体计算出来并和响应一起返回给客户端;另外,如果请求携带了If-None-Match头,那也将会被处理。 header("Accept", "application/json").headers("If-None-Match", etagValue) .get(uriOfResource); 发送一个新的检索请求,这次使用 “If-None-Match” 头携带上一次请求得到的ETag值。 header("Accept", "application/json").headers("If-None-Match", etagValue) .get(uriOfResource);

    2.5K20编辑于 2023-03-07
  • 来自专栏大内老A

    ASP.NET Core静态文件中间件[2]: 条件请求以提升性能

    对于HTTP请求来说,缓存资源携带的最后修改时间戳和ETag分别保存在名为If-Modified-Since与If-None-Match的报头中。 报头名称体现的含义如下:只有目标资源在指定的时间之后被修改(If-Modified-Since)或者目前资源的状态与提供的ETag不匹配(If-None-Match)的情况下才会返回资源的荷载内容。 请 求 报 头 语  义 满 足 条 件 不满足条件 If-Modified-Since 目标内容在指定时间戳之后是否有更新 200 OK 304 Not Modified If-None-Match 我们知道这两个报头的名称分别是If-Modified-Since和If-None-Match。由于我们没有修改文件的内容,所以服务器返回如下一个状态码为“304 Not Modified”的响应。 报头修改成一个较早的时间戳,或者改变了If-None-Match报头的标签,服务端都将做出文件已经被修改的判断。

    81751发布于 2020-12-17
  • 来自专栏前端卡卡西

    http协议

    ,来判断是否命中协商缓存,如果服务器接收到这个请求的请求头有If-None-Match,就会判断这个If-None-Match是否和这次请求返回的Etag一致,如果一致就代表命中协商缓存,就会返回304 ,因此获取到的if-none-match为undefined),node收到这个请求后,判断if-none-match,发现是undefined,即代表是第一次请求,因此就返回200状态码以及根据返回的 data数据生成的唯一标识给响应头Etag; 浏览器第二次请求/tag时,会把上次请求的/tag时的响应头Etag,设置在请求头if-none-match上,node服务器收到请求后,判断请求头的if-none-match Etag和If-None-Match ETag与If-None-Match是一对报文,属于http 1.1。 ETag可以用来解决这种问题。ETag是一个文件的唯一标志符。 客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag作为请求头的If-Modified-Since/If-None-Match一起传递给服务器。

    1.1K10编辑于 2022-02-25
  • 来自专栏vue+ArcGis

    一文读懂什么是http的强缓存以及协商缓存?简单易懂

    因为服务器需要向浏览器确认缓存资源是否可用,二者要进行通信,而通信的过程就是发送请求,所以在header中就需要有专门的标识来让服务器确认请求资源是否可以缓存访问,所以就有了下面两组header字段: Etag和If-None-Match Etag/If-None-Match Etag/If-None-Match和Last-Modify/If-Modify-Since的处理逻辑一致,通俗讲都是第一次请求给个标识,然后下一次请求再把这个标识传回去 Etag/If-None-Match和Last-Modify/If-Modify-Since的不同 说白了Etag/If-None-Match就是用来弥补Last-Modify/If-Modify-Since Etag是服务器自动生成或者由开发者生成的资源在服务器的唯一标识符,能够更加准确的控制缓存 Etag/If-None-Match的优先级高于Last-Modify/If-Modify-Since 写在最后

    3.9K62编辑于 2021-12-09
  • 来自专栏HZFEStudio

    HTTP 缓存机制

    协商缓存可以通过 Last-Modified / If-Modified-Since 和 Etag / If-None-Match 控制,开启协商缓存时向服务器发送的请求会带上缓存标识,若命中协商缓存服务器返回 协商缓存 3.1 ETag / If-None-Match 通过唯一标识来验证缓存。 优先级高于 Last-Modified / If-Modified-Since。 如果资源请求的响应头里含有 ETag,客户端可以在后续的请求的头中带上 If-None-Match 头来验证缓存。若服务器判断资源标识一致,则返回 304 状态码告知浏览器可从本地读取缓存。 优先级低于 ETag / If-None-Match。 缺点:只能精确到秒,若 1s 内多次修改资源 Last-Modified 不会变化。 3.3 拓展知识(冷门考点) ETag 在标识前面加 W/ 前缀表示用弱比较算法(If-None-Match 本身就只用弱比较算法)。

    1.3K20发布于 2021-09-28
  • 来自专栏TSW

    这个框架的官网居然放了这种照片......

    它的原理是这样的,当浏览器请求服务器的某项资源(A)时, 服务器根据A算出一个哈希值并通过 ETag 返回给浏览器,浏览器把这个服务器算出来的哈希值 和 A 同时缓存在本地,当下次再次向服务器请求A时,会通过 If-None-Match images/cover.jpg 这个url时,服务器监听到请求判断请求路径为 cover.jpg 的情况下,router进入对应的handler,拿到请求request对象的request.headers['if-none-match ']属性,if-none-match的格式类似于‘27-1525249766085’:前面为当前使用的图片序号后面为时间戳,我们把图片序号加1 ,并重新生成时间戳,将它们组合成新的字符串类似于‘28-1525249767085 ’,并将它作为response对象writeHead方法中Etag的取值,下次客户端在发起请求时,刚刚设置的Etag值就可以通过request.headers['if-none-match']给到服务器

    73720发布于 2018-07-03
  • 来自专栏后端码匠

    大型网站必备,彻底理解Http的缓存机制!

    其中 Etag / If-None-Match 的优先级比 Last-Modified / If-Modified-Since 高。 Etag / If-None-Match Etag 是服务器响应请求时,返回当前资源文件的一个唯一标识(由服务器生成),如下: ? If-None-Match 是客户端再次发起该请求时,携带上次请求返回的唯一标识 Etag 值,通过此字段值告诉服务器该资源上次请求返回的唯一标识值。 服务器收到该请求后,发现该请求头中含有 If-None-Match,则会根据 If-None-Match 的字段值与该资源在服务器的 Etag值做对比,一致则返回 304,代表资源无更新,继续使用缓存文件 注:Etag / If-None-Match 优先级高于 Last-Modified / If-Modified-Since,同时存在则只有 Etag / If-None-Match 生效。

    92320发布于 2020-03-03
  • 来自专栏采云轩

    图解 HTTP 缓存

    [si4ae1dlnt.jpeg] 缓存5.jpg 协商缓存 当浏览器的强缓存失效的时候或者请求头中设置了不走强缓存,并且在请求头中设置了If-Modified-Since 或者 If-None-Match ○ ETag/If-None-Match ETag/If-None-Match 的值是一串 hash 码,代表的是一个资源的标识符,当服务端的文件变化的时候,它的 hash码会随之改变,通过请求头中的 If-None-Match 和当前文件的 hash 值进行比较,如果相等则表示命中协商缓存。 options)); app.listen(3001); 第一次请求资源: [bww1fa2iql.jpeg] 缓存6.jpg 第二次请求资源,服务端根据请求头中的 If-Modified-Since 和 If-None-Match [0rmfwdwhtf.jpeg] 缓存13.jpg ETag/If-None-Match 的出现主要解决了 Last-Modified/If-Modified-Since 所解决不了的问题: 如果文件的修改频率在秒级以下

    94120发布于 2020-05-18
  • 来自专栏菜鸟成长学习笔记

    如何通过Nginx配置来优化你的网络请求

    ETag/if-None-Match缓存 ETag的原理和上面的last-modified是类似的。ETag则是对当前请求的资源做一个唯一的标识。该标识可以是一个字符串,文件的size,hash等。 浏览器在下一次加载的时候会向服务器发送请求,会将上一次返回的ETag值放到request header 里的 if-None-Match里面去,服务器端只要比较客户端传来的if-None-Match值是否和自己服务器上的 并且把新的Etag赋值给if-None-Match来更新该值。 last-modified 和 ETag之间对比 在精度上,ETag要优先于 last-modified。 然后当我们再次刷新浏览器代码的时候,浏览器将会带上 if-None-Match请求头,并赋值为上一次返回头的Etag的值。 然后我们继续刷新,就会返回304了,因为它会把最新的Etag的值赋值给 if-None-Match请求头,然后请求的时候,会把该最新值带过去,因此如下图所示可以看到。 ?

    1.9K10发布于 2019-12-05
  • 来自专栏乱码李

    Web 性能优化-缓存-HTTP 缓存

    (3) Etag/If-None-Match: Etag 是根据资源内容生成的一段 hash 字符串,标识资源的状态,由服务端产生。浏览器将这串字符串传回服务器,验证资源是否发生修改。 If-None-Match 表示当资源过期时(超过 max-age),发现资源有 Etag 声明,向 web 服务器发送请求时带上 If-None-Match (Etag 值)。 web 服务器收到请求后发现 Header 中带有 If-None-Match 则与被请求资源的相应校验串进行对比,决定返回 200 或者 304。

    77830发布于 2021-11-26
  • 来自专栏WebJ2EE

    【浏览器】:缓存

    Tomcat 如何对待"If-None-Match"等请求头的? 1. 【知乎】是怎么玩的? 1.1. 知乎 1.2. 京东 2. 缓存作用? or ignored; when the cache receives a request for a stale resource, it forwards this request with a If-None-Match If the ETag header was part of the response for a resource, the client can issue an If-None-Match in Tomcat 如何对待"If-None-Match"等请求头的? if ((request.getHeader("If-None-Match") == null) && (lastModified < headerValue +

    1.2K30发布于 2020-11-20
  • 来自专栏IMWeb前端团队

    http cache笔记

    如果If-Modified-Since的时间比服务器当前时间还晚,则会被认定为非法请求 ETag 与 If-None-Match HTTP协议定义ETag为被请求变量的实体标记,类似于一个资源的 格式类似于: Etag 9a932760982d29a83836cbd469bb14e7 第二次请求相同的数据时,浏览器的请求头中带上If-None-Match字段,如果服务器端资源没有变化,则请求返回 If-None-Match 9a932760982d29a83836cbd469bb14e7 以上两个方式虽然完成了缓存文件功能,但是每次请求url时还是会向服务器发送一个请求头If-Modified-Since 和If-None-Match

    72760发布于 2018-01-08
  • 来自专栏Happy的分享

    你知道HTTP协议的ETag是干什么的吗?

    比如,浏览器第一次请求一个资源的时候,服务端给予返回,并且返回了ETag: "50b1c1d4f775c61:df3" 这样的字样给浏览器,当浏览器再次请求这个资源的时候,浏览器会将If-None-Match 查看此次的HTTP请求头,如下: image.png 可以看到,客户端在向服务端请求资源的时候,通过If-None-Match请求头带上了之前服务端返回的Etag的值。 服务端收到第二次请求的时候,发现携带了If-None-Match字段,就重新计算服务器对应资源的Etag,如果二者匹配了,就认为资源没有发生变化,直接给客户端相应304,让客户端读取缓存中的数据。

    7.1K50发布于 2019-07-16
  • 来自专栏小前端看世界

    这是前端需要的缓存知识!

    为了解决这个问题,后来就出现了ETag/If-None-Match。 ETag/If-None-Match ETag/If-None-Match和Last-Modify/If-Modify-Since不一样,ETag/If-None-Match返回的是该资源的唯一标识,而且是个资源的内容挂钩的 ETag/If-None-Match和Last-Modify/If-Modify-Since的携带方式是一样。

    44320编辑于 2022-09-26
领券