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

掌握 HTTP 緩存——從請求到響應(yīng)過程的一切(上)

開發(fā) 開發(fā)工具
本文由淺入深地介紹了HTTP響應(yīng)頭中哪些標(biāo)簽和緩存有關(guān),以及CDN緩存是如何起作用的。

[[186415]]

CDN類的網(wǎng)站曾經(jīng)一度雄踞 Alexa 域名排行的前 100。以前一些小網(wǎng)站不需要使用 CDN 或者根本負(fù)擔(dān)不起其價(jià)格,不過這一現(xiàn)象近幾年發(fā)生了很大的變化,CDN 市場上出現(xiàn)了很多按次付費(fèi),非公司性的提供商,這使得 CDN 變成人人都能負(fù)擔(dān)的起的一種服務(wù)了。本文講述的就是如何使用這種簡單易用的緩存服務(wù)。

使用內(nèi)容分發(fā)網(wǎng)絡(luò)( CDN )你需要先正確地認(rèn)識 HTTP 響應(yīng)頭:和 HTTP 響應(yīng)頭中的哪些標(biāo)簽相關(guān)?它們是怎么起作用的?如何使用它們?文章中我會回答這些問題。

本文講的并不會像教科書那么精確,實(shí)際上在某些情況下,為了敘述的清晰、簡潔,我會按自己的理解簡化某些問題,文章中會通過一些實(shí)際的例子來介紹緩存理論。在這篇文章的基礎(chǔ)上,還會寫一些文章來介紹對于某些指定的 CMS 或框架如何使用 CDN 來作為緩存層。

為什么使用 CDN?

CDN 是一個(gè)全球分布式網(wǎng)絡(luò),它把網(wǎng)站內(nèi)容更快地傳遞給全球范圍內(nèi)的一個(gè)具體位置,而往往這個(gè)具體的位置離實(shí)際的內(nèi)容服務(wù)器距離很遠(yuǎn)。舉個(gè)例子,你的網(wǎng)站主機(jī)在愛爾蘭,而你的用戶則在澳大利亞訪問。這時(shí)當(dāng)你的用戶訪問你的網(wǎng)站的時(shí)候,延遲會很大,把你的(靜態(tài))數(shù)據(jù)用 CDN 放到澳大利亞則會很大程度上提高用戶訪問網(wǎng)站的體驗(yàn)。

然而 CDN 的使用并不局限于此。其實(shí) CDN 可以理解成一個(gè)普通緩存,如代理緩存(邊緣緩存)。即便你并不關(guān)心用戶的具體地理位置,你也應(yīng)該考慮使用 CDN 的代理緩存來提高你的用戶體驗(yàn)。

為什么使用代理緩存?

簡而言之,代理緩存會緩存你網(wǎng)站一些頁面,通過緩存來傳輸“靜態(tài)”內(nèi)容非常快。一個(gè)簡單的例子,假設(shè)你有一個(gè)帶有開始頁面的博客,這里面列出了所有近期的博客列表。完成這一過程,PHP 腳本要從數(shù)據(jù)庫中獲取到最近的文章實(shí)體,并且將它們轉(zhuǎn)換成 HTML 結(jié)果頁并返回給用戶。因此,對于一次請求(訪問)包含了:一次 PHP 執(zhí)行 + 一組數(shù)據(jù)庫查詢。對于 1000 次請求(訪問)包含了:1000 次 PHP 執(zhí)行 + 1000 組數(shù)據(jù)庫查詢。每一次 PHP 執(zhí)行都要進(jìn)行 CPU、內(nèi)存和 I/O 操作,對于數(shù)據(jù)庫操作也是同樣。

請求的需求量和訪問用戶的多少呈線性正比關(guān)系。聽起來怎么樣?不怎么樣,因?yàn)檫@個(gè)線性關(guān)系是有***限度的:磁盤***只能提供一定程度的 I/O,CPU 和內(nèi)存也都不是***的。這樣下去到了某個(gè)點(diǎn),也就是說某個(gè)資源到了瓶頸的時(shí)候,就出現(xiàn)問題了:你的網(wǎng)站會訪問的非常慢,甚至?xí)霈F(xiàn)所有人都不能訪問的情況。其實(shí)這時(shí)其他資源并沒有被全部打滿。誠然,這時(shí)你可以擴(kuò)展你的硬件規(guī)模來突破這一瓶頸,但是這將使工程變得很復(fù)雜,成本也更高。實(shí)際上還有更簡單、更便宜的解決方法。

