精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談瀏覽器緩存機制

開發 前端
緩存一直是前端優化的主戰場, 利用好緩存就成功了一半. 本篇從http請求和響應的頭域入手, 讓你對瀏覽器緩存有個整體的概念. 最終你會發現強緩存, 協商緩存 和 啟發式緩存是如此的簡單.

緩存一直是前端優化的主戰場, 利用好緩存就成功了一半. 本篇從http請求和響應的頭域入手, 讓你對瀏覽器緩存有個整體的概念. 最終你會發現強緩存, 協商緩存 和 啟發式緩存是如此的簡單.

導讀

我不知道拖延癥是有多嚴重, 反正去年3月開的題, 直到今年4月才開始寫.(請盡情吐槽吧)

瀏覽器對于請求資源, 擁有一系列成熟的緩存策略. 按照發生的時間順序分別為存儲策略, 過期策略, 協商策略, 其中存儲策略在收到響應后應用, 過期策略, 協商策略在發送請求前應用. 流程圖如下所示. 

流程圖 

廢話不多說, 我們先來看兩張表格.

1.http header中與緩存有關的key。

key 描述 存儲策略 過期策略 協商策略
Cache-Control 指定緩存機制,覆蓋其它設置  
Pragma http1.0字段,指定緩存機制    
Expires http1.0字段,指定緩存的過期時間    
Last-Modified 資源***一次的修改時間    
ETag 唯一標識請求資源的字符串    

2.緩存協商策略用于重新驗證緩存資源是否有效, 有關的key如下

key 描述
If-Modified-Since 緩存校驗字段, 值為資源***一次的修改時間, 即上次收到的Last-Modified值
If-Unmodified-Since 同上, 處理方式與之相反
If-Match 緩存校驗字段, 值為唯一標識請求資源的字符串, 即上次收到的ETag值
If-None-Match 同上, 處理方式與之相反

下面我們來看下各個頭域(key)的作用.

Cache-Control

瀏覽器緩存里, Cache-Control是金字塔***的規則, 它藐視一切其他設置, 只要其他設置與其抵觸, 一律覆蓋之.

不僅如此, 它還是一個復合規則, 包含多種值, 橫跨 存儲策略, 過期策略 兩種, 同時在請求頭和響應頭都可設置.

語法為: “Cache-Control : cache-directive”. 

 

 

 

假設所請求資源于4月5日緩存, 且在4月12日過期.

當max-age 與 max-stale 和 min-fresh 同時使用時, 它們的設置相互之間獨立生效, 最為保守的緩存策略總是有效. 這意味著, 如果max-age=10 days, max-stale=2 days, min-fresh=3 days, 那么:

  • 根據max-age的設置, 覆蓋原緩存周期, 緩存資源將在4月15日失效(5+10=15);
  • 根據max-stale的設置, 緩存過期后兩天依然有效, 此時響應將返回110(Response is stale)狀態碼, 緩存資源將在4月14日失效(12+2=14);
  • 根據min-fresh的設置, 至少要留有3天的新鮮期, 緩存資源將在4月9日失效(12-3=9);

由于客戶端總是采用最保守的緩存策略, 因此, 4月9日后, 對于該資源的請求將重新向服務器發起驗證.

Pragma

http1.0字段, 通常設置為Pragma:no-cache, 作用同Cache-Control:no-cache. 當一個no-cache請求發送給一個不遵循HTTP/1.1的服務器時, 客戶端應該包含pragma指令. 為此, 勾選☑ 上disable cache時, 瀏覽器自動帶上了pragma字段. 如下: 

 

 

 

Expires

  1. Expires:Wed, 05 Apr 2017 00:55:35 GMT 

即到期時間, 以服務器時間為參考系, 其優先級比 Cache-Control:max-age 低, 兩者同時出現在響應頭時, Expires將被后者覆蓋. 如果Expires, Cache-Control: max-age, 或 Cache-Control:s-maxage 都沒有在響應頭中出現, 并且也沒有其它緩存的設置, 那么瀏覽器默認會采用一個啟發式的算法, 通常會取響應頭的Date_value - Last-Modified_value值的10%作為緩存時間.

如下資源便采取了啟發式緩存算法. 

 

 

 

