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

Web緩存控制策略詳解

存儲(chǔ) 存儲(chǔ)軟件
管理Web緩存的最常用和最有效的方法之一是通過(guò)Cache-Control HTTP標(biāo)頭,由于此標(biāo)頭適用于Web頁(yè)面的緩存,這意味著我們頁(yè)面上的所有內(nèi)容都可以具有非常精細(xì)化的緩存策略。通過(guò)各種自定義策略,我們控制的策略就可以變得非常復(fù)雜和強(qiáng)大。

管理Web緩存的最常用和最有效的方法之一是通過(guò)Cache-Control HTTP標(biāo)頭,由于此標(biāo)頭適用于Web頁(yè)面的緩存,這意味著我們頁(yè)面上的所有內(nèi)容都可以具有非常精細(xì)化的緩存策略。通過(guò)各種自定義策略,我們控制的策略就可以變得非常復(fù)雜和強(qiáng)大。

[[259935]]

Cache-Control

管理Web緩存的最常用和最有效的方法之一是通過(guò)Cache-Control HTTP標(biāo)頭,由于此標(biāo)頭適用于Web頁(yè)面的緩存,這意味著我們頁(yè)面上的所有內(nèi)容都可以具有非常精細(xì)化的緩存策略。通過(guò)各種自定義策略,我們控制的策略就可以變得非常復(fù)雜和強(qiáng)大。

Cache-Control標(biāo)頭可能如下所示:

  1. Cache-Control: publicmax-age=31536000 

Cache-Control是標(biāo)頭,public和max-age=31536000都是指令。 Cache-Control標(biāo)頭可以接受一個(gè)或多個(gè)指令,我想在本文中討論的就是這些指令,比如它們的真正含義以及它們的***用例。

public和private緩存

public意味著任何緩存都可以存儲(chǔ)響應(yīng)的副本,其中就包括CDN、代理服務(wù)器等。public指令通常是多余的,因?yàn)槠渌噶?比如max-age)的存在是隱式指令,緩存可能會(huì)存儲(chǔ)一個(gè)副本。

另一方面,private是一個(gè)顯式指令,只有響應(yīng)的最終接收者(客戶端或?yàn)g覽器)才可以存儲(chǔ)該文件的副本。雖然private本身不是具有安全功能,但是它的目的是防止public緩存(例如CDN)存儲(chǔ)包含一個(gè)用戶唯一信息的響應(yīng)。

max-age

max-age定義了一個(gè)以秒為單位的時(shí)間單位(相對(duì)于請(qǐng)求的時(shí)間),該單位的響應(yīng)被認(rèn)為是‘fresh’。

  1. Cache-Control: max-age=60 

此Cache-Control標(biāo)頭會(huì)告訴瀏覽器,它可以在接下來(lái)的60秒內(nèi)使用緩存中的此文件,而不必?fù)?dān)心重新被驗(yàn)證。 不過(guò)60秒后,瀏覽器將返回服務(wù)器以重新驗(yàn)證文件。

如果服務(wù)器有一個(gè)新文件供瀏覽器下載,它將以200響應(yīng)進(jìn)行響應(yīng),下載新文件后,舊文件將從HTTP緩存中彈出,新文件將替換它,并將成為新的緩存標(biāo)頭。

如果服務(wù)器沒(méi)有需要下載的更新副本,則服務(wù)器將以200響應(yīng)進(jìn)行響應(yīng),不需要下載任何新文件,并將使用新的標(biāo)頭更新緩存副本。這意味著,如果仍然存在Cache-Control:max-age = 60標(biāo)頭,則緩存文件在60秒后將再次啟動(dòng)。算下來(lái),一個(gè)文件的總緩存時(shí)間為120秒。

注意:max-age會(huì)有自動(dòng)警告的屬性,如果瀏覽器過(guò)于陳舊,則max-age會(huì)提醒用戶,但用戶可以選擇忽略此警告。瀏覽器可能會(huì)使用自己的試探法來(lái)決定是否在不重新驗(yàn)證文件的情況下發(fā)布文件的陳舊副本。這種行為有些不確定,所以很難確切地知道瀏覽器將實(shí)際做什么。為此,我們有一系列顯式指令,可以用它們來(lái)擴(kuò)充max-age。

s-maxage