在中間加一層代理緩存,會減少資源對你的限制。拿前面的例子來講,使用代理緩存只有***次請求需要執(zhí)行 PHP 腳本、查詢數(shù)據(jù)庫和生成 HTML 結(jié)果頁。所有后面過來的請求都會從這個(gè)緩存中取內(nèi)容,讀取緩存幾乎和直接讀取內(nèi)存一樣快。這意味著,上面的線性規(guī)模瓶頸的問題解決了!100 個(gè)用戶或者1000 個(gè)用戶都沒關(guān)系,依然只有 1 次 PHP 執(zhí)行、1 次數(shù)據(jù)庫查詢和 1 次的結(jié)果頁生成。

CDN != CDN

CDN 的類型也各有不同。網(wǎng)站管理者可能會好奇數(shù)據(jù)是怎么存儲的?存放在哪?以及數(shù)據(jù)是如何分布在 CDN 上的?是如何分發(fā)的呢?本文不是寫給網(wǎng)站管理者的而是寫給開發(fā)者的,所以在這我只能告訴你有“經(jīng)典 CDN”和“對等 CDN”,后者是現(xiàn)在主流采用的方法。

對于開發(fā)者,相比于把數(shù)據(jù)拿到 CDN 以后做什么來說,會對如何把數(shù)據(jù)放到 CDN 中更感興趣。說起來,有 push CDN 和 pull CDN 兩種。顧名思義,“push CDN” 表示你要給 CDN 提供內(nèi)容;“pull CDN” 表示如何從 CDN 取內(nèi)容。

本文將主要介紹 pull CDN,因?yàn)樵诤芏嗲闆r下 pull CDN 更加簡單易用,不需要費(fèi)多大事就能集成到現(xiàn)有的網(wǎng)站中。

pull CDN 是如何起作用的?

我們來做個(gè)例子,假設(shè)你有一個(gè)可訪問的網(wǎng)站,URL 是 https://www.foobar.tld。在這樣的場景下,域名http://www.foobar.tld 會被放到 pull CDN 服務(wù)器中,而不是你的網(wǎng)站服務(wù)器中。CDN 作為你網(wǎng)站服務(wù)器的一個(gè)代理。

還有一個(gè)不被公開的域名指向?qū)嶋H的網(wǎng)站服務(wù)器。在這個(gè)例子中假設(shè)它是 direct.foobar.tld,實(shí)際網(wǎng)站服務(wù)器叫做源。

這個(gè) CDN 將會接受所有的請求。如果它的緩存中有結(jié)果的話將會直接返回給用戶,否則會將這個(gè)請求托管給你實(shí)際的網(wǎng)站服務(wù)器,然后把返回的結(jié)果緩存起來為以后的請求做儲備,同時(shí)將結(jié)果返回給用戶。

最簡單的 pull CDN 運(yùn)行的過程如下:

  • 獲取一個(gè)頁面的請求,這個(gè)頁面:http://www.foobar.tld/some/page
  • 把 some/page 當(dāng)做緩存 key 檢查緩存中是否存在
  • 在緩存中則直接從緩存中返回結(jié)果給用戶
  • 不在緩存則請求 http://direct.foobar.tld/some/page,把返回的結(jié)果以 some/page 作為 key 寫入緩存,并返回結(jié)果給用戶

靜態(tài)內(nèi)容 VS 動(dòng)態(tài)內(nèi)容

上面的這一過程對于完全靜態(tài)的內(nèi)容完全適用。靜態(tài)內(nèi)容指的是如果用戶訪問同一個(gè) URL 地址,返回的所有數(shù)據(jù)都是一樣的。比如 CSS 文件就有這樣的特點(diǎn),http://www.foobar.tld/public/css/main.css這個(gè)文件是一個(gè)普通文件,對于所有訪問網(wǎng)站的用戶都是一樣的,那么它就特別適合用緩存存起來。

和靜態(tài)文件相對的是動(dòng)態(tài)文件。內(nèi)容在運(yùn)行時(shí)才能確定,這種情況也是非常常見的。比如多語言問題,需要根據(jù)瀏覽器語言來返回內(nèi)容。還有一些和 “user session” 相關(guān)的內(nèi)容,比如當(dāng)用戶登陸了以后,就要把“登陸”按鈕換成“退出”按鈕,你肯定不希望這個(gè)被緩存。這些高度活躍的內(nèi)容(如每小時(shí)或者更短時(shí)間更新的頁面)不能被緩存,或者說不能在緩存中停留時(shí)間過長。

這就是緩存有意思的地方,理解和實(shí)現(xiàn)它并不難。

緩存頭

