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

前端靜態資源緩存最優解以及max-age的陷阱

開發 前端
合理的使用緩存可以極大地提高網站的性能優勢,還可以節約帶寬從而降低服務器成本。但是很多站點有只弄對了一半或者一半都沒有,如果是這樣,就完全沒有發揮出緩存的優勢。很大程度上產生會由于靜態資源的競爭關系而導致依賴的靜態資源不同步。

合理的使用緩存可以極大地提高網站的性能優勢,還可以節約帶寬從而降低服務器成本。但是很多站點有只弄對了一半或者一半都沒有,如果是這樣,就完全沒有發揮出緩存的優勢。很大程度上產生會由于靜態資源的競爭關系而導致依賴的靜態資源不同步。

以下為兩個***靜態資源緩存實踐的例子。

一、資源內容不變 + 設置長時間max-age

 

  1. // 設置緩存時間為1年  
  2. Cache-Control: max-age=31536000 

 

  • 資源的內容不會更改,所以。。。
  • 瀏覽器/CDN可以緩存一年時間,在這期間資源不會出現問題。
  • 可以在不請求服務器的請情況下,一年內都使用緩存內容。

***天

瀏覽器請求了/index-v1.js、/base-v1.css以及/dog-v1.png這三個資源。

 

第二天

這次瀏覽器請求了/index-v2.js、/base-v2.css以及/dog-v1.png這三個資源。

此處注意:index.js和base.css與***天請求的版本號不同。

過了一年

在一年的時間里,瀏覽器再也沒有請求過/index-v1.js、/base-v1.css以及/dog-v1.png這三個資源,瀏覽器緩存就會把它們給刪掉。

 

所以在這個例子中,為了讓緩存發揮***效率,你要做的并不是更改文件的內容,而是應該更改資源的URL:

 

  1. <script src="/index-v3.js"></script>  
  2. <link rel="stylesheet" href="/base-v3.css" 
  3. <img src="/dog-v3.jpg" alt="…"

 

每一個靜態資源URL都應該跟隨其內容的修改而改變。例如示例index-v1.js中的v1,你對它的命名不需要有任何限制。它可以是一個版本號,***修改的日期,或者根據內容計算出來的散列值。

絕大多數服務器端的框架都提供了工具來實現這一點,同樣的在nodejs中有很多優秀的庫來實現這個功能,比如gulp-rev、webpack、fis3。

二、對于經常修改的內容,始終需要進行服務器認證

 

  1. Cache-Control: no-cache 

該URL下資源的內容可能經常修改,所以。。。

沒有服務器的確認,任何本地緩存的版本內容都是不可信的。

***天

第二天

 

注意:

no-cache并不意味著不緩存。它的意思是在使用緩存資源之前,它必須經過服務器的檢查(revalidate也可以實現這個功能)。

no-store才是告訴瀏覽器不要緩存它。此外,must-revalidate并不意味著必須重新認證,它的前提是資源還在max-age的緩存期內,否則必須重新認證。

在此模式下 ,你也可以將ETag(你選擇的版本ID)或者Last-modified日期添加到響應首部中??蛻舳讼麓潍@取資源時,他會分別通過If-None-Match(與ETage對應)和If-Modified-Since(與Last-Mofied對應)兩個請求首部將值發送給服務器。如果服務器發現兩次值都是對等的,就是返回一個HTTP 304。

如果沒有發送ETag和Last-Modified,那么服務器將始終返回完整的資源內容。

但是這種方法有個缺點,就是它每次都會去服務器做一次驗證,涉及到了網絡提取,所以它不如***個例子那樣可以完全繞過網絡。

三、在經常修改內容的靜態資源上使用max-age是個錯誤的選擇

這種情況并不少見,例如它就實實在在地發生在了github的頁面上。

想象一下 :

  • /article/
  • /styles.css
  • /script.js

它們全部使用的是:

 

  1. // 十分鐘內不需要重新認證,超過十分鐘就需要重新認證  
  2. Cache-Control: must-revalidate, max-age=600 

 

  • 隨著內容的修改,URLs發生改變
  • 在十分鐘內,瀏覽器將會一直使用緩存住的內容,而不會去服務器請求***的資源 。
  • 超過十分鐘,在可用的前提下使用If-Modified-Since和If-None-Match重新進行服務器認證。