s-maxage將優(yōu)先于max-age指令,但僅限在共享緩存的上下文中使用。將max-age和s-maxage結(jié)合使用,你可以分別為private和public緩存(例如代理、CDN)提供不同的啟動(dòng)時(shí)間。

no-store

  1. Cache-Control: no-store 

如果我們不想緩存文件怎么辦?如果文件包含敏感信息怎么辦?也許這是一個(gè)包含銀行詳細(xì)信息的HTML頁(yè)面?或許這些信息對(duì)時(shí)間至關(guān)重要?也許是一個(gè)包含實(shí)時(shí)股票價(jià)格的頁(yè)面?其實(shí)我們并不想在緩存中存儲(chǔ)或提供任何類(lèi)似的響應(yīng):我們總是希望丟棄敏感信息并獲取***的實(shí)時(shí)信息。這時(shí),我們就要用到no-store指令。

no-store是一個(gè)非常強(qiáng)大的指令,不會(huì)將任何信息保存到任何緩存中,無(wú)論是private或其他緩存。

no–cache

  1. Cache-Control: no-cache 

這是讓大多數(shù)人誤解的指令,no – cache存并不意味著“沒(méi)有緩存”。這只是意味著“在你使用服務(wù)器重新驗(yàn)證緩存之前,不需要從緩存中提供副本就可以使用以前的緩存副本”。

no-cache實(shí)際上是一種非常聰明的緩存更新策略,這樣就可以始終保證***的緩存副本。除非服務(wù)器響應(yīng)更快,否則no-cache將始終must-revalidate服務(wù)器才能釋放瀏覽器的緩存副本,但如果服務(wù)器響應(yīng)速度一般,網(wǎng)絡(luò)傳輸只有一個(gè)文件的標(biāo)頭,則可以直接從緩存中抓取正文而不是重載。

因此,這是一種結(jié)合更新策略,并快速?gòu)木彺嬷蝎@取文件的智能方法,但前提是它至少要獲得一個(gè)HTTP標(biāo)頭響應(yīng)。

無(wú)緩存的一個(gè)很好的用例幾乎就是動(dòng)態(tài)HTML頁(yè)面,想想新聞網(wǎng)站的主頁(yè):它不是實(shí)時(shí)的,也不包含任何敏感信息,但理想情況下我們希望頁(yè)面始終顯示***鮮的內(nèi)容。我們可以使用cache-control:no-cache來(lái)指示瀏覽器首先檢查服務(wù)器,如果服務(wù)器沒(méi)有更新的東西(304),就會(huì)重用緩存的版本。如果服務(wù)器確實(shí)有一些更新鮮的內(nèi)容,它會(huì)響應(yīng)(200)并發(fā)送更新的文件。

提示:沒(méi)有必要發(fā)送max-age指令和no-cache指令,因?yàn)橹匦买?yàn)證的時(shí)間限制為零秒。

must-revalidate

更令人困惑的是,盡管上面的代碼聽(tīng)起來(lái)應(yīng)該稱為must-revalidate,但事實(shí)證明,must-revalidate仍然具有自己的特點(diǎn)。

  1. Cache-Control: must-revalidate, max-age=600 

must-revalidate需要一個(gè)相關(guān)的max-age指令,如上所示,我們把它設(shè)置為十分鐘。此時(shí),no-cache將立即與服務(wù)器重新驗(yàn)證,只有在服務(wù)器允許時(shí)才使用緩存副本時(shí),must-revalidate才類(lèi)似于一個(gè)寬限期no-cache。具體過(guò)程是這樣的,在前十分鐘,瀏覽器不會(huì)與服務(wù)器重新驗(yàn)證,但十分鐘過(guò)后,它又返回服務(wù)器。如果服務(wù)器沒(méi)有任何新內(nèi)容,它將以304響應(yīng)并且新的Cache-Control標(biāo)頭應(yīng)用于緩存文件。然后再以十分鐘為單位,如果在十分鐘之后,服務(wù)器上有一個(gè)較新的文件,我們會(huì)收到200響應(yīng)及其正文,并且本地緩存會(huì)更新。

proxy-revalidate

與s-maxage類(lèi)似,proxy-revalidate是must-revalidate的public緩存的自定義版本,它只是被private緩存忽略了。

immutable