其緩存時間為 (Date_value - Last-Modified_value) * 10%, 計算如下:

  1. const Date_value = new Date('Thu, 06 Apr 2017 01:30:56 GMT').getTime(); 
  2.  
  3. const LastModified_value = new Date('Thu, 01 Dec 2016 06:23:23 GMT').getTime(); 
  4.  
  5. const cacheTime = (Date_value - LastModified_value) / 10; 
  6.  
  7. const Expires_timestamp = Date_value + cacheTime; 
  8.  
  9. const Expires_value = new Date(Expires_timestamp); 
  10.  
  11. console.log('Expires:', Expires_value); // Expires: Tue Apr 18 2017 23:25:41 GMT+0800 (CST)  

可見該資源將于2017年4月18日23點25分41秒過期, 嘗試以下兩步進行驗證:

1) 試著把本地時間修改為2017年4月18日23點25分40秒, 迅速刷新頁面, 發現強緩存依然有效(依舊是200 OK (from disk cache)).

2) 然后又修改本地時間為2017年4月18日23點26分40秒(即往后撥1分鐘), 刷新頁面, 發現緩存已過期, 此時瀏覽器重新向服務器發起了驗證, 且***了304協商緩存, 如下所示. 

 

 

 

3) 將本地時間恢復正常(即 2017-04-06 09:54:19). 刷新頁面, 發現Date依然是4月18日, 如下所示. 

 

 

從⚠ Provisional headers are shown 和Date字段可以看出來, 瀏覽器并未發出請求, 緩存依然有效, 只不過此時Status Code顯示為200 OK. (甚至我還專門打開了charles, 也沒有發現該資源的任何請求, 可見這個200 OK多少有些誤導人的意味)

可見, 啟發式緩存算法采用的緩存時間可長可短, 因此對于常規資源, 建議明確設置緩存時間(如指定max-age 或 expires).

ETag

  1. ETag:"fcb82312d92970bdf0d18a4eca08ebc7efede4fe" 

實體標簽, 服務器資源的唯一標識符, 瀏覽器可以根據ETag值緩存數據, 節省帶寬. 如果資源已經改變, etag可以幫助防止同步更新資源的相互覆蓋. ETag 優先級比 Last-Modified 高.

If-Match

語法: If-Match: ETag_value 或者 If-Match: ETag_value, ETag_value, …

緩存校驗字段, 其值為上次收到的一個或多個etag 值. 常用于判斷條件是否滿足, 如下兩種場景:

  • 對于 GET 或 HEAD 請求, 結合 Range 頭字段, 它可以保證新范圍的請求和前一個來自相同的源, 如果不匹配, 服務器將返回一個416(Range Not Satisfiable)狀態碼的響應.
  • 對于 PUT 或者其他不安全的請求, If-Match 可用于阻止錯誤的更新操作, 如果不匹配, 服務器將返回一個412(Precondition Failed)狀態碼的響應.

If-None-Match

語法: If-None-Match: ETag_value 或者 If-None-Match: ETag_value, ETag_value, …

緩存校驗字段, 結合ETag字段, 常用于判斷緩存資源是否有效, 優先級比If-Modified-Since高.

  • 對于 GET 或 HEAD 請求, 如果其etags列表均不匹配, 服務器將返回200狀態碼的響應, 反之, 將返回304(Not Modified)狀態碼的響應. 無論是200還是304響應, 都至少返回 Cache-Control, Content-Location, Date, ETag, Expires, and Vary 中之一的字段.
  • 對于其他更新服務器資源的請求, 如果其etags列表匹配, 服務器將執行更新, 反之, 將返回412(Precondition Failed)狀態碼的響應.

Last-Modified

語法: Last-Modified: 星期,日期 月份 年份 時:分:秒 GMT

  1. Last-Modified: Tue, 04 Apr 2017 10:01:15 GMT 

用于標記請求資源的***一次修改時間, 格式為GMT(格林尼治標準時間). 如可用 new Date().toGMTString()獲取當前GMT時間. Last-Modified 是 ETag 的fallback機制, 優先級比 ETag 低, 且只能精確到秒, 因此不太適合短時間內頻繁改動的資源. 不僅如此, 服務器端的靜態資源, 通常需要編譯打包, 可能出現資源內容沒有改變, 而Last-Modified卻改變的情況.