***次請求:

 

六七分鐘過后:

 

最終:

 

[[225520]]

這種情況在測試中經常出現。但是想象一下,在線上環境你永遠不知道瀏覽器前面坐著的是什么樣的人,他很有可能無意中胡亂地用鼠標點點點,就打亂了瀏覽器的靜態資源緩存機制,導致頁面發生了錯亂,而且真的很難追蹤。

在上面的例子中,服務器實際上已經更新了HTML、CSS和JS,但是頁面***使用的是緩存中舊的HTML和JS,以及剛從服務器下載的***的CSS。多個靜態資源版本之間不匹配的問題隨之出現。

通常,當我們對HTML進行重大修改時,我們可能會更改CSS文件來適配新的DOM結構,并且更新JS來配置樣式和DOM的修改。這些資源都是相互依賴的,但攜帶緩存信息的HTTP首部可不管你這些有的沒的。最終,用戶很有可能會得到一個/兩個靜態資源新版本,而其他資源都是舊版本。

max-age是相對于服務器響應時間的,所以如果所有上述資源都在同一時間請求,即便它們都被設置為了相同的max-age時長,它們仍然存在很小的競爭可能性(畢竟有的資源先返回有的資源后返回)。如果你的某些頁面不包含JS,或者包含不同的CSS,它們的緩存失效時間就有可能會不同步。更惡心的是,瀏覽器始終會從緩存中刪除和獲取資源,它并不知道這些資源中哪個是相互依賴的,只要過了緩存時間它就會毫不猶豫地刪掉一個,并不會刪掉這個過期文件所依賴的其他資源。把上面的種種可能性加在一起,就會大概率出現靜態資源版本不匹配的問題。

不過還好,我們還有法子來解決這個問題:

強制刷新瀏覽器或者清除緩存

在強制刷新瀏覽器或者清除緩存后,請求的頁面以及頁面內的所有資源會忽略之前的max-age,去服務器做重新認證。因此,如果用戶由于max-age出現問題之后,只需要強制刷新或者清緩存就可以修復問題。當然,強迫用戶這樣做只會讓它們降低對你網站的信任度,認為你的網站不靠譜。。。

使用serviceWorker減少這種錯誤的出現幾率

service Worker的執行時機:

 

注冊serviceWorker:

 

  1. if (navigator.serviceWorker) {  
  2.   navigator.serviceWorker.register('/serviceworker.js', {  
  3.     scope: '/'  
  4.   });  

 

執行serviceworker.js:

 

  1. const version = '2'  
  2. self.addEventListener('install', event => {  
  3.   // 由于系統會隨時睡眠SW,所以,為了防止執行中斷,就需要使用 event.waitUntil 進行捕獲  
  4.   event.waitUntil(  
  5.     caches.open(`static-${version}`)  
  6.     .then(cache => cache.addAll(  
  7.         // 不穩定文件或者大文件加載  
  8.         //...  
  9.       ), cache.addAll([  
  10.       // 穩定文件或小文件加載  
  11.       '/styles.css' 
  12.       '/script.js'  
  13.     ]));  
  14.   );  
  15. });  
  16.  
  17. self.addEventListener('activate', event => {  
  18.   // …delete old caches…  
  19. });  
  20.  
  21. self.addEventListener('fetch', event => {  
  22.   event.respondWith(  
  23.     caches.match(event.request)  
  24.     .then(response => response || fetch(event.request))  
  25.   );  
  26. }); 

 

  • 將script和styles緩存起來。
  • 如果有匹配到的緩存就從緩存中獲取,如果沒有就從服務器獲取。

如果我們修改了JS/CSS,只需修改version就可以讓service worker觸發更新。

你也可以在service worker中跳過緩存:

 

  1. self.addEventListener('install', event => {  
  2.     event.waitUntil(  
  3.         caches.open(`static-${version}`)  
  4.         .then(cache => cache.addAll([  
  5.             new Request('/styles.css', {  
  6.                 cache: 'no-cache'  
  7.             }),  
  8.             new Request('/script.js', {  
  9.                 cache: 'no-cache'  
  10.             })  
  11.         ]))  
  12.     );  
  13. }); 

 

不過很不巧的是,cache選項在和safari和opera中都不支持 ,只有firefox和chrome最近才開始支持。但是你可以這樣做:

 

  1. self.addEventListener('install', event => {  
  2.     event.waitUntil(  
  3.         caches.open(`static-${version}`)  
  4.         .then(cache => Promise.all 
  5.             [  
  6.                 '/styles.css' 
  7.                 '/script.js'  
  8.             ].map(url => {  
  9.                 // cache-bust using a random query string  
  10.                 return fetch(`${url}?${Math.random()}`).then(response => {  
  11.                     // fail on 404, 500 etc  
  12.                     if (!response.ok) throw Error('Not ok');  
  13.                     return cache.put(url, response);  
  14.                 })  
  15.             })  
  16.         ))  
  17.     );  
  18. }); 

 