immutable是一個(gè)非常新的且非常簡(jiǎn)潔的指令,它告訴瀏覽器關(guān)于我們發(fā)送的文件類(lèi)型的更多信息,該指令可以解決以下問(wèn)題:用戶刷新會(huì)導(dǎo)致瀏覽器重新驗(yàn)證文件,無(wú)論其新鮮度如何,用戶刷新通常意味著以下任意情況必定發(fā)生:頁(yè)面看起來(lái)不完整或者內(nèi)容還和原來(lái)一樣。

所以,我們有必要檢查服務(wù)器上是否有更新的內(nèi)容。

如果服務(wù)器上有更新的文件,我們肯定希望下載它。因此,我們將得到200響應(yīng),即一個(gè)新文件出現(xiàn)。但是,如果服務(wù)器上沒(méi)有新文件,我們將得到304響應(yīng),即沒(méi)有新文件,如果是專(zhuān)業(yè),則整個(gè)延遲反應(yīng)就沒(méi)有意義了。如果我們重新驗(yàn)證許多導(dǎo)致延遲反應(yīng)304的文件,可能會(huì)增加數(shù)百毫秒不必要的等待。

immutable是一種告訴瀏覽器文件有無(wú)可變內(nèi)容的指令,如果內(nèi)容無(wú)更新,則永遠(yuǎn)不會(huì)重新驗(yàn)證緩存。這樣,就可以完全消除延遲時(shí)間。不過(guò),immutable所指的可變或不可變文件的具體含義是什么?

style.css:當(dāng)我們更改此文件的內(nèi)容時(shí),即使根本不更改其名稱,這個(gè)文件也被認(rèn)為是可變的。

style.ae3f66.css:這個(gè)文件是唯一的,它以基于其具體內(nèi)容來(lái)命名的,所以一旦內(nèi)容發(fā)生變化,我們就會(huì)得到一個(gè)全新的文件,此時(shí),這個(gè)文件就被認(rèn)為是不可變的。

我們將在Cache Busting部分中更詳細(xì)地討論這個(gè)問(wèn)題。

如果我們能夠以某種方式向?yàn)g覽器發(fā)出文件是不可變的信號(hào),則它就不需要檢查更新版本,這正是immutable指令的作用:

Cache-Control: max-age=31536000, immutable

在支持immutable指令的瀏覽器中,用戶刷新永遠(yuǎn)不會(huì)在31536000秒的新鮮度生命周期內(nèi)進(jìn)行重新驗(yàn)證。這意味著無(wú)需花費(fèi)不必要的延遲時(shí)間來(lái)檢索304響應(yīng),這可能會(huì)在關(guān)鍵路徑(CSS blocks rendering)上節(jié)省大量的延遲時(shí)間。

注意:你不應(yīng)該將immutable應(yīng)用于任何不可變的文件,因?yàn)槟氵€應(yīng)該有一個(gè)非常強(qiáng)大的緩存破壞策略。

stale-while-revalidate

到目前為止,我們已經(jīng)談了很多關(guān)于重新驗(yàn)證的內(nèi)容,都是關(guān)于瀏覽器返回服務(wù)器以檢查是否有更新的文件的過(guò)程。在高延遲連接上,重新驗(yàn)證的持續(xù)時(shí)間會(huì)很長(zhǎng),并且這個(gè)時(shí)間是固定的,直到我們對(duì)服務(wù)器進(jìn)行額外的命令,否則既不能釋放緩存副本(304)也不能下載新文件(200)。

stale-while-revalidate提供的是寬限期,在此期間,當(dāng)我們檢查新版本時(shí),允許瀏覽器使用過(guò)去的緩存。

  1. Cache-Control: max-age=31536000, stale-while-revalidate=86400 

該指令是在告訴瀏覽器“這個(gè)文件可以使用一年,一年之后,還可以再用一個(gè)星期。在這時(shí)候,如果你要繼續(xù)使用這個(gè)舊的資源,就必須在后臺(tái)重新驗(yàn)證它”。

stale-while-revalidate對(duì)非關(guān)鍵資源是一個(gè)很好的指令,當(dāng)然,我們希望使用***的版本。但是我們知道,如果在檢查更新時(shí)再次使用過(guò)時(shí)的響應(yīng),不會(huì)造成任何對(duì)更新的破壞。

stale-if-error

與stale-while-revalidate類(lèi)似,如果重新驗(yàn)證的資源返回5xx類(lèi)錯(cuò)誤,stale-if-error允許瀏覽器有一段緩沖時(shí)間,在此期間可以允許返回過(guò)時(shí)的響應(yīng)。

  1. Cache-Control: max-age=2419200, stale-if-error=86400 