If-Modified-Since

語法同上, 如:

  1. If-Modified-Since: Tue, 04 Apr 2017 10:12:27 GMT 

緩存校驗字段, 其值為上次響應頭的Last-Modified值, 若與請求資源當前的Last-Modified值相同, 那么將返回304狀態碼的響應, 反之, 將返回200狀態碼響應.

If-Unmodified-Since

緩存校驗字段, 語法同上. 表示資源未修改則正常執行更新, 否則返回412(Precondition Failed)狀態碼的響應. 常用于如下兩種場景:

  • 不安全的請求, 比如說使用post請求更新wiki文檔, 文檔未修改時才執行更新.
  • 與 If-Range 字段同時使用時, 可以用來保證新的片段請求來自一個未修改的文檔.

強緩存

一旦資源***強緩存, 瀏覽器便不會向服務器發送請求, 而是直接讀取緩存. Chrome下的現象是 200 OK (from disk cache) 或者 200 OK (from memory cache). 如下: 

 

 

   

對于常規請求, 只要存在該資源的緩存, 且Cache-Control:max-age 或者expires沒有過期, 那么就能***強緩存.

協商緩存

緩存過期后, 繼續請求該資源, 對于現代瀏覽器, 擁有如下兩種做法:

  • 根據上次響應中的ETag_value, 自動往request header中添加If-None-Match字段. 服務器收到請求后, 拿If-None-Match字段的值與資源的ETag值進行比較, 若相同, 則***協商緩存, 返回304響應.
  • 根據上次響應中的Last-Modified_value, 自動往request header中添加If-Modified-Since字段. 服務器收到請求后, 拿If-Modified-Since字段的值與資源的Last-Modified值進行比較, 若相同, 則***協商緩存, 返回304響應.

以上, ETag優先級比Last-Modified高, 同時存在時, 前者覆蓋后者. 下面通過實例來理解下強緩存和協商緩存.

如下忽略***訪問, 第二次通過 If-Modified-Since ***了304協商緩存. 

 

 

 

協商緩存的響應結果, 不僅驗證了資源的有效性, 同時還更新了瀏覽器緩存. 主要更新內容如下:

  1. Age:0 
  2.  
  3. Cache-Control:max-age=600 
  4.  
  5. Date: Wed, 05 Apr 2017 13:09:36 GMT 
  6.  
  7. Expires:Wed, 05 Apr 2017 00:55:35 GMT  

Age:0 表示***了代理服務器的緩存, age值為0表示代理服務器剛剛刷新了一次緩存.

Cache-Control:max-age=600 覆蓋 Expires 字段, 表示從Date_value, 即 Wed, 0***pr 2017 13:09:36 GMT 起, 10分鐘之后緩存過期. 因此10分鐘之內訪問, 將會***強緩存, 如下所示: 

 

 

當然, 除了上述與緩存直接相關的字段外, http header中還包括如下間接相關的字段.

Age

出現此字段, 表示***代理服務器的緩存. 它指的是代理服務器對于請求資源的已緩存時間, 單位為秒. 如下:

  1. Age:2383321 
  2.  
  3. Date:Wed, 08 Mar 2017 16:12:42 GMT  

以上指的是, 代理服務器在2017年3月8日16:12:42時向源服務器發起了對該資源的請求, 目前已緩存了該資源2383321秒.

Date

指的是響應生成的時間. 請求經過代理服務器時, 返回的Date未必是***的, 通常這個時候, 代理服務器將增加一個Age字段告知該資源已緩存了多久.

Vary

對于服務器而言, 資源文件可能不止一個版本, 比如說壓縮和未壓縮, 針對不同的客戶端, 通常需要返回不同的資源版本. 比如說老式的瀏覽器可能不支持解壓縮, 這個時候, 就需要返回一個未壓縮的版本; 對于新的瀏覽器, 支持壓縮, 返回一個壓縮的版本, 有利于節省帶寬, 提升體驗. 那么怎么區分這個版本呢, 這個時候就需要Vary了.