絕大多數(shù)的 pull CDN 采用以“每頁”緩存形式解決動(dòng)態(tài)內(nèi)容的問題。為了達(dá)到這樣的效果,一個(gè)簡單的方法是 HTPP 響應(yīng)緩存頭。

首先對于緩存頭你需要知道有“舊版本”和“新版本”兩種,就是說它并不是一開始就設(shè)計(jì)成當(dāng)前所使用的這個(gè)版本的,也有一個(gè)逐漸演變的過程。新版本指的是 HTTP/1.1,而舊版本指的是 HTTP/1.0。它有特別多的可選選項(xiàng),每個(gè)人對這個(gè)問題都很頭疼。我認(rèn)為這是大家不愿意使用緩存頭的最重要的原因。

言歸正傳,我們只關(guān)注 ETag 和 Cache-Control 這兩個(gè)標(biāo)簽就足以了。大多數(shù) CDN 還支持舊版本(Expires,Pragma 和 Age),不過這些只作為向后兼容來使用。

ETag 頭

我們從最簡單的開始 ETag:它是文檔版本的標(biāo)識符。通常是內(nèi)容的 MD5 值,不過它也可以包含其他內(nèi)容,代表的是文檔的版本/日期,如: 1.0 或者 2017-02-27。這里注意一點(diǎn)是,它必須用雙引號括起來,如:ETag: "d3b07384d113edec49eaa6238ad5ff00"。

二次驗(yàn)證

現(xiàn)在來考慮 ETag 的實(shí)際應(yīng)用:二次驗(yàn)證。我們暫時(shí)不考慮前面代理+源的架構(gòu)模式,只考慮簡單的客戶端-服務(wù)器模式。如下圖:

假設(shè)客戶端請求了 http://www.foobar.tld/hello.txt,接著服務(wù)端返回了如下的響應(yīng)內(nèi)容:

  1. # REQUEST 
  2. GET /hello.txt HTTP/1.1 
  3. Host: www.foobar.tld 
  4.  
  5. # RESPONSE 
  6. HTTP/1.1 200 OK 
  7. Date: Sun, 05 Feb 2017 12:34:56 UTC 
  8. Server: Apache 
  9. Last-Modified: Sun, 05 Feb 2017 10:34:56 UTC 
  10. ETag: "8a75d48aaf3e72648a4e3747b713d730" 
  11. Content-Length: 8 
  12. Content-Type: text/plain; charset=UTF-8 
  13.  
  14. the body 

在響應(yīng)里面,有兩個(gè)有意思的頭標(biāo)識:一個(gè)是 ETag,內(nèi)容的 MD5值,一個(gè)是 Last-Modified,這是 hello.txt 文件***一次被修改的時(shí)間。

這里就是二次驗(yàn)證起作用的地方:當(dāng)客戶端在很短的時(shí)間內(nèi)再次訪問上面的 URL,客戶端瀏覽器會使用 If-* 請求頭。如 If-None-Match 檢查 ETag 的內(nèi)容是否有改變。也就是說,如果 ETag 發(fā)生變化,客戶端接收到的一個(gè)完整的新響應(yīng);如果 ETag 沒變化,客戶端接收到的是一個(gè)表明內(nèi)容沒變化的標(biāo)識。

  1. GET /hello.txt HTTP/1.1 
  2. If-None-Match: "8a75d48aaf3e72648a4e3747b713d730" 
  3. Host: www.foobar.tld 

如果 ETag 沒有改變,那么服務(wù)端將會返回:

  1. HTTP/1.1 304 Not Modified 
  2. Date: Sun, 05 Feb 2017 12:34:57 UTC 
  3. Server: Apache 
  4. Last-Modified: Sun, 05 Feb 2017 10:34:56 UTC 
  5. ETag: "8a75d48aaf3e72648a4e3747b713d730" 
  6. Content-Length: 8 
  7. Content-Type: text/plain; charset=UTF-8 

正如上面所展示的,這次服務(wù)器的響應(yīng)里面不是 200 ok,而是304 Not Modified,這就是說它略過包體部分,讓客戶端直接去自己的緩存里拿數(shù)據(jù)。在這個(gè)例子中,包體內(nèi)容是 the body,比較小,效果不明顯。可是想象一下如果是很大的內(nèi)容呢,或者是很復(fù)雜的動(dòng)態(tài)生成內(nèi)容呢,價(jià)值就很大了。

作為一個(gè)開發(fā)者,你可能會想:“并沒有那么好用嘛,我還不得不掌握 IF- 類的頭標(biāo)識,比以前更費(fèi)事了”。