在本文中,我們指定了28天(2419200秒)以內(nèi)的緩存文件都是新的,如果我們?cè)谀侵笥龅礁洛e(cuò)誤,我們會(huì)多追加一天(86400秒),在此期間我們將允許過(guò)時(shí)的資源響應(yīng)。

Cache Busting(緩存破壞)

只討論緩存得正常情況而不討論緩存破壞的情況是不負(fù)責(zé)任的。在考慮你的緩存策略之前,我總是建議你解決緩存破壞策略。因?yàn)楫?dāng)開(kāi)發(fā)者修改了網(wǎng)站就會(huì)發(fā)生問(wèn)題,因?yàn)橛脩舯镜鼐彺娴奈募€是老文件。這樣用戶看到的不僅還是舊的功能,如果網(wǎng)站緩存了css和js文件,它們還在引用不存在的元素或者被移除的被重命名的元素,網(wǎng)站就會(huì)報(bào)錯(cuò)破壞。

Cache busting就是強(qiáng)制瀏覽器下載新文件的一種方法,通過(guò)將新文件的名字修改成和舊文件不同的名字即可實(shí)現(xiàn)。

No Cache Busting – style.css

這是最不可取的做法:絕對(duì)沒(méi)有任何緩存破壞。這是一個(gè)可變文件,我們真的很難實(shí)現(xiàn)Cache Busting。

你應(yīng)該非常謹(jǐn)慎地緩存這些文件,因?yàn)橐坏┧鼈兂霈F(xiàn)在用戶的設(shè)備上,我們幾乎失去了對(duì)它們的所有控制權(quán)。

盡管這個(gè)例子是一個(gè)樣式表,但HTML頁(yè)面正好就是這個(gè)特性。由于我們無(wú)法更改網(wǎng)頁(yè)的文件名,網(wǎng)站就會(huì)報(bào)錯(cuò)破壞!這正是我們根本不會(huì)緩存它們的原因。

Query String – style.css?v=1.2.14

此時(shí),我們?nèi)匀挥幸粋€(gè)可變文件,但我們?cè)谄湮募窂街刑砑恿艘粋€(gè)查詢字符串。雖然這比什么都不做要好,但它仍然不***。如果要?jiǎng)h除查詢字符串,我們會(huì)回到之前的類(lèi)別,即完全不存在緩存破壞。許多代理服務(wù)器和CDN都不會(huì)通過(guò)配置來(lái)緩存任何帶有查詢字符串的內(nèi)容。例如,來(lái)自Cloudflare的文檔, “style.css?something”的請(qǐng)求將被標(biāo)準(zhǔn)化為“style.css”,或查詢字符串可能包含特定于一個(gè)特定響應(yīng)的信息。

Fingerprint – style.ae3f66.css

到目前為止,指紋識(shí)別是緩存破壞文件的***方法。每次文件的內(nèi)容發(fā)生變化時(shí),我們都對(duì)其進(jìn)行更改,這并不會(huì)緩存任何內(nèi)容。這意味著,我們將最終得到的是一個(gè)全新的文件!且該文件不可更改。如果你可以在靜態(tài)緩存上實(shí)現(xiàn)此功能,請(qǐng)執(zhí)行此操作!一旦你成功地實(shí)現(xiàn)了這個(gè)非常可靠的緩存破壞策略,你就能得到***的緩存控制指令了:

  1. Cache-Control: max-age=31536000, immutable 

實(shí)施細(xì)節(jié)

此方法的關(guān)鍵是更改文件名,但不一定是對(duì)指紋進(jìn)行更改。以下所有示例都具有相同的效果:

  •  /assets/style.ae3f66.css:使用文件內(nèi)容的哈希產(chǎn)生破壞;
  • /assets/style.1.2.14.css:使用一個(gè)已發(fā)布的版本產(chǎn)生破壞;
  • /assets/1.2.14/style.css:通過(guò)更改URL中的目錄產(chǎn)生破壞;

但是,***一個(gè)示例表明,我們對(duì)每個(gè)版本而不是每個(gè)單獨(dú)的文件進(jìn)行版本控制。這反過(guò)來(lái)意味著,如果我們只需要緩存樣式表,則還必須緩存該版本的所有靜態(tài)文件,所以***選項(xiàng)是前兩個(gè)。