服務器通過指定Vary: Accept-Encoding, 告知代理服務器, 對于這個資源, 需要緩存兩個版本: 壓縮和未壓縮. 這樣老式瀏覽器和新的瀏覽器, 通過代理, 就分別拿到了未壓縮和壓縮版本的資源, 避免了都拿同一個資源的尷尬.

  1. Vary:Accept-Encoding,User-Agent 

如上設置, 代理服務器將針對是否壓縮和瀏覽器類型兩個維度去緩存資源. 如此一來, 同一個url, 就能針對PC和Mobile返回不同的緩存內容.

怎么讓瀏覽器不緩存靜態資源

實際上, 工作中很多場景都需要避免瀏覽器緩存, 除了瀏覽器隱私模式, 請求時想要禁用緩存, 還可以設置請求頭: Cache-Control: no-cache, no-store, must-revalidate .

當然, 還有一種常用做法: 即給請求的資源增加一個版本號, 如下:

  1. <link rel="stylesheet" type="text/css" href="../css/style.css?version=1.8.9"/> 

這樣做的好處就是你可以自由控制什么時候加載***的資源.

不僅如此, HTML也可以禁用緩存, 即在頁面的

節點中加入標簽, 代碼如下:

  1. <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"/> 

上述雖能禁用緩存, 但只有部分瀏覽器支持, 而且由于代理不解析HTML文檔, 故代理服務器也不支持這種方式.

IE8的異常表現

實際上, 上述緩存有關的規律, 并非所有瀏覽器都完全遵循. 比如說IE8.

資源緩存是否有效相關.

瀏覽器 前提 操作 表現 正常表現
IE8 資源緩存有效 新開一個窗口加載網頁 重新發送請求(返回200) 展示緩存的頁面
IE8 資源緩存失效 原瀏覽器窗口中單擊 Enter 按鈕 展示緩存的頁面 重新發送請求(返回200)

Last-Modified / E-Tag 相關.

瀏覽器 前提 操作 表現 正常表現
IE8 資源內容沒有修改 新開一個窗口加載網頁 瀏覽器重新發送請求(返回200) 重新發送請求(返回304)
IE8 資源內容已修改 原瀏覽器窗口中單擊 Enter 按鈕 瀏覽器展示緩存的頁面 重新發送請求(返回200)

參考文章

  • Cache Policy Interaction—Maximum Age and Maximum Staleness
  • HTTP/1.1: Header Field Definitions
  • http – What’s the difference between Cache-Control: max-age=0 and no-cache? – Stack Overflow
  • App 緩存方案:Http 緩存 · baitouwei
  • Cache-Control – HTTP | MDN
  • 徹底弄懂 Http 緩存機制 – 基于緩存策略三要素分解法 
責任編輯:龐桂玉 來源: 前端大全
相關推薦

2017-05-15 13:40:20

瀏覽器http緩存機制

2018-08-07 10:44:50

緩存技術瀏覽器

2020-03-11 20:42:34

瀏覽器緩存機制

2021-07-22 09:55:28

瀏覽器前端緩存

2016-01-05 12:54:52

瀏覽器瀏覽器端緩存

2017-09-28 12:03:40

前端

2017-05-19 08:05:08

瀏覽器緩存HTTP

2011-06-10 16:44:17

Qt 瀏覽器

2009-06-22 14:06:00

java瀏覽器

2017-05-02 09:25:13

瀏覽器指紋追蹤虛擬化

2019-01-03 13:09:58

瀏覽器緩存原理

2020-07-16 08:04:21

瀏覽器緩存策略

2021-06-01 09:12:47

前端瀏覽器緩存

2011-05-06 09:36:16

動態頁面

2021-08-02 13:05:49

瀏覽器HTTP前端

2020-11-30 07:02:43

瀏覽器緩存機制

2011-08-29 14:27:33

QTWebkit瀏覽器

2013-07-08 14:45:52

2020-12-29 09:56:29

瀏覽器緩存HTTP

2020-10-29 11:04:28

緩存瀏覽器LocalStorag
點贊
收藏

51CTO技術棧公眾號