別急,這只是介紹了共享緩存,也就是代理緩存的由來,我們看原始的架構(gòu):<客戶端-代理-源端>,代理根據(jù)自己的緩存返回給客戶端 304 Not Modified,接下來的章節(jié)詳解介紹,介紹之前我要先講一下 Last-Modfied 頭。

在處理上面那個(gè) hello.txt 靜態(tài)文件的例子時(shí),客戶端還可以使用 If-Not-Modified-Since: Sun, 05 Feb 2017 10:34:56 UTC 來達(dá)到同樣的效果(返回 304 響應(yīng))。這對于靜態(tài)文件來說也很好用,因?yàn)轫憫?yīng)頭中的 Last-Modified 標(biāo)識是根據(jù)服務(wù)器磁盤上的“更改時(shí)間戳”自動(dòng)生成的。然而,“更改時(shí)間戳”對于動(dòng)態(tài)文件通常沒什么用,因?yàn)閯?dòng)態(tài)生成文件頻繁更新,時(shí)間戳很難確定。我們都知道,你最想緩存起來的是內(nèi)容,生成內(nèi)容的代價(jià)是***的,所以 ETag 頭是更好的選擇。

Cache-Control頭

Cache-Control 頭相對來講難一些。兩個(gè)原因:***,Cache-Control 既可以用于請求頭,也可以用于響應(yīng)頭。本文中著重討論響應(yīng)頭,因?yàn)檫@是開發(fā)者所必須要掌握的。第二,它控制著兩個(gè)緩存:本地緩存(又稱私有緩存)和共享緩存。

本地緩存,是指在客戶端本地機(jī)器中的緩存。站在開發(fā)者的角度,它并不完全受你的控制,通常瀏覽器會自己決定是否把某些內(nèi)容放到緩存中,這意味著:不要依賴于本地緩存。用戶也可能在關(guān)閉瀏覽器的時(shí)候清理所有緩存,而你并不知道有這樣的操作。除非你監(jiān)測到了某個(gè)用戶的流量不斷上漲,導(dǎo)致緩存內(nèi)容迅速失效,這時(shí)候你才會意識到。

共享緩存,也就是本文所介紹的:處于客戶端和服務(wù)器之間的緩存。即 CDN。你對共享緩存擁有絕對的控制,應(yīng)該好好地利用它。

現(xiàn)在我們來用一些代碼作為示例深入學(xué)習(xí)一下。

  1. Cache-Control: public max-age=3600 
  2. Cache-Control: private immutable 
  3. Cache-Control: no-cache 
  4. Cache-Control: public max-age=3600 s-maxage=7200 
  5. Cache-Control: public max-age=3600 proxy-revalidate 

乍一看這些代碼很令人困惑,但是不要擔(dān)心,它并沒有那么難,我來一點(diǎn)點(diǎn)介紹。首先你要知道 Cache-Control 有三種屬性:緩沖能力、過期時(shí)間和二次驗(yàn)證。

首先是緩沖能力,它關(guān)注的是緩存到什么地方,和是否應(yīng)該被緩存。他的幾個(gè)重要的屬性是:

  • private:表示它只應(yīng)該存在本地緩存;
  • public:表示它既可以存在共享緩存,也可以被存在本地緩存;
  • no-cache:表示不論是本地緩存還是共享緩存,在使用它以前必須用緩存里的值來重新驗(yàn)證;
  • no-store:表示不允許被緩存。

第二個(gè)是過期時(shí)間,很顯然它關(guān)注的是內(nèi)容可以被緩存多久。它的幾個(gè)重要的屬性是:

  • max-age=:設(shè)置緩存時(shí)間,設(shè)置單位為秒。本地緩存和共享緩存都可以;
  • s-maxage=:覆蓋 max-age 屬性。只在共享緩存中起作用。

***一個(gè)是二次驗(yàn)證,表示精細(xì)控制。它的幾個(gè)重要屬性是:

  • immutable:表示文檔是不能更改的。
  • must-revalidate:表示客戶端(瀏覽器)必須檢查代理服務(wù)器上是否存在,即使它已經(jīng)本地緩存了也要檢查。
  • proxy-revalidata:表示共享緩存(CDN)必須要檢查源是否存在,即使已經(jīng)有緩存。

通過上面的具體解釋,現(xiàn)在再來描述上面 Cache-Control 的那段代碼所表達(dá)的意思就好理解多了:

  1. 本地緩存和 CDN 緩存均緩存 1 小時(shí);
  2. 不能緩存在 CDN,只能緩存在本地。并且一旦被緩存了,則不能被更新;
  3. 不能緩存。如果一定要緩存的話,確保對其進(jìn)行了二次驗(yàn)證;
  4. 本地緩存 1 小時(shí),CDN 上緩存 2 小時(shí);
  5. 本地和 CDN 均緩存 1 小時(shí)。但是如果 CDN 收到請求,則盡管已經(jīng)緩存了 1 小時(shí),還是要檢查源中文檔是否已經(jīng)被改變。

