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

離開頁面時,你知道如何可靠地發送一個 HTTP 請求嗎?

開發 前端
當頁面因為某些原因被終止時,瀏覽器是沒法保證正在進行中的 HTTP 請求能夠成功完成。這些請求的可信度取決于多個因素 —— 網絡連接、程序性能甚至是外部服務器自身的配置。

在某些情況下,當用戶跳轉到其他頁面或者提交一個表單的時候,我需要發送一個 HTTP 請求,用于把一些數據記錄到日志中。思考如下場景——當一個鏈接被點擊時,需要發送一些信息到外部服務器:

<a href="/some-other-page" id="link">Go to Page</a>

<script>
document.getElementById('link').addEventListener('click', (e=> {
  fetch("/log", {
    method"POST",
    headers: {
      "Content-Type""application/json"
    }, 
    bodyJSON.stringify({
      some"data"
    })
  });
});
</script>

這個示例并不復雜。鏈接的跳轉行為仍然會正常的執行(我并沒有使用 e.preventDefault() 去阻止),但是在這個行為發生之前,單擊事件會觸發一個 POST 請求。我們只需要它發送到我們正在訪問的服務即可,而不需要等待這個請求返回。

乍一看你可能會覺得處理這個請求是同步的,請求發出后,在我們繼續跳頁面的同時,其他服務器會成功地處理這個請求。但事實上,情況并非總是如此。

瀏覽器不能保證持續保持 HTTP 請求的打開狀態

當頁面因為某些原因被終止時,瀏覽器是沒法保證正在進行中的 HTTP 請求能夠成功完成(了解更多[1]關于頁面的“終止”以及頁面生命周期的其他狀態)。這些請求的可信度取決于多個因素 —— 網絡連接、程序性能甚至是外部服務器自身的配置。

因此,這種情況下發出的數據可靠性很糟,如果你的業務決策依賴這些日志數據,這可能會帶來一個潛在的重大隱患。

為了說明這種場景的不可靠性,我編寫了一個基于 Express 的簡單應用,并使用以上代碼實現了一個頁面。當點擊鏈接時,瀏覽器會導航到 /other,但此之前,會觸發一個 POST 請求。

開始之前,我會將開發者工具的“網絡”標簽打開,使用“低速3G”連接速度。一旦頁面加載完成,我就清除日志,事情看起來相當正常:

圖片1

但是一旦我單擊了鏈接,事情就不太對了。當頁面導航發生的時候,POST 請求就被取消了。

圖片2

這使得我們對外部服務實際上能夠處理完這個請求沒有足夠的信心。為了驗證這個行為,當我們以編程方式使用 ??window.location?? 導航時,相同的情況也會發生:

document.getElementById('link').addEventListener('click', (e=> {
+ e.preventDefault();

  // Request is queued, but cancelled as soon as navigation occurs. 
  fetch("/log", {
    method"POST",
    headers: {
      "Content-Type""application/json"
    }, 
    bodyJSON.stringify({
      some'data'
    }),
  });

+ window.location = e.target.href;
});

無論導航是如何或何時發生的,以及活動頁面是如何終止的,那些未完成的請求都有被拋棄的風險。

但是它們為什么會被取消呢?

問題的根源在于,默認情況下 XHR 請求(通過 fetch 或 XMLHttpRequest)是異步且非阻塞的。一旦請求進入隊列,請求的實際工作就會交給后臺的瀏覽器級 API。

從性能考慮,這是正確的行為——你并不會希望主線程被請求給堵塞。但是這會帶來一個風險,就是當頁面進入“終止”狀態時,這些請求會被拋棄,這就導致了在后臺運行的服務不能保證正確完成。這是谷歌對于這個特定生命周期狀態的總結[2]

頁面瀏覽器開始卸載頁面并對其內存清理時,該頁面就進入終止狀態。在此狀態下,不會執行任何新任務[3],同時正在處理中的任務如果運行時間過長可能會被殺死。

簡單來說,瀏覽器的設計是基于這樣的假設:只要頁面關閉時,后臺隊列中的任何進程都不需要再繼續執行。

所以我們有沒有別的選擇?

似乎避免這個問題最直接的方法是盡可能地延遲用戶操作,直到請求的響應返回。在過去,通過使用 XMLHttpRequest 支持的同步標志[4]來實現。但這是錯誤的,因為使用這種方式會完全的阻斷主線程,從而造成一大堆的性能問題——關于這個問題我曾寫過一些東西[5]——所以不要考慮這種方式了。事實上,平臺也正在移除這種方式(Chrome v80+ 已經將其移除[6])。

即使你仍打算采用這種方式,也最好使用 Promise 并在其響應返回時執行 resolve。這樣你就可以安全地執行該行為。對上面我們示例的代碼進行修改:

document.getElementById('link').addEventListener('click'async (e=> {
  e.preventDefault();

  // Wait for response to come back...
  await fetch("/log", {
    method"POST",
    headers: {
      "Content-Type""application/json"
    }, 
    bodyJSON.stringify({
      some'data'
    }),
  });

  // ...and THEN navigate away.
   window.location = e.target.href;
});

這樣就可以完成工作了,但存在的缺點也不容忽視。

首先,它會使期望的行為延遲發生,這會降低用戶體驗。 收集分析數據當然會給商務(或許也會對潛在用戶)帶來收益,但為此收益讓既有用戶付出代價就不是一個好的選擇了。更不用說,作為外部依賴,服務本身的任何延遲或其他性能問題都將暴露給用戶。如果因為分析服務的超時導致了客戶無法完成高價值的操作,那么所有人都將蒙受損失。

其次,這種方法并不像聽起來那樣可靠,因為一些終止行為不能通過編程方式延遲。 例如,??e.preventDefault()?? 在延遲關閉瀏覽器標簽時是不起作用的。所以,最好的情況下,這種方式可以涵蓋一些用戶行為的數據收集,但缺乏足夠的可信度。

指示瀏覽器保持未完成的請求

值得高興的是,絕大多數瀏覽器都內置了保持未完成 HTTP 請求的能力,而且不需要犧牲用戶體驗。

使用 Fetch 的 keepalive 標志

當使用 fetch() 方法時,如果把 keeplive 標志[7]設置為 true,即便頁面被終止請求也會保持連接。對我們最初的用例進行修改如下:

<a href="/some-other-page" id="link">Go to Page</a>

<script>
  document.getElementById('link').addEventListener('click', (e=> {
    fetch("/log", {
      method"POST",
      headers: {
        "Content-Type""application/json"
      }, 
      bodyJSON.stringify({
        some"data"
      }), 
      keepalivetrue
    });
  });
</script>

當單擊鏈接時,頁面進行跳轉,但是請求沒有被取消。

圖片3

事實上,我們是留下了一個(unknown)狀態,這只是因為活動頁面不會等待接收任何類型的響應。

只需要添加這樣一行代碼,使得修復這個問題看起來很簡單,特別是當它被常見瀏覽器的 API 支持時。但如果你想尋找一個更專業的接口方式,還有另外一種幾乎相同受到瀏覽器支持的方法。

使用 Navigator.sendBeacon() 方法

??sendbeacon()?? 方法專門用于發送單向請求(beacons[8])。一個基本的實現是這樣的,發送一個帶有 JSON 字符串和一個 Content-Type 是 "text/plain" 的 POST 請求:

navigator.sendBeacon('/log'JSON.stringify({
  some"data"
}));

但是這個 API 并不允許你設置自定義的 headers。所以,為了方便我們使用 "application/json" 格式發送數據,我們需要使用 Blob 做一點小的調整:

<a href="/some-other-page" id="link">Go to Page</a>

<script>
  document.getElementById('link').addEventListener('click', (e=> {
    const blob = new Blob([JSON.stringify({ some"data" })], { type'application/json; charset=UTF-8' });
    navigator.sendBeacon('/log'blob));
  });
</script>

最后,我們可以得到相同的結果——請求在頁面跳轉之后也可以完成。但是,還有一些情況下可能會讓它比 fetch() 更有優勢: beacons 以低優先級發送。

為了演示說明,以下是 Network 選項卡中同時使用帶 keepalive 的 fetch() 和 sendBeacon() 時的情況:

圖片4

默認情況下,fetch() 獲得一個 “高” 優先級,而 beacon(上圖中的 “ping” 類型) 具有 “最低” 優先級。對于那些對頁面功能不是很重要的請求,這是一件好事。直接引用 Beacon規范[9]:

該規范定義了一個接口,該接口 […] 在確保此類請求仍然得到處理并交付到目的地的情況下,最大限度地減少了其與其他時間敏感操作的資源競爭。

換個說法就是,sendBeacon() 方法確保了那些程序中真正的關鍵過程和用戶體驗不會受到影響。

給 ping 屬性榮譽提名

值得一提的是越來越多的瀏覽器開始支持 ping 屬性[10]。當在鏈接上設置該屬性時,鏈接被點擊時會觸發一個小型的 POST 請求:

<a href="http://localhost:3000/other" ping="http://localhost:3000/log">
  Go to Other Page
</a>

這些請求 headers 里會帶著鏈接所在頁面的地址(ping-from)以及鏈接 href 指向的地址(ping-to):

headers: {
  'ping-from''http://localhost:3000/',
  'ping-to''http://localhost:3000/other'
  'content-type''text/ping'
  // ...other headers
},

這在技術上很接近發送一個 beacon,但是有一些需要注意的限制:

1. 它被嚴格的限制只能在超鏈接使用。你不能將它用于跟蹤與其他交互相關的數據,比如按鈕點擊或表單提交。

2. 大部分瀏覽器支持的很好,但不是所有[11]在撰寫本文時,Firefox還沒有默認啟用這個功能。

3. 你不能使用其發送自定義的數據。如前面提到的,除了請求本身包含的 header 信息外,你最多在 header 中額外獲得幾個 ping-*。

考慮以上所有因素,如果你只是要求發送簡單的請求,并且不想編寫任何自定義 JavaScript,那么 ping 是一個很好的工具。但如果你需要發送一些更有意義的東西,這就不是最好的選擇。

那么,究竟應該如何選擇?

是使用 keep-alive 標志的 fetch,還是用 sendBeacon 來發送頁面終止時的請求肯定需要權衡。以下建議或許可以幫助你在不同情況下做出正確的選擇:

以下情況可以選擇 fetch() + keepalive:

  • 你需要簡單的發送自定義 headers 的請求
  • 你需要使用 GET 而非 POST
  • 你需要兼容老舊的瀏覽器(例如 IE),并已經有了一個 fetch 方法的 polyfill

以下情況使用 sendBeacon() 或許更好:

  • 你只需要發送一個簡單的服務請求,而不需要太多的定制化
  • 你喜歡更簡約更優雅的代碼方式
  • 你需要保證該請求不會和其他更重要的請求競爭資源

不要再踩我踩過的坑

我之所以會去深入探究頁面終止時瀏覽器是如何處理進行中的請求,是因為一段時間以前,我的團隊發現,當我們開始在表單提交時發送特定分析請求后,該類型的分析日志的收集率突然發生了變化。這一變化是突然而顯著的——比之前下降了約30%。

通過深入研究這個問題產生的原因,找到了避免它的工具,從而挽救了局面。所以,如果可以的話,我希望我對這些小挑戰的理解,能夠幫助你們避免那些我們曾踩過的坑。讓記日志變得更加愉快!

參考資料

[1]了解更多: ?https://developers.google.com/web/updates/2018/07/page-lifecycle-api?

[2]這是谷歌對于這個特定生命周期狀態的總結: ?https://developers.google.com/web/updates/2018/07/page-lifecycle-api#states?

[3]新任務: ?https://html.spec.whatwg.org/multipage/webappapis.html#queue-a-task?

[4]同步標志: ?https://xhr.spec.whatwg.org/#synchronous-flag?

[5]關于這個問題我曾寫過一些東西: ?https://macarthur.me/posts/use-web-workers-for-your-event-listeners?

[6]已經將其移除: ?https://developers.google.com/web/updates/2019/12/chrome-80-deps-rems?

[7]keeplive 標志: ?https://fetch.spec.whatwg.org/#request-keepalive-flag?

[8]beacons: ?https://w3c.github.io/beacon/#sec-processing-model?

[9]Beacon規范: ?https://www.w3.org/TR/beacon/?

[10]ping 屬性: ?https://css-tricks.com/the-ping-attribute-on-anchor-links/?

[11]但不是所有: ?https://caniuse.com/ping?

[12]參考原文: ??https://css-tricks.com/send-an-http-request-on-page-exit/??

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2022-07-03 17:55:53

HTTP頁面瀏覽器

2025-07-21 06:10:00

瀏覽器HTTPJavaScript

2023-10-11 17:58:22

2009-11-09 09:11:17

2018-05-17 16:25:27

2015-04-29 10:02:45

框架如何寫框架框架步驟

2022-05-09 10:47:08

登錄SpringSecurity

2020-10-16 15:06:59

開發技術方案

2019-11-14 16:05:29

TCPHTTP前端

2023-11-27 08:57:24

GoGET

2021-03-10 13:19:09

LinuxCPU程序

2020-10-20 14:01:16

HTTP

2019-11-18 15:50:11

AjaxJavascript前端

2021-08-26 06:58:14

Http請求url

2010-11-19 09:16:38

2024-01-26 11:08:57

C++函數返回不同類型

2019-07-09 06:13:09

TCPHTTP網絡協議

2020-04-08 08:35:20

JavaScript模塊函數

2018-07-30 16:31:00

javascriptaxioshttp

2025-07-15 09:08:36

點贊
收藏

51CTO技術棧公眾號

欧美成人a∨高清免费观看| 久久精品视频在线看| 欧美精品一区二区免费| 日韩少妇一区二区| 免费观看成人性生生活片| 日韩理论片在线| 久久大片网站| 国产精品无码久久av| 一区二区三区高清视频在线观看| 一本久久综合亚洲鲁鲁| 日本wwwwwww| 日本一道高清亚洲日美韩| 亚洲精品自拍动漫在线| 国产在线一区二区三区四区| 中文字幕一区二区人妻痴汉电车| 亚洲人成免费| 日韩一级黄色av| 久久久久久久无码| 精品亚洲a∨一区二区三区18| 欧美日韩亚洲视频一区| 91精品一区二区三区四区| 国产视频二区在线观看| 国产99久久久国产精品潘金网站| 国产精品扒开腿爽爽爽视频| www.av视频在线观看| 国产韩国精品一区二区三区| 亚洲欧美精品在线| 欧美一区激情视频在线观看| 国产又粗又黄又爽视频| 午夜一区二区三区不卡视频| 久久成人一区二区| 欧美 日韩 国产 成人 在线观看| 中文字幕一区二区三区日韩精品| 欧美日韩高清一区| 亚洲欧洲精品一区| 婷婷五月综合激情| 国产91精品入口| 91久久精品视频| 青娱乐国产在线视频| 欧美大片91| 欧美日韩一区二区电影| 日韩有码免费视频| 亚洲v.com| 天天操天天干天天综合网| 天堂8在线天堂资源bt| av电影免费在线观看| 亚洲视频在线观看一区| 亚洲一卡二卡| 1024视频在线| 中文字幕日韩欧美一区二区三区| 91在线视频成人| 中文字幕一区二区三区四区免费看 | 亚洲精品一区av| 欧美视频在线一区二区三区| 日本www.色| 三上悠亚激情av一区二区三区| 欧美日韩一区二区在线| 国产综合av在线| 台湾佬中文娱乐网欧美电影| 欧美日韩亚洲一区二| 人妻无码视频一区二区三区| 韩国成人在线| 在线播放亚洲一区| 97超碰人人看| 北条麻妃一区二区三区在线观看| 欧美va亚洲va在线观看蝴蝶网| 无码人妻一区二区三区免费n鬼沢 久久久无码人妻精品无码 | 亚洲欧美日本在线| 青青在线视频免费观看| 日本孕妇大胆孕交无码| 亚洲一区二区三区中文字幕在线| 国产爆乳无码一区二区麻豆| 九色porny自拍视频在线播放| 激情成人中文字幕| 天美星空大象mv在线观看视频| 青青久久精品| 精品电影一区二区| 亚洲第一成人网站| 99久久亚洲精品蜜臀| 久精品免费视频| 国产成人无码精品久久久久| 老司机精品视频网站| 成人黄色在线播放| 色一情一乱一区二区三区| 久久亚洲二区三区| 中文字幕久久一区| 678在线观看视频| 日本高清不卡视频| 少妇丰满尤物大尺度写真| 日韩大胆成人| 久久精品99久久久香蕉| 日韩av无码中文字幕| 国产日韩欧美一区二区三区| 中文字幕欧美国内| 久久免费视频99| 玖玖国产精品视频| 91精品久久久久久蜜桃| 美州a亚洲一视本频v色道| 1000部国产精品成人观看| 无码精品a∨在线观看中文| 精品美女一区| 日韩av一区二区在线| 中国特级黄色片| 自拍欧美一区| 久久久久久久久爱| 国产又粗又长又大视频| 久久综合久久鬼色中文字| 中文字幕乱码免费| 精品123区| 日韩电影免费观看中文字幕| 视频这里只有精品| 亚洲一区色图| 日产精品99久久久久久| 国产xxxx在线观看| 亚洲国产精品成人综合色在线婷婷| 久艹在线免费观看| 精品网站在线| 精品一区二区三区四区| 在线观看国产网站| 亚洲理论电影网| 国产精品爱啪在线线免费观看| 日本加勒比一区| 亚洲精品视频免费观看| 粉色视频免费看| re久久精品视频| 欧美一级视频在线观看| 免费观看黄色一级视频| 亚洲欧美激情插| 老司机久久精品| 欧美三级美国一级| 日本免费一区二区三区视频观看| 免费观看黄色一级视频| 一区二区三区在线播放| 青青草精品视频在线| 国产精品亚洲一区二区在线观看| 欧美一区二区三区四区在线观看| 四川一级毛毛片| 久久看人人摘| 国产欧美精品日韩精品| 丁香婷婷在线| 欧美性受极品xxxx喷水| 国产又粗又猛又爽又黄av | 国产精品夫妻自拍| 国产aaaaa毛片| 欧美日韩精品一区二区视频| 国产精品成人免费电影| 成年人在线看| 欧美亚洲高清一区二区三区不卡| 大吊一区二区三区| 美女在线视频一区| 欧美日韩视频免费在线观看| 亚洲精品一区二区在线播放∴| 色婷婷成人综合| 一二三四区视频| 亚洲欧美另类久久久精品2019| 中文字幕一区二区在线观看视频 | 天堂网av成人| 日韩美女福利视频| melody高清在线观看| 欧美精三区欧美精三区| 搜索黄色一级片| 国产精品99精品久久免费| 亚洲爆乳无码精品aaa片蜜桃| 午夜电影一区| 7777kkkk成人观看| 国产黄色免费在线观看| 欧美日韩二区三区| 激情综合网五月天| 99久久精品国产一区| 欧美少妇一区| 影视一区二区三区| 日韩中文字幕精品| 成 人 免费 黄 色| 国产丝袜美腿一区二区三区| wwwwww.色| 久久久久电影| 国产主播一区二区三区四区| 少妇一区视频| 欧美另类暴力丝袜| 天堂在线观看视频| 欧美日韩成人在线| 国产在线拍揄自揄拍无码视频| 91一区二区在线| 亚洲另类第一页| 亚洲无线一线二线三线区别av| 欧美裸体网站| 免费观看亚洲视频大全| 欧美亚洲另类在线| 国产精品剧情| 日韩国产激情在线| 国产影视一区二区| 欧美日韩国产一区在线| 久久福利免费视频| 91亚洲午夜精品久久久久久| 制服丝袜中文字幕第一页| 在线日韩中文| 中文字幕在线亚洲精品| 日本欧美三级| 亚洲iv一区二区三区| xx欧美视频| 色综合久久久888| 电影在线一区| 亚洲久久久久久久久久久| 999精品国产| 在线观看91视频| 五月天婷婷丁香| 亚洲人一二三区| av电影网站在线观看| k8久久久一区二区三区| 中文字幕一区久久| 久久福利影视| 国产av人人夜夜澡人人爽麻豆| 久久精品av| 日韩欧美一区二区三区四区五区| 在线观看网站免费入口在线观看国内| 丝袜一区二区三区| 男操女在线观看| 亚洲激情电影中文字幕| 精品人妻伦一二三区久久| 欧美亚日韩国产aⅴ精品中极品| www.日本精品| 亚洲高清免费观看| 国产女人18水真多毛片18精品| 国产人成一区二区三区影院| 亚洲中文字幕无码av| 国产盗摄视频一区二区三区| 蜜臀一区二区三区精品免费视频 | 日本wwwxx| 久久成人免费电影| 妺妺窝人体色www在线观看| 亚洲伦理精品| 国产无限制自拍| 亚洲婷婷免费| 日韩国产一级片| 亚洲精品婷婷| 国产中文字幕二区| 亚洲大胆在线| 九九爱精品视频| 99国产精品私拍| 国产素人在线观看| 在线午夜精品| 日韩在线视频在线观看| 99精品热6080yy久久| www.av中文字幕| 香蕉久久久久久久av网站| 亚洲美免无码中文字幕在线| 99精品国产福利在线观看免费| 成人性免费视频| 国产精品尤物| 免费在线观看的毛片| 日韩精品1区2区3区| 亚洲日本一区二区三区在线不卡| 久久不见久久见国语| 欧洲精品久久| 日韩精品影视| 91视频成人免费| 亚洲天堂激情| 日韩少妇内射免费播放18禁裸乳| 先锋影音久久久| 九色91popny| 韩国三级电影一区二区| 日本少妇一级片| 99久久精品情趣| 91成人在线免费视频| 国产精品色呦呦| www.5588.com毛片| 亚洲自拍偷拍麻豆| 少妇一级淫片免费放中国| 色婷婷久久久亚洲一区二区三区| 这里只有久久精品视频| 亚洲无人区一区| 日韩av女优在线观看| 色婷婷精品大视频在线蜜桃视频| 这里只有精品免费视频| 日韩一区二区在线观看视频播放| 欧美视频一二区| 国产亚洲成精品久久| a在线免费观看| 欧美一区二区三区精品电影| 国产成人午夜性a一级毛片| 2019中文字幕在线免费观看| 久久久一本精品| 亚洲xxxx视频| 一呦二呦三呦国产精品| 一本一道久久久a久久久精品91| 欧美成人一区二免费视频软件| 免费看国产曰批40分钟| 男男成人高潮片免费网站| 女教师高潮黄又色视频| 国产亚洲女人久久久久毛片| 成人免费精品动漫网站| 欧美视频第一页| 国产精品伊人久久| 日韩av影片在线观看| 麻豆网站在线看| 欧美专区在线播放| 大胆国模一区二区三区| 欧美黑人xxxxx| 欧美日本三区| 亚洲人视频在线| 久久精品一区二区三区不卡| 亚洲区一区二区三| 欧美性猛交xxxxx水多| 精品免费久久久| 中文字幕亚洲激情| 综合日韩av| 岛国一区二区三区高清视频| 爽成人777777婷婷| 亚洲熟妇av一区二区三区| 国产高清精品网站| 波多野结衣一二三四区| 午夜亚洲国产au精品一区二区| 一区二区视频在线免费观看| 亚洲第一网站男人都懂| 老司机免费在线视频| 国产精品久久久久免费a∨| 欧美美女啪啪| 黄色一级片黄色| 精品一区二区免费看| 丰满少妇高潮一区二区| 激情懂色av一区av二区av| 成人免费视频国产| 久久成人精品一区二区三区| 99精品美女视频在线观看热舞| 日韩三级电影免费观看| 性高湖久久久久久久久| 污网站免费观看| 亚洲自拍另类综合| 国产日韩欧美中文字幕| 久久精品国产99国产精品澳门| 欧美xnxx| 亚洲美女搞黄| 美腿丝袜亚洲综合| 国产精成人品免费观看| 色综合久久中文综合久久牛| 欧美拍拍视频| 欧亚精品中文字幕| 亚洲人成精品久久久| 92看片淫黄大片一级| 2023国产精品自拍| 美女又爽又黄免费视频| 亚洲男人天堂网站| 欧美gay囗交囗交| 日韩精品极品视频在线观看免费| 鲁大师成人一区二区三区 | 神马午夜久久| 日本精品一区二区三区四区| 91日韩在线专区| 亚洲色成人www永久网站| 一本大道久久加勒比香蕉| av久久网站| 精品国产无码在线| 国产精品99久久久久久似苏梦涵| 久久老司机精品视频| 精品1区2区在线观看| 涩涩视频在线| 日韩在线第一区| 国产在线精品免费| 久久精品女人毛片国产| 精品亚洲永久免费精品| 日本肉肉一区| 蜜桃视频成人在线观看| 成人免费高清视频在线观看| 欧美三级一区二区三区| 亚洲人成伊人成综合网久久久| 欧美videos粗暴| 国产91视频一区| 99riav一区二区三区| 亚洲国产精品无码久久久| 日韩中文字在线| jizz18欧美18| 国产熟女高潮视频| 国产精品国产成人国产三级| 性做久久久久久久| 91成人在线视频| 日韩在线中文| 中文在线观看免费视频| 在线视频国产一区| av免费在线观| 欧美一区二区综合| 国产黄色91视频| 男人天堂视频网| 久久av.com| 精品国产1区| www.四虎精品| 欧美又粗又大又爽| 久久www人成免费看片中文| 欧美一区免费视频| 国产成人免费av在线| 波多野结衣日韩| 久久久久亚洲精品| 久久综合av| 野花社区视频在线观看| 91麻豆精品国产| 在线观看的黄色| 国产xxxx振车| 国产精品乱码人人做人人爱| 天堂а在线中文在线无限看推荐| 国产在线观看精品| 天堂一区二区在线|