国产精品无码电影| 亚洲精品国产精品国自产| 久久久久久久极品内射| 57pao国产一区二区| 亚洲图片欧美一区| 久久精品丝袜高跟鞋| 一区二区三区免费在线| 欧美国产日本| 亚洲色图色老头| 免费黄频在线观看| 亚洲精品福利电影| 亚洲人成精品久久久久| 蜜桃视频在线观看成人| 一区二区的视频| 一区二区日韩免费看| 最近2019免费中文字幕视频三| 国产伦理在线观看| 欧美日韩女优| 亚洲va韩国va欧美va| 亚洲一区二区三区四区中文| 黄色一级大片在线免费看国产| 天堂午夜影视日韩欧美一区二区| 美女福利视频一区| 国产精品20p| 国产调教精品| 欧美一级夜夜爽| 亚洲精品视频导航| 欧美日韩国产观看视频| 亚洲精品v日韩精品| 日韩欧美在线电影| 天堂v在线观看| 国产精品一区二区91| 国产精品盗摄久久久| 精品美女久久久久| 国产一区视频在线观看免费| 精品激情国产视频| 国产传媒在线看| 久久a爱视频| 欧美一区二区三区思思人| 久草在在线视频| 国产福利视频在线播放| 日韩一区二区三区不卡| 久久成人综合网| 国产精品亚洲综合天堂夜夜| 国产综合精品视频| 国产日韩综合| 欧美亚洲国产另类| 国产专区第一页| 99国内精品| 97婷婷涩涩精品一区| 国产一级特黄视频| 亚洲图片在线| 国内精品久久久久| 日韩欧美亚洲一区二区三区| 狠狠噜噜久久| 久久久久久久久久久人体| 黄色一级视频免费观看| 激情久久婷婷| 久久久久久尹人网香蕉| 麻豆影视在线播放| 亚洲二区免费| 欧美伊久线香蕉线新在线| 国产超碰人人爽人人做人人爱| 在线成人www免费观看视频| 高清欧美一区二区三区| 日韩av免费网址| 亚洲一区二区网站| 国产精品久久久久久久久借妻| 亚洲精品毛片一区二区三区| 日本最新不卡在线| 成人黄色免费网站在线观看| 国产国语亲子伦亲子| 国产aⅴ综合色| 精品久久久久久中文字幕动漫| 五月天婷婷在线播放| 久久久久久久久99精品| 亚洲国产一区二区在线| av毛片在线| 亚洲福利一二三区| 精品视频一区二区在线| 成人在线免费av| 日韩欧美不卡一区| 37p粉嫩大胆色噜噜噜| 精品久久久中文字幕| 久久精品视频免费播放| 欧美极品美女视频网站在线观看免费 | 国产精品美女www爽爽爽| 亚洲精品影院| 牛牛电影国产一区二区| 精品久久中文字幕久久av| 日本一极黄色片| 懂色av色香蕉一区二区蜜桃| 日韩免费在线观看| 中文字幕xxx| 久久国产电影| 久久久久日韩精品久久久男男| 天天操夜夜操视频| 国内外成人在线| 久久精品一二三区| 麻豆av在线免费看| 懂色av影视一区二区三区| 日韩av在线中文| 牛牛精品成人免费视频| www.精品av.com| 国产精品第9页| 精品一区二区三区在线观看| 狠狠色狠狠色综合人人| 日本福利专区在线观看| 精品久久久久久久久久久| 欧美视频国产视频| 小说区图片区色综合区| 美日韩精品免费视频| 亚洲婷婷综合网| 国产精品资源网| 亚州欧美一区三区三区在线| mm视频在线视频| 69堂成人精品免费视频| 亚洲av综合一区二区| 国产在线不卡| 91久久在线观看| av片在线看| 日韩欧美精品在线观看| 国产精九九网站漫画| 久久久综合色| 国产精品白嫩初高中害羞小美女 | 中文字幕色呦呦| 99久久久国产精品免费调教网站| 亚洲第一福利在线观看| 国产原创中文在线观看| 免费在线观看h片| 国产精品免费看| 国产精品视频免费一区二区三区| 毛片在线视频| 欧美日韩一区二区在线视频| 国产免费看av| 中国女人久久久| 国产欧美丝袜| www555久久| 日韩片之四级片| 在线免费观看亚洲视频| 久久99精品国产91久久来源| 先锋影音一区二区三区| 成人做爰视频www网站小优视频| 亚洲精品美女在线观看| 日产亚洲一区二区三区| 不卡视频免费播放| 黄色国产一级视频| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美日韩第一视频| 精品国产一级片| 亚洲一区在线观看视频| 亚洲精品鲁一鲁一区二区三区 | 中文字幕一区二区三区波野结| 久久伊99综合婷婷久久伊| 欧美日本视频在线观看| 天美av一区二区三区久久| 97久久久免费福利网址| 无码国产伦一区二区三区视频| 亚洲444eee在线观看| 少妇被狂c下部羞羞漫画| 日韩视频一区二区三区在线播放免费观看| 国产精品美女黄网| 美女视频在线免费| 亚洲欧美制服第一页| 日本一本在线观看| 中文字幕亚洲欧美在线不卡| 日本一二区免费| 欧美黄色aaaa| 国产日韩精品久久| 欧美男女交配| 久久精品久久久久久| 精品久久在线观看| 精品国产91久久久久久| 女人又爽又黄免费女仆| 久久国产三级精品| 青草网在线观看| 最新国产精品视频| 国产日韩欧美影视| av观看在线| 亚洲精品日韩丝袜精品| 这里只有精品999| 亚洲精品福利视频网站| 日本免费福利视频| 麻豆91小视频| 日韩精品免费电影| 波多野结衣之无限发射| 亚洲伊人春色| 91久久在线观看| 女厕盗摄一区二区三区| 色999日韩欧美国产| 丰满人妻妇伦又伦精品国产| 一本色道久久综合亚洲aⅴ蜜桃| 少妇视频一区二区| 成人午夜在线免费| 爱情岛论坛亚洲首页入口章节| 欧美淫片网站| 日本一区二区免费看| 国产精品日韩精品在线播放| 欧美有码在线观看视频| 超碰人人在线| 亚洲欧美日韩精品久久| av手机免费看| 欧美在线制服丝袜| 国产中文字字幕乱码无限| 亚洲国产精品精华液ab| www.黄色网| 久久久xxx| 色综合天天在线| 中文字幕剧情在线观看| 国产偷自视频区视频一区二区| 一本色道久久99精品综合| 牲欧美videos精品| 亚洲最大av在线| 国产情侣一区二区三区| 91av视频在线播放| 色爱综合区网| 深夜精品寂寞黄网站在线观看| 蜜桃91麻豆精品一二三区| 欧美乱妇一区二区三区不卡视频| 国产 日韩 欧美 在线| 亚洲永久免费av| 天天爽天天爽天天爽| 久久精品亚洲麻豆av一区二区 | 国产在成人精品线拍偷自揄拍| 精品露脸国产偷人在视频| 九九九在线视频| 综合在线观看色| 男人的天堂av网| 久久嫩草精品久久久精品| 亚洲国产综合视频| 国产91在线看| 性生活在线视频| 国产一区二区导航在线播放| 黄色小视频免费网站| 青青草国产精品亚洲专区无| 国产麻花豆剧传媒精品mv在线| 亚洲大片av| 精品无码一区二区三区在线| 国语精品一区| 国产一级做a爰片久久毛片男| 你懂的国产精品| 99中文字幕在线观看| 亚洲成人免费| 最新不卡av| 亚洲精品午夜av福利久久蜜桃| 亚洲国产婷婷香蕉久久久久久99| 波多野结衣的一区二区三区 | 一本色道久久综合精品竹菊| 日韩免费一级片| 午夜精品久久久久久不卡8050| 久久久久99精品| 香蕉加勒比综合久久| 日韩成人av毛片| 日韩欧美在线视频观看| 精品成人无码久久久久久| 欧美在线你懂得| 91丨porny丨在线中文| 678五月天丁香亚洲综合网| 99国产在线播放| 精品日韩欧美在线| 污视频网站免费观看| 亚洲日韩中文字幕| 调教视频免费在线观看| 久久国产精品网站| free性护士videos欧美| 欧美重口另类videos人妖| 性欧美hd调教| 91视频88av| 久久99精品国产自在现线| 欧美三级网色| 婷婷伊人综合| www.射射射| 日韩高清在线一区| 国产大片一区二区三区| 丁香激情综合国产| 蜜桃传媒一区二区亚洲av| 中文字幕一区免费在线观看| 91成人福利视频| 色综合久久久久综合体桃花网| 中国a一片一级一片| 欧美一级片在线看| 亚州视频一区二区三区| 最近2019中文字幕一页二页 | 亚洲午夜精品一区二区国产| 成年人深夜视频| 久色成人在线| 三级黄色片播放| 91免费看视频| 天海翼在线视频| 欧美性极品xxxx娇小| 国产一区二区在线不卡| 日韩国产欧美区| 麻豆系列在线观看| 欧美一级在线亚洲天堂| 9999精品免费视频| 麻豆av一区二区| 欧美一区二区三区久久精品茉莉花| 欧美日韩成人免费视频| 久久99精品久久久| 欧美日韩高清丝袜| 一区二区三区四区高清精品免费观看 | 日产精品久久久久久久性色| 色噜噜亚洲精品中文字幕| 成年人在线网站| 91中文字幕在线观看| 精品国产一区二区三区四区| 福利视频免费在线观看| 免费人成网站在线观看欧美高清| 97人妻精品一区二区三区免费| 日本一区二区成人在线| 日韩中文字幕在线观看视频| 日韩欧美国产不卡| 日本中文字幕在线观看| 欧美亚洲视频在线看网址| 日韩精品久久久久久久软件91| 日韩中文不卡| 香蕉久久夜色精品| 视频免费在线观看| 亚洲综合一二区| 99久久久久久久| 最新国产精品拍自在线播放| 中文字幕在线看片| 国产美女精品在线观看| 99国产精品一区二区| 免费男同深夜夜行网站| 26uuu另类欧美亚洲曰本| 国产一级一片免费播放| 欧美一级在线观看| а√资源新版在线天堂| 成人免费网站在线观看| 欧美一区三区| 狠狠热免费视频| 国产视频亚洲色图| 日本久久综合网| 亚洲欧美国产va在线影院| 草草视频在线观看| 国产一级精品aaaaa看| 精品动漫av| 国产51自产区| 亚洲国产精品一区二区www | 香蕉成人在线| 亚洲精品视频一区二区三区| 日本成人中文字幕在线视频| 永久免费成人代码| 欧美中文字幕一区二区三区| 搞黄视频免费在线观看| 国产成人午夜视频网址| 国产精品一区二区三区av麻| 毛葺葺老太做受视频| 国产日韩成人精品| 一区二区视频免费观看| 日韩最新免费不卡| 国产精品视频一区二区三区| 日本在线视频www色| 国产91丝袜在线播放0| 久久久精品视频免费| 日韩av影片在线观看| 欧美成人性网| 亚洲欧洲精品在线观看| 国产在线国偷精品免费看| 久久国产在线视频| 亚洲精品久久视频| 色是在线视频| 日韩影视精品| 国产精品一区一区| 日韩av一区二区在线播放| 亚洲人成电影网站色xx| www.26天天久久天堂| 乱子伦一区二区| 成人午夜在线免费| 亚洲无码精品一区二区三区| 日韩中文字幕久久| 大桥未久女教师av一区二区| 成人免费毛片网| 国产精品久久久久一区二区三区 | 无码人妻丰满熟妇精品| 日韩一区视频在线| 国产96在线亚洲| 国产av人人夜夜澡人人爽| 亚洲欧美韩国综合色| 日韩大胆视频| 国产在线一区二区三区| 在线成人h网| 大吊一区二区三区| 欧美成人aa大片| 蜜桃精品在线| 成人一级生活片| 中文字幕va一区二区三区| 亚洲国产成人精品一区二区三区| 清纯唯美日韩制服另类| 亚洲欧美综合久久久| 日本xxx在线播放| 91精品国产综合久久久久久久久久| www.youjizz.com在线| 亚洲一卡二卡三卡| 99亚偷拍自图区亚洲| 一级片aaaa| 日本一欧美一欧美一亚洲视频| 希岛爱理av一区二区三区| 野花社区视频在线观看|