實(shí)例

理論會很單調(diào)乏味,現(xiàn)在用短的實(shí)例來演示如何自動(dòng)注入 ETag 和 Cache-Control 頭。例子是一個(gè) Apache 的 .htaccess 文件,但是我希望你能夠領(lǐng)會要領(lǐng),并且根據(jù)你自己的實(shí)際情況,應(yīng)用到你自己的 Web 應(yīng)用中。

  1. # 為所有圖片設(shè)置 ETag,以及緩存時(shí)間為 1 天 
  2. <FilesMatch "\.(gif|flv|jpg|jpeg|png|gif|swf)$"> 
  3.     FileETag -INode MTime Size 
  4.     Header set Cache-Control "max-age=86400 public" 
  5. </FilesMatch> 
  6.  
  7. # 為所有的 CSS 文件、JS 文件設(shè)置 ETag,以及緩存時(shí)間為 2 小時(shí),同時(shí)保證進(jìn)行了二次驗(yàn)證 
  8. <FilesMatch "\.(js|css)$"> 
  9.     FileETag -INode MTime Size 
  10.     Header set Cache-Control "max-age=7200 public must-revalidate" 
  11.     Header unset Last-Modified 
  12. </FilesMatch> 

 

上面例子,是一個(gè)對 URL:http://www.foobar.tld/baz.jpg 的響應(yīng)。包含了一個(gè) ETag 頭,由更改時(shí)間和文件大小所構(gòu)成,還有 Cache-Control 頭來設(shè)定緩存 1 天的時(shí)間。見下面的請求和響應(yīng):

  1. # REQUEST 
  2. GET /baz.jpg HTTP/1.1 
  3. Host: www.foobar.tld 
  4.  
  5. # RESPONSE 
  6. HTTP/1.1 200 OK 
  7. Date: Tue, 07 Feb 2017 15:01:20 GMT 
  8. Last-Modified: Tue, 07 Feb 2017 15:01:15 GMT 
  9. ETag: "4-547f20501b9e9" 
  10. Content-Length: 123 
  11. Cache-Control: max-age=86400 public 
  12. Content-Type: image/jpeg 

對于 URL: http://www.foobar.tld/dist/css/styles.css 的響應(yīng)同樣也包含了 ETag 頭。由更改時(shí)間、文件大小和限定了 2 小時(shí)的 Cache-Control 構(gòu)成。Last-Modfied 頭也刪除掉以確保只有 ETag 用來做二次驗(yàn)證。見下面的請求和響應(yīng):

  1. # REQUEST 
  2. GET /styles.css HTTP/1.1 
  3. Host: www.foobar.tld 
  4.  
  5. # RESPONSE 
  6. HTTP/1.1 200 OK 
  7. Date: Tue, 07 Feb 2017 15:00:00 GMT 
  8. Server: Apache 
  9. ETag: "20-547f1fbe02409" 
  10. Content-Length: 32 
  11. Cache-Control: max-age=7200 public must-revalidate 
  12. Content-Type: text/css 

小結(jié)

本文中我們介紹了:

  1. 為什么要使用 CDN,以及 CDN 是如何起作用的。
  2. 靜態(tài)內(nèi)容和動(dòng)態(tài)內(nèi)容分別是什么情況。
  3. HTTP 頭是如何解決緩存問題的。

那么想象一下這樣的場景,假設(shè)你有個(gè)網(wǎng)站,需要保存用戶的登錄狀態(tài),而針對不同狀態(tài)的用戶需要不同的顯示。通常情況下,我們是用 Cookie 來解決用戶特性的問題。這時(shí)候問題就來了,如果 Cookie 也在 CDN 中緩存,那么將會導(dǎo)致所有用戶的 Cookie 都一樣,這不是我們想要看到的。那么怎么解決呢?我們會在《掌握 HTTP 緩存——從請求到響應(yīng)過程的一切(下)》中詳細(xì)介紹。

店家《掌握 HTTP 緩存——從請求到響應(yīng)過程的一切(上)》閱讀原文。

【本文是51CTO專欄作者“胡子大哈”的原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系作者本人獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-03-23 15:05:50

HTTP緩存Cookie

2022-04-27 09:28:11

HTTPExpires

2009-12-01 11:20:56

業(yè)務(wù)服務(wù)管理