你可以使用上面代碼中的隨機字符串,也可以使用散列值。這有點像在javascript中實現文章剛開始***小節的方法,不過僅僅是在server worker中使用。

四、service worker和HTTP cache也可以很好的共存

通過上個的例子,你可以看到service worker可以很好的處理一些糟糕的緩存情況。但是僅僅是做一些hack處理而已,最重要的是再根源上解決問題。正確的使用緩存不僅可以更好地使用service worker,還可以很好地在那些不支持service worker的瀏覽器(IE/Safari/Opera)上提高網站的性能。除此之外,對你的CDN也是大有益處。

正確的使用緩存,可以大量簡化service worker的代碼:

 

  1. const version = '23' 
  2. self.addEventListener('install', event => {  
  3.     event.waitUntil(  
  4.         caches.open(`static-${version}`)  
  5.         .then(cache => cache.addAll([  
  6.             '/' 
  7.             '/script-v3.js' 
  8.             '/styles-v3.css' 
  9.             '/dog-v3.jpg'  
  10.         ]))  
  11.     );  
  12. }); 

 

所以,我們可以使用第二小節的方法(服務器重新認證)來緩存根HTML頁面。并使用***小節的方法(不同的內容使用不同的URL)來緩存其他資源。每次service worker更新世都會去請求網站的根HTML頁面,其他資源只有在更改URL時才會去下載,從而提高網站的性能。

雖然service worker擅長提高網站的性能,但它并不是一個完整的解決方案。因此要和HTTP cache配合使用才可以顯著地提高性能。

五、max-age和『內容經常修改但是URL不變的靜態資源』搭配使用

在內容經常修改但是URL不變的靜態資源上使用max-age在通常意義上來說不是一個好點子,但事實卻不總是如此。

假如一個頁面的max-age為三分鐘,并且在這個頁面上不需要考慮靜態資源的競爭關系(靜態資源之間存在相互依賴,見第三小節),所以在這個頁面上不存在任何的靜態資源依賴。在這種情況下就可以盡情使用max-age。不過這也意味著網站的修改要再三分鐘之后才可以被看到。

不過要是頁面存在靜態資源競爭關系的話,這種法子不好用了,比如我現在有兩個文章A和B,我現在文章A中添加一個新的章節,然后在文章B中增加了一個指向文章A新增章節的超鏈接。然后我從文章B中訪問這個鏈接,假如文章A的max-age沒有過期,那么我訪問到的文章A里將會發現文章并沒有那個新增的章節。此時只能等max-age過期或者強制刷新瀏覽器,再或者清除緩存了。所以,一定要謹慎使用這種方法。

 

正確使用緩存可以代理巨大的性能收益并且有效節省服務器帶寬。既支持版本號類型的靜態資源緩存方式也支持服務器重新認證(no-cache、304)的方式。如果你覺得自己很勇敢,那么大可混合使用max-age和『內容經常修改但是URL不變的靜態資源』,但是前提你得確定自己的HTML中沒有靜態資源競爭關系。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2009-07-21 11:14:19

max-age設置ASP.NET 2.0

2018-07-10 15:30:42

Go前端更新

2024-03-06 08:25:31

Compose開發界面

2024-04-03 14:26:08

2025-04-25 08:40:00

橋接網絡NAT網絡網絡

2011-05-24 16:58:52

CC++

2023-12-04 09:37:00

C++靜態變量

2022-10-18 18:33:40

云原生數字化轉型

2022-07-28 12:17:36

C語言typedef#define

2025-01-07 00:00:10

2016-02-23 09:23:50

swift陷阱解決方法

2022-09-19 09:19:24