Clear-Site-Data

目前我們正在開(kāi)發(fā)一個(gè)規(guī)范,以幫助開(kāi)發(fā)人員確定整個(gè)緩存的來(lái)源,并從根上徹底一次性清除,這就是Clear-Site-Data的含義,它讓W(xué)eb開(kāi)發(fā)人員對(duì)瀏覽器本地存儲(chǔ)的數(shù)據(jù)有更多控制能力。

我不想在這篇文章中詳細(xì)介紹Clear-Site-Data,它不是Cache-Control指令,而是一個(gè)全新的HTTP標(biāo)頭文件。

  1. Clear-Site-Data: "cache" 

將此標(biāo)頭應(yīng)用于你的任何一個(gè)源緩存都將讓整個(gè)源的緩存破壞,而不僅僅是它所附加的文件。這意味著,如果你需要從所有訪問(wèn)者的緩存中強(qiáng)制破壞整個(gè)站點(diǎn),則可以將上述標(biāo)頭應(yīng)用于HTML有效內(nèi)容。

在撰寫(xiě)本文時(shí),僅支持瀏覽器有Chrome,Android Webview,F(xiàn)irefox和Opera。

提示:Clear-Site-Data將接受許多指令:“cookies”,“storage”,“executionContexts”和“*” (當(dāng)然,“*”的意思是“以上所有”)。

具體示例

好的,讓我們來(lái)看看一些應(yīng)用場(chǎng)景以及我們可能采用哪種Cache-Control標(biāo)頭。

網(wǎng)上銀行頁(yè)面

  1. Request URL: /account/ 
  2. Cache-Control: no-store 

根據(jù)規(guī)范,這足以阻止瀏覽器在private和共享緩存中持續(xù)對(duì)磁盤(pán)的響應(yīng)。

no-store響應(yīng)指令會(huì)命令緩存不得存儲(chǔ)立即請(qǐng)求或響應(yīng)的任何部分,此指令適用于private和共享緩存。 “不得存儲(chǔ)”意味著緩存不得故意將信息存儲(chǔ)在非易失性存儲(chǔ)中,并且必須盡***努力盡快在轉(zhuǎn)發(fā)后從易失性存儲(chǔ)中刪除所存儲(chǔ)的信息。

但如果你想要防止緩存的發(fā)生,你可以選擇:

  1. Request URL: /account/ 
  2. Cache-Control: private, no-cache, no-store 

該指令將明確指示不要在public緩存(例如CDN)中存儲(chǔ)任何內(nèi)容,以始終提供***的副本。

列車(chē)時(shí)間表網(wǎng)頁(yè)

如果我們正在構(gòu)建一個(gè)顯示實(shí)時(shí)信息的頁(yè)面,則希望保證用戶始終能夠看到***的信息。此時(shí),可以使用以下指令:

  1. Request URL: /live-updates/ 
  2. Cache-Control: no-cache 

這個(gè)簡(jiǎn)單的指令意味著瀏覽器不會(huì)直接從緩存中顯示響應(yīng),意味著頁(yè)面不會(huì)顯示過(guò)時(shí)的列車(chē)信息。

FAQ頁(yè)面

像FAQ這樣的頁(yè)面可能很少更新,因?yàn)槠渲械膬?nèi)容大多都是常識(shí)性問(wèn)題,對(duì)時(shí)效性沒(méi)有要求。我們可能會(huì)暫時(shí)緩存這樣的HTML頁(yè)面,并強(qiáng)制瀏覽器定期檢查新內(nèi)容,而不是每次對(duì)緩存進(jìn)行訪問(wèn)。可以使用以下指令:

  1. Request URL: /faqs/ 
  2. Cache-Control: max-age=604800, must-revalidate 

該指令會(huì)告訴瀏覽器將HTML頁(yè)面緩存一周(604800秒),并且一周結(jié)束后,我們需要檢查服務(wù)器是否有更新。

頁(yè)面中的圖片

頁(yè)面中的圖片通常都是一篇文章的配圖,通常我們都會(huì)下載下來(lái),所以我們想緩存它。但其實(shí)它對(duì)頁(yè)面的更新?tīng)顟B(tài)并不會(huì)產(chǎn)生影響,因此我們不需要它的更新?tīng)顟B(tài)。可以使用以下指令:

  1. Request URL: /content/masthead.jpg 
  2. Cache-Control: max-age=2419200, must-revalidate, stale-while-revalidate=86400 

