成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Http 響應頭中的 ETag 值是如何生成的

網絡 網絡管理
1. 盡量便于計算,不會特別耗 CPU。這樣子利用摘要算法生成 (MD5, SHA128, SHA256) 需要慎重考慮,因為他們是 CPU 密集型運算。

?關于 etag 的生成需要滿足幾個條件,至少是寬松滿足

  1. 當文件更改時,etag 值必須改變。
  2. 盡量便于計算,不會特別耗 CPU。這樣子利用摘要算法生成 (MD5, SHA128, SHA256) 需要慎重考慮,因為他們是 CPU 密集型運算
  3. 必須橫向擴展,分布式部署時多個服務器節點上生成的 etag 值保持一致。這樣子 inode 就排除了

以上幾個條件是理論上的成立條件,那在真正實踐中,應該如何處理?

我們來看一下 nginx 中是如何做的

nginx 中 ETag 的生成

我翻閱了 nginx 的源代碼,并翻譯成偽代碼如下:由 last_modified 與 content_length 拼接而成

etag = header.last_modified + header.content_lenth

可見源碼位置,并在以下貼出: ngx_http_core_modules.c

etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"",
r->headers_out.last_modified_time,
r->headers_out.content_length_n)
- etag->value.data;

總結:nginx 中 etag 由響應頭的 Last-Modified 與 Content-Length 表示為十六進制組合而成。

隨手在我的k8s集群里找個 nginx 服務測試一下

$ curl --head 10.97.109.49
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Tue, 10 Dec 2019 06:45:24 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 23 Apr 2019 10:18:21 GMT
Connection: keep-alive
ETag: "5cbee66d-264"
Accept-Ranges: bytes

由 etag 計算 Last-Modified 與 Content-Length,使用 js 計算如下,結果相符

> new Date(parseInt('5cbee66d', 16) * 1000).toJSON()
"2019-04-23T10:18:21.000Z"
> parseInt('264', 16)
612

Nginx 中的 ETag 算法及其不足

協商緩存用來計算資源是否返回 304,我們知道協商緩存有兩種方式

  • Last-Modified/if-Modified-Since
  • ETag/If-None-Match

既然在 nginx 中 ETag 由 Last-Modified 和 Content-Length 組成,那它便算是一個加強版的 Last-Modified 了,那加強在什么地方呢?

Last-Modified 是由一個 unix timestamp 表示,則意味著它只能作用于秒級的改變,而 nginx 中的 ETag 添加了文件大小的附加條件

那下一個問題:如果 http 響應頭中 ETag 值改變了,是否意味著文件內容一定已經更改

答案:不能。

因此使用 nginx 計算 304 有一定局限性:在 1s 內修改了文件并且保持文件大小不變。但這種情況出現的概率極低就是了,因此在正常情況下可以容忍一個不太完美但是高效的算法。

文章出自:??前端餐廳??,如有轉載本文請聯系前端餐廳ReTech今日頭條號。

github:https://github.com/zuopf769

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-07-23 15:55:31

HTTPETag前端

2021-05-26 05:18:51

HTTP ETag Entity Tag

2017-02-08 14:29:04

2021-07-27 14:50:15

axiosHTTP前端

2019-12-13 09:14:35

HTTP2協議

2019-07-02 08:24:07

HTTPHTTPSTCP

2019-04-08 15:11:12

HTTP協議Web

2019-01-27 14:37:47

數據HTTP服務

2015-07-09 10:32:23

Windows Ser云計算應用架構

2010-05-07 12:20:38

負載均衡etag

2023-09-19 22:41:30

控制器HTTP

2009-06-04 10:41:52

Struts工作原理

2022-07-03 16:26:43

比特幣貨幣加密貨幣

2015-09-15 15:20:35

2011-10-14 09:23:14

2024-05-16 07:55:54

NettyRedisRESP協議

2021-01-18 05:13:04

TomcatHttp

2024-09-30 08:43:33

HttpgolangTimeout

2023-11-08 09:49:19

Java實踐

2020-07-02 10:09:34

IT團隊預測客戶服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩一区二区三免费 | 国产精品电影在线观看 | 久久亚洲一区二区三区四区 | 欧美一级久久精品 | 天天色天天 | 久久久精品网站 | 久久精品视频网站 | 欧美一级二级在线观看 | 国产精品久久久久久一区二区三区 | 日韩国产精品一区二区三区 | 国产精品揄拍一区二区 | 精品欧美一区二区在线观看欧美熟 | 九九热免费在线观看 | 少妇精品亚洲一区二区成人 | 久草精品在线 | 九九久久在线看 | 免费一区 | 亚洲成人在线免费 | 国产精品一区二区av | 日韩精品一区在线观看 | 欧美福利视频一区 | 四虎午夜剧场 | 国产aa| 亚洲一区二区三区四区五区中文 | 日韩欧美在线视频播放 | 亚洲一区中文字幕 | 黄视频免费| 欧美欧美欧美 | 免费一级黄色电影 | 亚洲免费精品一区 | 国产高清自拍视频在线观看 | 亚洲综合大片69999 | 18gay男同69亚洲网站 | 区一区二在线观看 | 日韩美女在线看免费观看 | 精品国产伦一区二区三区观看体验 | 亚洲区一区二 | 国产精品一区二区久久久久 | 久99久视频 | 精品区一区二区 | 成人一区av偷拍 |