2022-07-22 14:05:46

超級云自動(dòng)化

2021-12-03 08:24:05

HttpTCP連接

2013-11-04 14:02:24

AMD

2020-09-11 10:55:10

useState組件前端

2017-12-29 10:29:34

HTTP驅(qū)動(dòng)程序

2012-12-31 11:22:58

開源開放

2023-04-27 09:27:44

視頻AI

2021-02-19 23:08:27

軟件測試軟件開發(fā)

2018-11-23 11:17:24

負(fù)載均衡分布式系統(tǒng)架構(gòu)

2021-02-28 09:47:54

軟件架構(gòu)軟件開發(fā)軟件設(shè)計(jì)

2010-05-18 10:10:46

2016-08-31 17:24:05

大數(shù)據(jù)分析

2018-10-18 10:05:43

HTTP網(wǎng)絡(luò)協(xié)議TCP

2025-03-10 13:11:00

2020-10-14 08:04:28

JavaScrip

2021-05-28 07:12:59

Python閉包函數(shù)

2013-04-09 10:29:41

程序員項(xiàng)目經(jīng)理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

精品国产亚洲一区二区三区在线观看| 久久久www成人免费毛片麻豆| 欧美床上激情在线观看| 成人欧美精品一区二区| 在线看片国产福利你懂的| 国产欧美日韩另类视频免费观看| 成人福利在线视频| 亚洲综合一二三| 日韩一区自拍| 精品国产91亚洲一区二区三区婷婷| 激情综合网婷婷| av在线麻豆| 久久久久久亚洲综合影院红桃| 成人激情春色网| 手机看片久久久| 99精品电影| 亚洲女人被黑人巨大进入al| 992tv人人草| av在线日韩| 精品国产福利视频| 中国 免费 av| 北条麻妃在线| 91网页版在线| 99精彩视频| 在线免费观看视频网站| 亚洲激情二区| 欧美精品在线观看91| 亚洲一级中文字幕| 国产精品2区| 欧美性淫爽ww久久久久无| 日韩一级片免费视频| 黄黄的网站在线观看| 欧美韩国日本不卡| 牛人盗摄一区二区三区视频 | 一本久久a久久精品亚洲 | 亚洲美洲欧洲综合国产一区| www.亚洲一区| 91社区视频在线观看| 噜噜噜狠狠夜夜躁精品仙踪林| 在线成人av网站| 992kp快乐看片永久免费网址| av资源在线播放| 亚洲在线免费播放| 国产在线无码精品| 麻豆视频在线观看免费| 国产精品毛片久久久久久| 视频一区视频二区视频三区高| 天天干天天摸天天操| 成人激情校园春色| 国产二区一区| 亚洲国产精品无码久久| 国产福利精品导航| 91精品国自产在线观看| 国产aⅴ一区二区三区| 国模无码大尺度一区二区三区| 国产精品专区第二| 亚洲系列第一页| 久久激情五月激情| 国产在线观看一区二区三区| 一级特黄色大片| 九九**精品视频免费播放| 国产一区二区丝袜| 国产同性人妖ts口直男| 国产真实乱子伦精品视频| 91九色单男在线观看| 999国产精品视频免费| 国产成人免费网站| 国产精品视频免费一区二区三区| 欧美性猛交 xxxx| 91麻豆国产精品久久| 欧美日韩精品免费在线观看视频| 高清在线观看av| 一区免费观看视频| 日韩精品免费一区| 国产高清自产拍av在线| 色激情天天射综合网| 久久撸在线视频| 亚洲人成777| 精品99999| 波多野结衣 在线| 日本女优一区| 色综合久久久888| 在线能看的av| 久久精品国产色蜜蜜麻豆| 亚洲va国产va天堂va久久| 黄色www视频| 久久久久久久久岛国免费| 亚洲综合欧美日韩| 成年网站在线视频网站| 色婷婷av久久久久久久| www.51色.com| 秋霞蜜臀av久久电影网免费| 一道本无吗dⅴd在线播放一区| 亚洲综合图片一区| 亚洲大胆av| 91精品久久久久久久久久久| 成人久久久精品国产乱码一区二区 | 亚洲三级网址| y97精品国产97久久久久久| jizz国产免费| 久久国产视频网| 精品视频第一区| 国产秀色在线www免费观看| 五月激情综合婷婷| www.成年人| 免费av一区| 欧美日本黄视频| 亚洲免费视频二区| 99久久国产综合精品色伊| 一区不卡字幕| 成人国产二区| 日韩欧美中文字幕公布| 永久免费毛片在线观看| 亚洲天堂黄色| 国产综合色香蕉精品| 日本高清中文字幕二区在线| 亚洲一区二区三区四区不卡| 五月婷婷丁香综合网| 天天躁日日躁狠狠躁欧美巨大小说| xxx欧美精品| 中文字幕一区二区三区四区欧美| 国产91精品一区二区麻豆网站 | 亚洲性人人天天夜夜摸| 成人观看高清在线观看免费| 国产69精品久久app免费版| 欧美日韩国产色| 亚洲黄色小说在线观看| 亚洲欧美在线专区| 国产精品直播网红| 在线观看av黄网站永久| 色中色一区二区| 亚洲一区二区乱码| 亚洲国产日韩欧美一区二区三区| 亚洲自拍偷拍网址| 久久综合之合合综合久久| 欧美性大战久久久久久久蜜臀 | 97婷婷涩涩精品一区| aaa一区二区三区| 最近中文字幕一区二区三区| 成人午夜激情av| 美女亚洲一区| 4k岛国日韩精品**专区| 污视频在线免费| 午夜国产精品影院在线观看| www.四虎在线| 精品动漫一区| 国产视频在线观看一区| 91美女主播在线视频| 亚洲第一精品福利| www.国产成人| 91欧美一区二区| 国产九九九九九| 亚洲人成网www| 琪琪亚洲精品午夜在线| 日韩二区三区| 在线日韩av片| 日本在线观看网址| 精品制服美女丁香| 国产精品一二三在线观看| 亚洲精品69| 久久99精品视频一区97| 高清乱码毛片入口| 亚洲成人免费在线| 亚洲最大的黄色网| 久久久久国产精品一区二区| 日韩久久久久久久久久久久久| 成人网ww555视频免费看| 少妇高潮 亚洲精品| 国产女同91疯狂高潮互磨| 亚洲激情一二三区| 艳妇乳肉豪妇荡乳xxx| 一本色道精品久久一区二区三区 | 午夜精品一区二区三区免费视频| 国产精品无码毛片| 日韩精品欧美精品| av电影一区二区三区| 成人av影音| 国产z一区二区三区| 免费观看成人高潮| 日韩一本二本av| 亚洲精品男人天堂| 国产精品久久久久久久久久久免费看| 欧美一级特黄aaa| 在线观看日韩av电影| 日产中文字幕在线精品一区| 日本免费一区二区视频| 日本久久久久久久久久久| 免费黄网在线观看| 亚洲国产欧美自拍| 影音先锋国产在线| 亚洲成人午夜影院| 日本黄区免费视频观看| 成人免费黄色在线| 成人午夜激情av| 亚洲国产国产亚洲一二三| 日韩欧美亚洲日产国产| 试看120秒一区二区三区| 青青青国产精品一区二区| av电影免费在线观看| 日韩av在线一区| 国产毛片一区二区三区va在线 | 免费成人在线视频网站| 久久精品高清| 精品蜜桃传媒| 国产999精品在线观看| 2024亚洲男人天堂| 91亚洲天堂| 中文字幕日韩高清| 欧美孕妇孕交xxⅹ孕妇交| 日韩一级高清毛片| 最新中文字幕免费| 欧美午夜精品久久久久久浪潮| 一级黄色录像视频| 欧美激情一区二区三区在线| 人妻av一区二区| 精品一区二区三区的国产在线播放| 奇米精品一区二区三区| 欧美在线资源| 在线观看福利一区| 国产一区二区三区91| 国产精品三区www17con| 精品久久亚洲| 国产欧美一区二区| 精品欧美一区二区三区在线观看 | 在线日韩日本国产亚洲| 熟妇人妻一区二区三区四区| 欧美一区二区视频网站| 伊人网视频在线| 日本大香伊一区二区三区| 国产91av视频| 一区二区高清在线| 国产大学生自拍| 亚洲精品视频免费看| 情侣偷拍对白清晰饥渴难耐| 国产欧美日韩精品一区| 亚洲人成人无码网www国产| 99精品视频在线免费观看| 亚洲国产精品狼友在线观看| 国产成+人+日韩+欧美+亚洲| 一级黄色高清视频| 黄一区二区三区| 激情黄色小视频| 国内精品免费在线观看| 中文字幕亚洲影院| 国产一区二区三区四区五区美女| 亚洲天堂网2018| 狠狠色综合日日| 交换做爰国语对白| 国产精品1024| 黑森林av导航| 本田岬高潮一区二区三区| 白嫩情侣偷拍呻吟刺激| a在线播放不卡| 性色av蜜臀av色欲av| 久久久精品欧美丰满| xxxx日本黄色| 中文字幕一区二区三区四区| 中文字幕电影av| 一区二区三区欧美日| 久草视频在线资源| 亚洲3atv精品一区二区三区| 日本一本高清视频| 精品久久久一区二区| 久久久久在线视频| 欧美色网站导航| 国产强伦人妻毛片| 精品久久久久香蕉网| 无码h黄肉3d动漫在线观看| 亚洲精品一区二区三区不| 国产精品视频二区三区| 中文字幕日韩精品在线观看| 顶级网黄在线播放| 久久久久久欧美| 韩国美女久久| 国产欧美一区二区三区久久人妖| 亚洲日本va中文字幕| 久久精品人成| 国产精品黑丝在线播放| 国产av熟女一区二区三区| 亚洲免费婷婷| 男人的天堂最新网址| 成人精品国产一区二区4080 | 亚洲人123区| 韩国av免费观看| 欧美色图12p| 亚洲精品中文字幕成人片| 亚洲男人天堂视频| 99在线播放| 欧美在线亚洲在线| 国产免费av国片精品草莓男男| 国产在线精品二区| 久久精品国产亚洲夜色av网站| 人人妻人人做人人爽| 美女视频黄频大全不卡视频在线播放| 人妻体体内射精一区二区| 91麻豆高清视频| 欧美日韩一级在线观看| 色综合久久久久久久久久久| 国产露脸91国语对白| 日韩精品中文字幕视频在线| h视频在线免费观看| 国产999精品| swag国产精品一区二区| 亚洲一区二区三区精品在线观看| 精品69视频一区二区三区Q| 亚洲一级免费在线观看| gogo大胆日本视频一区| 开心激情五月网| 日韩欧美亚洲范冰冰与中字| 亚洲国产成人一区二区| 色99之美女主播在线视频| 亚洲第一av| 国产精品精品软件视频| 亚洲色图网站| 色国产在线视频| 久久久精品tv| 中文字幕亚洲高清| 日韩欧美国产一二三区| 秋霞a级毛片在线看| 日韩免费av一区二区| 欧美交a欧美精品喷水| 992tv快乐视频| 国产最新精品精品你懂的| 影音先锋制服丝袜| 欧美视频在线免费看| 男人天堂综合网| 欧美韩日一区二区| 久久丁香四色| 在线无限看免费粉色视频| 日本成人在线不卡视频| 色一情一交一乱一区二区三区| 亚洲成a人v欧美综合天堂| 亚洲AV无码一区二区三区性| 久热99视频在线观看| 亚洲色图综合| 中文字幕一区二区三区5566| 另类调教123区| av片在线免费看| 欧美日韩精品欧美日韩精品一综合| 国产综合在线观看| 欧美在线一区二区视频| 亚洲欧洲免费| www日韩在线观看| 国产欧美一区二区三区在线看蜜臀 | 亚洲特级毛片| 国产精品果冻传媒| 亚洲 欧美综合在线网络| 欧美在线 | 亚洲| 久久久久久久色| 日韩黄色网络| 日本在线视频www| 国产亚洲精品中文字幕| 波多野结衣影片| 中文字幕免费国产精品| 日韩av黄色| 91视频成人免费| 成人免费视频免费观看| 日韩成人av毛片| 亚洲人成电影网| 国产精品美女午夜爽爽| 在线观看一区二区三区三州| 国产在线不卡一区| 麻豆视频在线观看| 日韩国产一区三区| 日韩a**中文字幕| 亚洲一区二区在| 国产成人精品aa毛片| 天天操天天干视频| 一本色道久久88精品综合| 亚洲欧洲专区| 大伊香蕉精品视频在线| 久久亚洲捆绑美女| 夜夜嗨av禁果av粉嫩avhd| 欧美成人一二三| 蜜桃a∨噜噜一区二区三区| 天天干天天草天天| 伊人婷婷欧美激情| 三级无遮挡在线观看| 国产精品一区二区久久久久| 欧美激情综合色综合啪啪| 粉嫩av懂色av蜜臀av分享| 91成人免费在线视频| 中文字幕在线三区| 蜜桃网站成人| 精东粉嫩av免费一区二区三区 | 在线观看视频一区二区 | 欧美日韩有码| 国产精品一级无码| 欧美主播一区二区三区| 在线看女人毛片| 欧美一区二视频在线免费观看| 精品一区二区三区免费播放| 国产主播在线观看| 中文字幕欧美在线| 国产欧美一区二区三区米奇| 国产一二三四在线视频| 亚洲一区二区视频| av片在线免费观看| 黄色99视频| 国产在线不卡视频|