該指令會(huì)告訴瀏覽器將圖像存儲(chǔ)28天(2419200秒),我們要在28天的時(shí)間限制后檢查該圖像在服務(wù)器中是否有更新。

總結(jié)

1.判斷是否設(shè)置了cacheBusting屬性非常重要。在開(kāi)始執(zhí)行緩存策略之前,請(qǐng)先制定緩存破壞策略。

2.一般來(lái)說(shuō),緩存HTML內(nèi)容是一個(gè)錯(cuò)誤的方法。 由于HTML網(wǎng)址不能被破壞,并且由于你的HTML頁(yè)面通常是其余子資源的入口點(diǎn),因此你最終也會(huì)緩存對(duì)靜態(tài)資源的引用。

3.如果要緩存任何HTML,在站點(diǎn)上的不同類(lèi)型的HTML頁(yè)面上使用不同的緩存策略可能會(huì)導(dǎo)致不一致,比如有的頁(yè)面總是***的內(nèi)容,而其他頁(yè)面的內(nèi)容有時(shí)是從緩存中獲取的。

4.如果你能夠可靠的緩存(使用指紋)的靜態(tài)資產(chǎn),那么你還不如一次性使用一個(gè)不可變的指令緩存數(shù)年,以便更好地進(jìn)行管理。

5.非關(guān)鍵緩存內(nèi)容可以使用stale-while-revalidate等指令,增加緩存的寬限期。

6.immutable和stale-while-revalidate不僅為我們提供了緩存的傳統(tǒng)優(yōu)勢(shì),而且還允許我們?cè)谥匦买?yàn)證時(shí)降低延遲。

7.充分了解你的緩存,并設(shè)計(jì)具有針對(duì)性的緩存策略。

責(zé)任編輯:武曉燕 來(lái)源: 嘶吼
相關(guān)推薦

2021-03-29 11:51:07

緩存儲(chǔ)存數(shù)據(jù)

2022-05-10 08:58:56

CacheHTTP

2023-11-16 08:22:14

LruCacheAndroid

2012-04-02 16:35:49

網(wǎng)絡(luò)緩存

2023-04-13 07:52:59

2019-12-05 15:22:25

高可用網(wǎng)關(guān)配置

2011-07-28 14:14:17

組策略組策略命令

2011-08-03 09:28:23

2011-05-20 10:53:01

2015-10-08 16:40:50

緩存頭像策略

2013-10-16 16:58:17

iOS優(yōu)化緩存優(yōu)化

2018-08-23 10:50:28

Web緩存體系

2009-07-06 14:03:01

高性能Web應(yīng)用緩存

2012-05-10 09:18:14

惠普云計(jì)算融合云

2018-10-23 10:47:03

高并發(fā)系統(tǒng)緩存

2024-09-26 06:30:36

2023-05-04 16:10:13

緩存前端

2020-07-16 08:04:21

瀏覽器緩存策略

2024-05-06 12:20:00

緩存驅(qū)逐緩存

2024-06-28 08:31:54

點(diǎn)贊
收藏

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

主站蜘蛛池模板: 中文字幕久久精品 | 国产 日韩 欧美 在线 | www.久久久| a看片| 国产精品成人69xxx免费视频 | 国产在线视频一区 | 国产精品久久久一区二区三区 | 亚洲欧洲成人 | 九九热免费观看 | 国产一区二区三区在线看 | 免费久久视频 | 国产日韩欧美一区二区 | 日韩欧美视频在线 | 亚洲成人国产精品 | 国产成人精品亚洲日本在线观看 | 亚洲日日夜夜 | 国产精品久久久久久久免费大片 | 欧美成人二区 | 在线免费观看欧美 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 91se在线 | 一级特黄网站 | 激情 婷婷 | 龙珠z国语版在线观看 | 亚洲欧美国产毛片在线 | av毛片 | 福利视频一区二区 | 久久99精品久久久久久 | 日韩色图视频 | 日韩高清中文字幕 | 成人免费视频观看视频 | a成人| 综合久| 国产精品99久久久久久宅男 | 欧美久久久久久 | 99精品欧美一区二区三区综合在线 | 欧美日韩高清 | 在线超碰| 91免费观看国产 | 久久久久久毛片免费观看 | 国产在线1 |