云存儲TCO云服務

2022-12-01 11:40:05

模塊化數據中心

2021-04-13 16:18:30

人工智能強化學習人臉識別

2011-09-06 14:08:22

IIS

2023-10-04 18:24:54

wpf動態資源

2021-07-27 15:56:28

MaxCompute 資源優化

2025-08-27 02:15:00

2018-07-31 10:56:28

2014-07-29 09:16:14

Fragment
點贊
收藏

51CTO技術棧公眾號

福利视频第一区| 国内久久精品| 欧美一区二区三区小说| 蜜桃网站在线观看| 色综合久久网女同蕾丝边| 另类激情亚洲| 久久综合亚洲社区| 久久久亚洲av波多野结衣| 成人国产精品入口免费视频| 一区二区三区免费看视频| 久久av一区二区三区漫画| 羞羞色院91蜜桃| 国内精品嫩模av私拍在线观看| 亚洲欧美在线磁力| 丰满少妇一区二区三区专区| 欧美日韩视频免费观看| 一区二区三区成人在线视频| 日本在线视频不卡| 亚洲男人第一天堂| 成人久久网站| 亚洲在线国产日韩欧美| 精品国产一区二区三区久久狼黑人| 精品国产一二区| 日韩毛片一区| 岛国av一区二区| 自拍偷拍亚洲色图欧美| 邻居大乳一区二区三区| 大尺度一区二区| 成人情趣片在线观看免费| 日韩欧美一级视频| 欧美三区视频| 久久视频这里只有精品| 国产精品20p| 激情av综合| 91精品国产福利| 日本三级黄色网址| 自拍偷自拍亚洲精品被多人伦好爽 | 久久国产精品久久精品| 毛片视频免费播放| 精品一区av| 成人自拍视频在线| 日韩网站免费观看| 亚洲一区二区自偷自拍| 色婷婷综合久久久久久| 亚洲国产精久久久久久| 女人扒开腿免费视频app| 四虎影视成人精品国库在线观看| 在线影院国内精品| 国产第一页视频| 日本蜜桃在线观看视频| 亚洲高清在线精品| 黄色三级中文字幕| heyzo高清在线| 亚洲电影第三页| 成品人视频ww入口| 9999在线视频| 一区二区三区成人在线视频| 成人av在线播放观看| 亚洲小说区图片| 亚洲综合区在线| 免费特级黄色片| av日韩中文| 亚洲一区二区欧美| 中文字幕一精品亚洲无线一区| 成人午夜视频免费看| 亚洲区一区二区| 黄色在线观看av| 国产精品探花在线观看| 日韩成人激情视频| 国产艳俗歌舞表演hd| 秋霞影视一区二区三区| 亚洲欧美日本另类| 久久久久久国产免费a片| 日韩在线高清| 久久91亚洲精品中文字幕| 精品午夜福利视频| 国产麻豆综合| 国产盗摄xxxx视频xxx69| 在线视频欧美亚洲| 国产一区欧美二区| 精品国产一区二区三区四区vr| 色哟哟在线观看| 欧美韩国日本不卡| 免费观看黄色的网站| av观看在线| 午夜精品成人在线| 自拍偷拍21p| 大型av综合网站| 亚洲天堂av图片| 欧美在线视频第一页| 国产欧美激情| 91久久久久久久一区二区| 你懂的网站在线| 亚洲国产精品t66y| bt天堂新版中文在线地址| 日韩av一卡| 欧美天堂一区二区三区| 无码国产精品一区二区高潮| 欧美极品中文字幕| 欧美日韩xxxxx| 亚洲国产精品无码久久久| 国产一区二区三区久久久| 久久久综合亚洲91久久98| 欧美高清视频| 欧美午夜无遮挡| 免费不卡av网站| 欧美精品久久久久久| 欧美精品成人在线| 中文字幕永久在线| av一本久道久久综合久久鬼色| 日本视频一区二区不卡| 色屁屁www国产馆在线观看| 91福利精品视频| 国产精品久久久久久在线观看| 99久久99久久精品国产片桃花| 91精品国产高清久久久久久| 国产高清免费观看| 国产精品麻豆网站| www.国产区| 嫩草国产精品入口| 欧美精品在线第一页| 亚洲国产无线乱码在线观看| 91看片淫黄大片一级在线观看| 亚洲色婷婷久久精品av蜜桃| 成人综合网站| 亚洲色无码播放| 国产毛片aaa| 东方aⅴ免费观看久久av| 伊人久久大香线蕉成人综合网| 日韩大尺度黄色| 亚洲精品美女视频| 国产精品成人av久久| 国产不卡视频一区| 国产av不卡一区二区| xxxxx.日韩| 国产亚洲欧洲高清| 精品国产午夜福利| 久久综合色一综合色88| 欧美一区二区三区爽大粗免费| 亚洲综合网站| 欧美激情videos| 亚洲av无码国产综合专区| 亚洲另类中文字| 两女双腿交缠激烈磨豆腐| 欧美成人激情| 国产在线a不卡| 麻豆视频在线免费观看| 欧美日韩国产精品自在自线| 免费观看a级片| 免费人成精品欧美精品| 四虎一区二区| 91av一区| 久久躁狠狠躁夜夜爽| 国产欧美久久久| 亚洲色图.com| 国产精品91av| 国产日韩视频| 日产国产精品精品a∨| 亚洲综合在线电影| www.xxxx欧美| 午夜免费福利视频| 亚洲成年人影院| 最新在线黄色网址| 首页欧美精品中文字幕| 亚洲看片网站| 日韩视频在线直播| 91国产视频在线| 国产精品秘入口| 欧美精品一二三四| 久久激情免费视频| 2020国产精品自拍| 91福利国产成人精品播放| 91九色精品国产一区二区| 91久久国产自产拍夜夜嗨| 久久www人成免费看片中文| 日韩激情第一页| 成人黄色激情视频| 亚洲另类一区二区| 久久精品女同亚洲女同13| 视频一区视频二区中文| 中文字幕一区二区三区四区五区人| 亚洲精品观看| 欧美最猛黑人xxxx黑人猛叫黄| av男人的天堂在线| 日韩免费性生活视频播放| 亚洲天堂av片| 亚洲人123区| 成年人在线观看av| 天堂资源在线| 天堂中文av在线资源库| 国内外成人在线| 国产精品av免费观看| 日韩母乳在线| 国产在线精品一区免费香蕉 | 播五月开心婷婷综合| 99蜜桃臀久久久欧美精品网站| 91久久夜色精品国产按摩| 成人综合色站| 播放一区二区| 久久久亚洲福利精品午夜| 成人jjav| 亚洲黄一区二区| japanese国产| 欧美在线免费观看亚洲| 久久精品视频国产| 国产精品乱人伦| 日韩中文字幕电影| 国产电影一区在线| 一区二区三区免费播放| 国产日韩一区二区三区在线| 麻豆md0077饥渴少妇| 精品美女久久| 国产一区不卡在线观看| 精品国产一区二| 精品久久免费看| 尤物九九久久国产精品的特点 | 精品久久久久久久久久久久久久久久| 国产精品久久毛片a| 国产精品无码专区| 国内精品在线播放| 亚洲欧美久久久久| 翔田千里一区二区| 国产精品www在线观看| 99成人超碰| 四虎一区二区| 国产九一精品| 久久国产精品久久精品国产| 日韩欧美另类中文字幕| 成人写真视频福利网| 成人精品高清在线视频| 国产成人精品日本亚洲专区61| 99热99re6国产在线播放| 欧美精品免费在线| 黄色免费网站在线观看| 最近中文字幕日韩精品 | 一区二区视频在线免费观看| 精品二区三区线观看| 国产精品手机在线观看| 一级毛片久久久| 欧美成人激情图片网| 在线日本中文字幕| 国产亚洲欧洲高清一区| 国产在线观看免费| 国产丝袜一区二区三区| 性xxxxbbbb| 精品在线观看国产| 视频一区二区在线播放| 激情综合色丁香一区二区| 国产免费人做人爱午夜视频| 妖精视频成人观看www| 日本a在线免费观看| 亚洲国产午夜| 国内自拍在线观看| 国产亚洲毛片在线| 久久无码高潮喷水| 亚洲专区一区| 中文字幕无码不卡免费视频| 香蕉国产精品偷在线观看不卡| 国产97在线 | 亚洲| 国产精品婷婷| 99草草国产熟女视频在线| 日本强好片久久久久久aaa| 在线观看免费成人av| 开心九九激情九九欧美日韩精美视频电影| 9久久婷婷国产综合精品性色 | 草草视频在线免费观看| 日韩欧美网站| 麻豆映画在线观看| 亚洲网站在线| 久久综合久久网| 手机在线成人av| 麻豆专区一区二区三区四区五区| 最新中文字幕2018| 国产原创一区二区三区| 久久久久国产免费| 91视视频在线直接观看在线看网页在线看| 国产精品揄拍100视频| 欧美激情综合五月色丁香小说| 色婷婷粉嫩av| 亚洲高清久久久| 无码人妻丰满熟妇区五十路| 欧美日本不卡视频| 午夜久久久久久久久久| 亚洲欧美中文在线视频| 黄色网址在线免费播放| 国模精品一区二区三区色天香| 成人性生交大片免费观看网站| 国产精选久久久久久| 国内精品国产成人国产三级粉色| 欧美欧美一区二区| 亚洲色图二区| 日日摸日日碰夜夜爽av| 极品美女销魂一区二区三区免费 | 在线观看日本网站| 91精品国产美女浴室洗澡无遮挡| 午夜视频福利在线| 色噜噜狠狠狠综合曰曰曰| 丁香影院在线| 国产综合色香蕉精品| 日本成人a网站| 色香蕉在线观看| 国产亚洲毛片在线| 手机精品视频在线| 久久看人人爽人人| 久草视频免费播放| 欧美性生活久久| 亚洲aⅴ乱码精品成人区| 亚洲天堂精品在线观看| 91欧美视频在线| av欧美精品.com| 一区二区三区影视| 日本乱码高清不卡字幕| 国产成人免费高清视频| 精品国产一级| 亚洲日本无吗高清不卡| 国产精品一卡| 极品人妻一区二区| 亚洲欧洲日本在线| 免费看污视频的网站| 亚洲国产精品va| 在线看一级片| 成人两性免费视频| 教室别恋欧美无删减版| 国产中文字幕免费观看| 国产精品一区二区在线观看不卡| 三级黄色片网站| 51精品视频| 2023国产一二三区日本精品2022| 国产精品久久AV无码| 亚洲天堂成人网| 中文字字幕在线中文乱码| 精品无人区太爽高潮在线播放| 欧美日韩精品区| 中文字幕日韩在线| 欧美视频在线一区| 999av视频| 一道本无吗dⅴd在线播放一区 | 日韩一区二区免费在线电影 | 99国产高清| 日韩在线观看| 色免费在线视频| 国产女主播在线一区二区| 国产一级aa大片毛片| 福利片一区二区| 狠狠色噜噜狠狠狠狠97| 久久国产乱子伦精品| 亚洲免费福利视频| 91av亚洲| 欧美日韩免费高清| 国产精品三级| 欧美日韩高清在线播放| 天天好比中文综合网| 99re久久| 欧美日韩精品免费观看视一区二区| 亚洲看片免费| 性久久久久久久久久久| av中文字幕一区二区| 日韩一级欧美一级| 大吊一区二区三区| 欧美在线你懂得| 免费网站成人| 91免费版黄色| 精品动漫3d一区二区三区免费版 | 国产在线播精品第三| 中文字幕另类日韩欧美亚洲嫩草| 欧美成人video| 日韩大片免费观看| 亚洲第一导航| 丁香花在线影院| 成人美女视频在线观看18| 国产精品27p| 麻豆精品蜜桃| 日韩中文字幕一区二区| 久久99久久久久| 韩国三级丰满少妇高潮| 大桥未久在线视频| 国产精品免费网站在线观看| 黄色精品视频在线观看| 制服丝袜亚洲播放| 污片在线免费观看| 国产综合av一区二区三区| 免费在线亚洲| 欧美性生给视频| 精品久久久久久最新网址| 自拍在线观看| 婷婷视频在线播放| 99精品一区二区三区| 日本高清不卡码| 国产精品videossex久久发布| 日韩经典一区二区三区| 激情五月色婷婷| 中文字幕亚洲精品| 欧美经典一区| 免费日韩视频在线观看| 中文字幕一区在线观看视频| 成人午夜福利视频| 国产精品久久久久久av下载红粉 | 久久成人免费| 欧美大尺度激情区在线播放| 国产一级片免费看|