日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

滴滴工程师带你深入理解 HTTP通信细节

發(fā)布時(shí)間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 滴滴工程师带你深入理解 HTTP通信细节 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊藍(lán)字加關(guān)注,人在江湖不迷路

作者:饒全成

出處:碼農(nóng)桃花源

上一篇文章中,我們學(xué)會(huì)了用wireshark和tcpdump來分析TCP的“三次握手,四次揮手”,非常好用。這哥倆就是傳說中的 錘子,拿著 錘子,看什么都像 釘子!在這篇文章中,我對(duì)準(zhǔn)了 HTTP這顆釘子砸下去,咳咳。

為了對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的“流轉(zhuǎn)”有更加深刻的理解,我在docker(遠(yuǎn)程)上部署一個(gè)服務(wù),支持http方式調(diào)用。從客戶端(本地)用http方式請(qǐng)求其中的一個(gè)接口,并得到響應(yīng)數(shù)據(jù)。同時(shí)本地通過wireshark抓包,遠(yuǎn)程用tcpdump抓包,然后分析過程中的所有通信細(xì)節(jié)。悲劇是把美好的東西撕碎給人看,而我則是把復(fù)雜的東西撕碎了給人看。

文章稍長(zhǎng),請(qǐng)?jiān)诳幢疚臅r(shí)保持耐心。我先通過工具獲取HTTP通信的數(shù)據(jù)包,再來抽絲剝繭,深入二進(jìn)制的天地里,解密HTTP所有的通信細(xì)節(jié)。分析過程中,由點(diǎn)到面,將相關(guān)知識(shí)串接起來。保證全篇讀完之后,你對(duì)HTTP的理解會(huì)上升一個(gè)臺(tái)階!

為了更好的閱讀體驗(yàn),我手動(dòng)貼上本文的目錄:

HTTP報(bào)文截獲

背景介紹

我手頭現(xiàn)在有一個(gè)地理幾何相關(guān)的服務(wù),它提供一組接口對(duì)外使用。其中有一個(gè)接口是 Fence2Area. 使用方傳入一個(gè)圍欄(由點(diǎn)的列表組成,點(diǎn)由<經(jīng)度,緯度>表示)、點(diǎn)的坐標(biāo)系類型(谷歌地圖用的是wgs84, 國內(nèi)騰訊、高德用的是soso, 而百度用的是另一套自己的坐標(biāo)系),接口輸出的則是圍欄的面積。

我請(qǐng)求服務(wù)的“Fence2Area”接口,輸入圍欄(fence)頂點(diǎn)(lng, lat)坐標(biāo)、坐標(biāo)系類型(coordtype),輸出的則是多邊形的面積(area).

一次正常的請(qǐng)求示例url, 這個(gè)大家都不陌生(我用docker_ip代替真實(shí)的ip):

http://docker_ip:7080/data?cmd=Fence2Area&meta={"caller":"test","TraceId":"test"}&request={"fence":[{"lng":10.2,"lat":10.2}, {"lng":10.2,"lat":8.2}, {"lng":8.2,"lat":8.2}, {"lng":8.2,"lat":10.2}],"coordtype":2}

請(qǐng)求發(fā)出后,服務(wù)器進(jìn)行處理,之后,客戶端收到返回的數(shù)據(jù)如下:

{ "data": { "area": 48764135597.842606 }, "errstr": "" }

area字段表示面積, errstr表示出錯(cuò)信息,空說明沒有出錯(cuò)。

抓包

在真正發(fā)送請(qǐng)求之前,需要進(jìn)行抓包前的設(shè)置。在本地mac,我用wireshark; 而在遠(yuǎn)程docker上,我用tcpdump工具。

mac本地

設(shè)置wireshark包過濾器,監(jiān)控本地主機(jī)和遠(yuǎn)程docker之間的通信。

ip.addr eq docker_ip

點(diǎn)擊開始捕獲。

遠(yuǎn)程docker

該服務(wù)通過7080端口對(duì)外提供,使用如下命令捕獲網(wǎng)絡(luò)包:

tcpdump -w /tmp/testHttp.cap port 7080 -s0

請(qǐng)求 && 分析

準(zhǔn)備工作做完,我選了一個(gè)神圣的時(shí)刻,在本地通過瀏覽器訪問如下url:

http://docker_ip:7080/data?cmd=Fence2Area&meta={"caller":"test","TraceId":"test"}&request={"fence":[{"lng":10.2,"lat":10.2}, {"lng":10.2,"lat":8.2}, {"lng":8.2,"lat":8.2}, {"lng":8.2,"lat":10.2}],"coordtype":2}

這樣本地的wireshark和遠(yuǎn)程的tcpdump都能抓取到HTTP網(wǎng)絡(luò)數(shù)據(jù)包。

關(guān)閉服務(wù)進(jìn)程

正式請(qǐng)求之前,我們先看一下幾種特殊的情形。

首先,關(guān)閉gcs服務(wù)進(jìn)程,請(qǐng)求直接返回RST報(bào)文。

如上圖,我在請(qǐng)求的時(shí)候,訪問服務(wù)端的另一個(gè)端口 5010, 這個(gè)端口沒有服務(wù)監(jiān)聽,和關(guān)閉gcs服務(wù)進(jìn)程是同樣的效果。可以看到,客戶端發(fā)送SYN報(bào)文,但直接被遠(yuǎn)程docker RST掉了。因?yàn)榉?wù)端操作系統(tǒng)找不到監(jiān)聽此端口的進(jìn)程。

關(guān)閉docker

關(guān)閉docker, 由于發(fā)送的SYN報(bào)文段得不到響應(yīng),因此會(huì)進(jìn)行重試,mac下重試的次數(shù)為10次。

先每隔1秒重試了5次,再用“指數(shù)退避”的時(shí)間間隔重試,2s, 4s, 8s, 16s, 32s. 最后結(jié)束。

重啟docker

先進(jìn)行一次正常的訪問,隨后重啟docker。并再次在本地訪問以上url, 瀏覽器這時(shí)還是用的上一次的端口,訪問到服務(wù)端后,因?yàn)樗呀?jīng)重啟了,所以服務(wù)端已經(jīng)沒有這個(gè)連接的消息了。因此會(huì)返回一個(gè)RST報(bào)文。

正常請(qǐng)求

服務(wù)正常啟動(dòng),正常發(fā)送請(qǐng)求,這次請(qǐng)求成功,那是當(dāng)然的,嘿嘿!

這是在mac上用wireshark捕獲的數(shù)據(jù)包,共7個(gè)包,前三個(gè)包為3次握手的包,第四個(gè)包為 HTTP層發(fā)送的請(qǐng)求數(shù)據(jù),第五個(gè)包為服務(wù)端的TCP 確認(rèn)報(bào)文,第六個(gè)包為服務(wù)端在 HTTP層發(fā)送的響應(yīng)數(shù)據(jù),第七個(gè)包為mac對(duì)第六個(gè)包的確認(rèn)報(bào)文。

重點(diǎn)來關(guān)注后面幾個(gè)包,先看第四個(gè)包,

0x0000: ?4500 0295 0000 4000 3606 623b ac17 ccdc 0x0010: ?0a60 5cd4 db9b 1ba8 a59a 46ce 6d03 e87d 0x0020: ?8018 1015 0ee7 0000 0101 080a 2e4c b2ef 0x0030: ?0f20 3acf 4745 5420 2f64 6174 613f 636d 0x0040: ?643d 4665 6e63 6532 4172 6561 266d 6574 0x0050: ?613d 7b25 3232 6361 6c6c 6572 2532 323a 0x0060: ?2532 3274 6573 7425 3232 2c25 3232 5472 0x0070: ?6163 6549 6425 3232 3a25 3232 7465 7374 0x0080: ?2532 327d 2672 6571 7565 7374 3d7b 2532 0x0090: ?3266 656e 6365 2532 323a 5b7b 2532 326c 0x00a0: ?6e67 2532 323a 3130 2e32 2c25 3232 6c61 0x00b0: ?7425 3232 3a31 302e 327d 2c25 3230 7b25 0x00c0: ?3232 6c6e 6725 3232 3a31 302e 322c 2532 0x00d0: ?326c 6174 2532 323a 382e 327d 2c25 3230 0x00e0: ?7b25 3232 6c6e 6725 3232 3a38 2e32 2c25 0x00f0: ?3232 6c61 7425 3232 3a38 2e32 7d2c 2532 0x0100: ?307b 2532 326c 6e67 2532 323a 382e 322c 0x0110: ?2532 326c 6174 2532 323a 3130 2e32 7d5d 0x0120: ?2c25 3232 636f 6f72 6474 7970 6525 3232 0x0130: ?3a32 7d20 4854 5450 2f31 2e31 0d0a 486f 0x0140: ?7374 3a20 3130 2e39 362e 3932 2e32 3132 0x0150: ?3a37 3038 300d 0a55 7067 7261 6465 2d49 0x0160: ?6e73 6563 7572 652d 5265 7175 6573 7473 0x0170: ?3a20 310d 0a41 6363 6570 743a 2074 6578 0x0180: ?742f 6874 6d6c 2c61 7070 6c69 6361 7469 0x0190: ?6f6e 2f78 6874 6d6c 2b78 6d6c 2c61 7070 0x01a0: ?6c69 6361 7469 6f6e 2f78 6d6c 3b71 3d30 0x01b0: ?2e39 2c2a 2f2a 3b71 3d30 2e38 0d0a 5573 0x01c0: ?6572 2d41 6765 6e74 3a20 4d6f 7a69 6c6c 0x01d0: ?612f 352e 3020 284d 6163 696e 746f 7368 0x01e0: ?3b20 496e 7465 6c20 4d61 6320 4f53 2058 0x01f0: ?2031 305f 3133 5f36 2920 4170 706c 6557 0x0200: ?6562 4b69 742f 3630 352e 312e 3135 2028 0x0210: ?4b48 544d 4c2c 206c 696b 6520 4765 636b 0x0220: ?6f29 2056 6572 7369 6f6e 2f31 322e 302e 0x0230: ?3220 5361 6661 7269 2f36 3035 2e31 2e31 0x0240: ?350d 0a41 6363 6570 742d 4c61 6e67 7561 0x0250: ?6765 3a20 7a68 2d63 6e0d 0a41 6363 6570 0x0260: ?742d 456e 636f 6469 6e67 3a20 677a 6970 0x0270: ?2c20 6465 666c 6174 650d 0a43 6f6e 6e65 0x0280: ?6374 696f 6e3a 206b 6565 702d 616c 6976 0x0290: ?650d 0a0d 0a

我們來逐字節(jié)分析。

剩余的數(shù)據(jù)部分即為TCP協(xié)議相關(guān)的。TCP也是20B固定長(zhǎng)度+可變長(zhǎng)度部分。

可變長(zhǎng)度部分,協(xié)議如下:

剩下來的就是數(shù)據(jù)部分了。我們一行一行地看。因?yàn)閔ttp是字符流,所以我們先看一下ascii字符集,執(zhí)行命令:

man ascii

可以得到ascii碼,我們直接看十六進(jìn)制的結(jié)果:

把上表的最后一列連起來,就是:

GET /data?cmd=Fence2Area&meta={%22caller%22:%22test%22,%22TraceId%22:%22test%22}&request={%22fence%22:[{%22lng%22:10.2,%22lat%22:10.2},%20{%22lng%22:10.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:10.2}],%22coordtype%22:2} HTTP/1.1 Host: 10.96.92.212:7080 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15 Accept-Language: zh-cn Accept-Encoding: gzip, deflate Connection: keep-alive

其中,cr nl表示回車,換行。

docker收到數(shù)據(jù)后,會(huì)回復(fù)一個(gè)ack包。第四個(gè)包的總長(zhǎng)度為661字節(jié),去掉IP頭部20字節(jié),TCP頭部固定部分20字節(jié),TCP頭部可選長(zhǎng)度為12字節(jié),共52字節(jié),因此TCP數(shù)據(jù)部分總長(zhǎng)度為661-52=609字節(jié)。另外,序列號(hào)為2778351310.

再來看第5個(gè)包,字節(jié)流如下:

0x0000: ?4500 0034 d28b 4000 4006 8810 0a60 5cd4 0x0010: ?ac17 ccdc 1ba8 db9b 6d03 e87d a59a 492f 0x0020: ?8010 00ec e04e 0000 0101 080a 0f20 3af7 0x0030: ?2e4c b2ef

剩余的數(shù)據(jù)部分即為TCP協(xié)議相關(guān)的。TCP也是20B固定長(zhǎng)度+可變長(zhǎng)度部分。

可變長(zhǎng)度部分,協(xié)議如下:

數(shù)據(jù)部分為空,這個(gè)包僅為確認(rèn)包。

再來看第六個(gè)包,字節(jié)流如下:

0x0000: ?4500 00f9 d28c 4000 4006 874a 0a60 5cd4 0x0010: ?ac17 ccdc 1ba8 db9b 6d03 e87d a59a 492f 0x0020: ?8018 00ec e113 0000 0101 080a 0f20 3af8 0x0030: ?2e4c b2ef 4854 5450 2f31 2e31 2032 3030 0x0040: ?204f 4b0d 0a41 6363 6573 732d 436f 6e74 0x0050: ?726f 6c2d 416c 6c6f 772d 4f72 6967 696e 0x0060: ?3a20 2a0d 0a44 6174 653a 2054 6875 2c20 0x0070: ?3033 204a 616e 2032 3031 3920 3132 3a32 0x0080: ?333a 3437 2047 4d54 0d0a 436f 6e74 656e 0x0090: ?742d 4c65 6e67 7468 3a20 3438 0d0a 436f 0x00a0: ?6e74 656e 742d 5479 7065 3a20 7465 7874 0x00b0: ?2f70 6c61 696e 3b20 6368 6172 7365 743d 0x00c0: ?7574 662d 380d 0a0d 0a7b 2264 6174 6122 0x00d0: ?3a7b 2261 7265 6122 3a34 3837 3634 3133 0x00e0: ?3535 3937 2e38 3432 3630 367d 2c22 6572 0x00f0: ?7273 7472 223a 2222 7d

剩余的數(shù)據(jù)部分即為TCP協(xié)議相關(guān)的。TCP也是20B固定長(zhǎng)度+可變長(zhǎng)度部分。

可變長(zhǎng)度部分,協(xié)議如下:

剩下來的就是數(shù)據(jù)部分了。我們一行一行地看。

把上表的最后一列連起來,就是:

HTTP/1.1 200 OK Access-Control-Allow-Origin: * Date: Thu, 03 Jan 2019 12:23:47 GMT Content-Length: 48 Content-Type: text/plain; charset=utf-8 {"data":{"area":48764135597.842606},"errstr":""}

Content-Length: 48,最后一行的長(zhǎng)度即為48個(gè)字節(jié)。

最后,第七個(gè)包,字節(jié)流如下:

0x0000: ?4500 0034 0000 4000 3606 649c ac17 ccdc 0x0010: ?0a60 5cd4 db9b 1ba8 a59a 492f 6d03 e942 0x0020: ?8010 100f 1eb9 0000 0101 080a 2e4c b314 0x0030: ?0f20 3af8

剩余的數(shù)據(jù)部分即為TCP協(xié)議相關(guān)的。TCP也是20B固定長(zhǎng)度+可變長(zhǎng)度部分。

可變長(zhǎng)度部分,協(xié)議如下:

至此,一次完整的http請(qǐng)求的報(bào)文就解析完了。感覺如何,是不是很親切?

HTTP協(xié)議分析

上面我們把HTTP協(xié)議相關(guān)的數(shù)據(jù)給解構(gòu)了,下面我將對(duì)照上面的數(shù)據(jù)拆解結(jié)果,一步步帶你深入理解HTTP協(xié)議。

整體介紹

HTTP(Hypertext Transfer Protocol)超文本傳輸協(xié)議,是在互聯(lián)網(wǎng)上進(jìn)行通信時(shí)使用的一種協(xié)議。說得更形象一點(diǎn): HTTP是現(xiàn)代互聯(lián)網(wǎng)中使用的公共語言。它最著名的應(yīng)用是用在瀏覽器的服務(wù)器間的通信。

HTTP屬于應(yīng)用層協(xié)議,底層是靠TCP進(jìn)行可靠地信息傳輸。

HTTP在傳輸一段報(bào)文時(shí),會(huì)以 的形式將報(bào)文數(shù)據(jù)的內(nèi)容通過 一條打開的TCP連接按序傳輸。TCP接到上層應(yīng)用交給它的數(shù)據(jù)流之后,會(huì)按序?qū)?shù)據(jù)流打散成一個(gè)個(gè)的分段。再交到IP層,通過網(wǎng)絡(luò)進(jìn)行傳輸。另一端的接收方則相反,它們將接收到的分段按序組裝好,交給上層HTTP協(xié)議進(jìn)行處理。

編碼

我們?cè)賮砘仡櫼幌?#xff1a;

原始的url值:

/data?cmd=Fence2Area&meta={"caller":"test","TraceId":"test"}&request={"fence":[{"lng":10.2,"lat":10.2}, {"lng":10.2,"lat":8.2}, {"lng":8.2,"lat":8.2}, {"lng":8.2,"lat":10.2}],"coordtype":2}

編碼后的url值:

/data?cmd=Fence2Area&meta={%22caller%22:%22test%22,%22TraceId%22:%22test%22}&request={%22fence%22:[{%22lng%22:10.2,%22lat%22:10.2},%20{%22lng%22:10.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:10.2}],%22coordtype%22:2}

在之前的報(bào)文拆解過程中,我們看到多了很多 %22,其實(shí), 0x22是單引號(hào) "的ascii值,

一方面,URL描述的資源為了能通過其他各種協(xié)議傳送,但是有些協(xié)議在傳輸過程中會(huì)剝?nèi)ヒ恍┨囟ǖ淖址?#xff1b;另一方面,URL還是可讀的,所以那些不可打印的字符就不能在URL中使用了,比如空格;最后,URL還得是完整的,它需要支持所有語言的字符。

總之,基于很多原因,URL設(shè)計(jì)者將US-ASCII碼和其轉(zhuǎn)義序列集成到URL中,通過轉(zhuǎn)義序列,就可以用US-ASCII字符集的有限子集對(duì)任意字符或數(shù)據(jù)進(jìn)行編碼了。

轉(zhuǎn)義的方法:百分號(hào)( %)后跟著兩個(gè)表示ASCII碼的十六進(jìn)制數(shù)。比如:

所以上面在瀏覽器發(fā)送給服務(wù)器的URL進(jìn)行了非“安全字符”編碼,也就不奇怪了吧?

在URL中,當(dāng)上面的保留字符用在保留用途之外的場(chǎng)合時(shí),需要對(duì)URL進(jìn)行編碼。

MIME類型

響應(yīng)數(shù)據(jù)中,我們注意到有一個(gè)首部:

Content-Type: text/plain; charset=utf-8

互聯(lián)網(wǎng)上有數(shù)千種不同的數(shù)據(jù)類型,HTTP給每種對(duì)象都打上了MIME(Multipurpose Internet Media Extension, 多用途因特網(wǎng)郵件擴(kuò)展)標(biāo)簽,也就是響應(yīng)數(shù)據(jù)中的 Content-Type. MIME本來是用在郵件協(xié)議中的,后來被移植到了HTTP中。瀏覽器從服務(wù)器上取回了一個(gè)對(duì)象時(shí),會(huì)去查看MIME類型,從而得知如何處理這種對(duì)象,是該展示圖片,還是調(diào)用聲卡播放聲音。MIME通過斜杠來標(biāo)識(shí)對(duì)象的主類型和其中的特定的子類型,下表展示了一些常見的類型,其中的實(shí)體主體是指body部分:

URI/URL/URN

URI(Uniform Resource Identifier, 統(tǒng)一資源標(biāo)識(shí)符)表示服務(wù)器資源,URL(Uniform Resource Locator, 統(tǒng)一資源定位符)和URN(Uniform Resource Name, 統(tǒng)一資源名)是URI的具體實(shí)現(xiàn)。URI是一個(gè)通用的概念,由兩個(gè)主要的子集URL和URN構(gòu)成,URL通過位置、URN通過名字來標(biāo)識(shí)資源。

URL定義了資源的位置,表示資源的實(shí)際地址,在使用URL的過程中,如果URL背后的資源發(fā)生了位置移動(dòng),訪問者就找不到它了。這個(gè)時(shí)候就要用到URN了,它給定資源一個(gè)名字,無論它移動(dòng)到哪里,都可以通過這個(gè)名字來訪問到它,簡(jiǎn)直完美!

URL通常的格式是:

協(xié)議方案+服務(wù)器地址+具體的資源路徑

協(xié)議方案(scheme),如 http, ftp,告知web客戶端怎樣訪問資源);服務(wù)器地址,如 www.oreilly.com; 具體的資源路徑,如 index.html.

HTTP方法

HTTP支持幾種不同的請(qǐng)求方法,每種方法對(duì)服務(wù)器要求的動(dòng)作不同,如下圖是幾種常見的方法:

HEAD方法只獲取頭部,不獲取數(shù)據(jù)部分。通過頭部可以獲取比如資源的類型(Content-Type)、資源的長(zhǎng)度(Content-Length)這些信息。這樣,客戶端可以獲取即將請(qǐng)求資源的一些情況,可以做到心中有數(shù)。

POST用于向服務(wù)器發(fā)送數(shù)據(jù),常見的是提交表單;PUT用于向服務(wù)器上的資源存儲(chǔ)數(shù)據(jù)。

狀態(tài)碼

每條HTTP的響應(yīng)報(bào)文都會(huì)帶上一個(gè)三位數(shù)字的狀態(tài)碼和一條解釋性的“原因短語”,通知客戶端本次請(qǐng)求的狀態(tài),幫助客戶端快速理解事務(wù)處理結(jié)果,最常見的是:

200 OK 404 Not Found 500 Internal Server Error

我們平時(shí)使用瀏覽器的時(shí)候,很多的錯(cuò)誤碼其實(shí)是由瀏覽器處理的,我們感知不到。但是 404NotFound會(huì)穿透重重迷霧,來到我們面前,為何?那是因?yàn)樗麑?duì)我們愛的深沉啊!

客戶端可以據(jù)此狀態(tài)碼,決定下一步的行動(dòng)(如重定向等)。

三位數(shù)字的第一位表示分類:

報(bào)文格式

HTTP報(bào)文實(shí)際上是由一行行的字符串組成的,每行字符串的末尾用 \r\n分隔,人類可以很方便的閱讀。順便說一句,不是所有的協(xié)議都對(duì)人類這么友好的,像thrift協(xié)議,直接甩一堆字節(jié)給你,告訴你說 0x0001表示調(diào)用方法,諸如此類的,你只能對(duì)著一個(gè)十六進(jìn)制的數(shù)據(jù)塊一個(gè)個(gè)地去“解碼”。不可能像HTTP協(xié)議這樣,直接將字符編碼,人類可以直接讀懂。

舉個(gè)簡(jiǎn)單的請(qǐng)求報(bào)文和響應(yīng)報(bào)文的格式的例子:

實(shí)際上,請(qǐng)求報(bào)文也是可以有body(主體)部分的。請(qǐng)求報(bào)文是由 請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行、請(qǐng)求數(shù)據(jù)四個(gè)部分組成。唯一要注意的一點(diǎn)就是,請(qǐng)求報(bào)文即使body部分是空的,請(qǐng)求頭部后的 回車換行符也是必須要有的。

響應(yīng)報(bào)文的格式和請(qǐng)求報(bào)文的格式類似:

請(qǐng)求報(bào)文、響應(yīng)報(bào)文的起始行和響應(yīng)頭部里的字段都是文本化、結(jié)構(gòu)化的。而請(qǐng)求body卻可以包含任意二進(jìn)制數(shù)據(jù)(如圖片、視頻、軟件等),當(dāng)然也可以包含文本。

有些首部是通用的,有些則是請(qǐng)求或者響應(yīng)報(bào)文才會(huì)有的。

順便提一下, 用telnet直連服務(wù)器的http端口,telnet命令會(huì)建立一條TCP通道,然后就可以通過這個(gè)通道直接發(fā)送HTTP請(qǐng)求數(shù)據(jù),獲取響應(yīng)數(shù)據(jù)了。

HTTP協(xié)議進(jìn)階

代理

HTTP的代理服務(wù)器既是Web服務(wù)器,又是Web客戶端。

使用代理可以“接觸”到所有流過的HTTP流量,代理可以對(duì)其進(jìn)行監(jiān)視和修改。常見的就是對(duì)兒童過濾一些“成人”內(nèi)容;網(wǎng)絡(luò)工程師會(huì)利用代理服務(wù)器來提高安全性,它可以限制哪些應(yīng)用層的協(xié)議數(shù)據(jù)可以通過,過濾“病毒”等數(shù)據(jù);代理可以存儲(chǔ)緩存的文件,直接返回給訪問者,無需請(qǐng)求原始的服務(wù)器資源;對(duì)于訪問慢速網(wǎng)絡(luò)上的公共內(nèi)容時(shí),可以假扮服務(wù)器提供服務(wù),從而提高訪問速度;這被稱為 反向代理;可以作為內(nèi)容路由器,如對(duì)付費(fèi)用戶,則將請(qǐng)求導(dǎo)到緩存服務(wù)器,提高訪問速度;可以將頁面的語言轉(zhuǎn)換到與客戶端相匹配,這稱為 內(nèi)容轉(zhuǎn)碼器; 匿名代理會(huì)主動(dòng)從HTTP報(bào)文中刪除身份相關(guān)的信息,如 User-Agent, Cookie等字段。

現(xiàn)實(shí)中,請(qǐng)求通過以下幾種方式打到代理服務(wù)器上去:

報(bào)文每經(jīng)過一個(gè)中間點(diǎn)(代理或網(wǎng)關(guān)),都需要在首部via字段的末尾插入一個(gè)可以代表本節(jié)點(diǎn)的獨(dú)特的字符串,包含實(shí)現(xiàn)的協(xié)議版本和主機(jī)地址。注意圖中的via字段。

請(qǐng)求和響應(yīng)的報(bào)文傳輸路徑通常都是一致的,只不過方向是相反的。因此,響應(yīng)報(bào)文上的via字段表示的中間節(jié)點(diǎn)的順序是剛好相反的。

緩存

當(dāng)有很多請(qǐng)求訪問同一個(gè)頁面時(shí),服務(wù)器會(huì)多次傳輸同一份數(shù)據(jù),這些數(shù)據(jù)重復(fù)地在網(wǎng)絡(luò)中傳輸著,消耗著大量帶寬。如果將這些數(shù)據(jù)緩存下來,就可以提高響應(yīng)速度,節(jié)省網(wǎng)絡(luò)帶寬了。

大部分緩存只有在客戶端發(fā)起請(qǐng)求,并且副本已經(jīng)比較舊的情況下才會(huì)對(duì)副本的新鮮度進(jìn)行檢測(cè)。最常用的請(qǐng)求首部是 If-Modified-Since, 如果在xx時(shí)間(此時(shí)間即為If-Modified-Since的值)之后內(nèi)容沒有變化,服務(wù)器會(huì)回應(yīng)一個(gè) 304NotModified. 否則,服務(wù)器會(huì)正常響應(yīng),并返回原始的文件數(shù)據(jù),而這個(gè)過程中被稱為 再驗(yàn)證命中

再驗(yàn)證可能出現(xiàn)命中或未命中的情況。未命中時(shí),服務(wù)器回復(fù) 200OK,并且返回完整的數(shù)據(jù);命中時(shí),服務(wù)器回復(fù) 304NotModified; 還有一種情況,緩存被刪除了,那么根據(jù)響應(yīng)狀態(tài)碼,緩存服務(wù)器也會(huì)刪除自己緩存的副本。

順帶提一句,若要在項(xiàng)目中使用緩存,就一定要關(guān)注緩存命中比例。若命中比例不高,就要重新考慮設(shè)置緩存的必要性了。

緩存服務(wù)器返回響應(yīng)的時(shí)候,是基于已緩存的服務(wù)器響應(yīng)的首部,再對(duì)一些首部字段做一些微調(diào)。比如向其中插入新鮮度信息(如 Age, Expires首部等),而且通常會(huì)包含一個(gè) via首部來說明緩存是由一個(gè)緩存代理提供的。注意,這時(shí)不要修改 Date字段,它表示原始服務(wù)器最初構(gòu)建這條響應(yīng)的日期。

HTTP通過 文檔過期機(jī)制服務(wù)器再驗(yàn)證機(jī)制保持已緩存數(shù)據(jù)和服務(wù)器間的數(shù)據(jù)充分一致。

文檔過期通過如下首部字段來表示緩存的有效期:

當(dāng)上面兩個(gè)字段暗示的過期時(shí)間已到,需要向服務(wù)器再次驗(yàn)證文檔的新鮮度。如果這時(shí)緩存仍和服務(wù)器上的原始文檔一致,緩存只需要更新頭部的相關(guān)字段。如上表中提到的 Expires字段等。

為了更好的節(jié)省網(wǎng)絡(luò)流量,緩存服務(wù)器可以通過相關(guān)首部向原始服務(wù)器發(fā)送一個(gè) 條件GET請(qǐng)求, 這樣只有在緩存真正過期的情況下,才會(huì)返回原始的文檔,否則只會(huì)返回相關(guān)的首部。 條件GET請(qǐng)求會(huì)用到如下的字段:

cookie

cookie是服務(wù)器“貼在”客戶端身上的標(biāo)簽,由客戶端維護(hù)的狀態(tài)片段,并且只會(huì)回送給合適的站點(diǎn)。

有兩類cookie: 會(huì)話cookie、持久cookie. 會(huì)話cookie在退出瀏覽器后就被刪除了;而持久cookie則保存在硬盤中,計(jì)算機(jī)重啟后仍然存在。

服務(wù)器在給客戶端的響應(yīng)字段首部加上 Set-cookieSet-cookie2, 值為 名字=值的列表,即可以包含多個(gè)字段。當(dāng)下次瀏覽器再次訪問到相同的網(wǎng)站時(shí),會(huì)將這些字段通過 Cookie帶上。cookie中保留的內(nèi)容是服務(wù)器給此客戶端打的標(biāo)簽,方便服務(wù)進(jìn)行追蹤的識(shí)別碼。瀏覽器會(huì)將cookie以特定的格式存儲(chǔ)在特定的文件中。

瀏覽器只會(huì)向產(chǎn)生這條cookie的站點(diǎn)發(fā)生cookie. Set-cookie字段的值會(huì)包含 domain這個(gè)字段,告知瀏覽器可以把這條cookie發(fā)送給給相關(guān)的匹配的站點(diǎn)。 path字段也是相似的功能。如i瀏覽器收到如下的cookie:

Set-cookie: user="mary"; domain="stefno.com"

那么瀏覽器在訪問任意以 stefno.com結(jié)尾的站點(diǎn)都會(huì)發(fā)送:

Cookie: user="mary"

實(shí)體和編碼

響應(yīng)報(bào)文中的body部分傳輸?shù)臄?shù)據(jù)本質(zhì)上都是二進(jìn)制。我們從上面的報(bào)文數(shù)據(jù)也可以看出來,都是用十六進(jìn)制數(shù)來表示,關(guān)鍵是怎么解釋這塊內(nèi)容。如果 Content-Type定義是 text/plain, 那說明body內(nèi)容就是文本,我們直接按文本編碼來解釋;如果 Content-Type定義是 image/png, 說明body部分是一幅圖片,那我們就按圖片的格式去解釋數(shù)據(jù)。

Content-Length標(biāo)示報(bào)文主體部分的數(shù)據(jù)長(zhǎng)度大小,如果內(nèi)容是壓縮的,那它表示的就是壓縮后的大小。另外, Content-Length在長(zhǎng)連接的情況下,可以對(duì)多個(gè)報(bào)文進(jìn)行正確地分段。所以,如果沒有采用分塊編碼,響應(yīng)數(shù)據(jù)中必須帶上 Content-Length字段。分塊編碼的情形中,數(shù)據(jù)被拆分成很多小塊,每塊都有大小說明。因此,任何帶有主體部分的報(bào)文(請(qǐng)求或是響應(yīng))都應(yīng)帶上正確的 Content-Length首部。

HTTP的早期版本采用關(guān)閉連接的方式來劃定報(bào)文的結(jié)束。這帶來的問題是顯而易見的:客戶端并不能分清是因?yàn)榉?wù)器正常結(jié)束還是中途崩潰了。這里,如果是客戶端用關(guān)閉來表示請(qǐng)求報(bào)文主體部分的結(jié)束,是不可取的,因?yàn)殛P(guān)閉之后,就無法獲取服務(wù)器的響應(yīng)了。當(dāng)然,客戶端可以采用半關(guān)閉的方式,只關(guān)閉數(shù)據(jù)發(fā)送方向,但是很多服務(wù)器是不識(shí)別的,會(huì)把半關(guān)閉當(dāng)成客戶端要成服務(wù)器斷開來處理。

HTTP報(bào)文在傳輸?shù)倪^程中可能會(huì)遭到代理或是其他通信實(shí)體的無意修改,為了讓接收方知道這種情況,服務(wù)器會(huì)對(duì)body部分作一個(gè)md5, 并把值放到 Content-MD5這個(gè)字段中。但是,如果中間的代理即修改了報(bào)文主體,又修改了md5, 就不好檢測(cè)了。因此規(guī)定代理是不能修改 Content-MD5首部的。這樣,客戶端在收到數(shù)據(jù)后,先進(jìn)行解碼,再算出md5, 并與 Content-MD5首部進(jìn)行比較。這主要是防止代理對(duì)報(bào)文進(jìn)行了無意的改動(dòng)。

HTTP在發(fā)送內(nèi)容之前需要對(duì)其進(jìn)行編碼,它是對(duì)報(bào)文主體進(jìn)行的可逆變換。比如將報(bào)文用gzip格式進(jìn)行壓縮,減少傳輸時(shí)間。常見的編碼類型如下:

當(dāng)然,客戶端為了避免服務(wù)器返回自己不能解碼的數(shù)據(jù),請(qǐng)求的時(shí)候,會(huì)在 Accept-Encoding首部里帶上自己支持的編碼方式。如果不傳輸?shù)脑?#xff0c;默認(rèn)可以接受任何編碼方式。

上面提到的編碼是內(nèi)容編碼,它只是在響應(yīng)報(bào)文的主體報(bào)文將原始數(shù)據(jù)進(jìn)行編碼,改變的是內(nèi)容的格式。還有另一種編碼: 傳輸編碼。它與內(nèi)容無關(guān),它是為了改變報(bào)文數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)姆绞健鬏斁幋a是在HTTP 1.1中引入的一個(gè)新特性。

通常,服務(wù)器需要先生成數(shù)據(jù),再進(jìn)行傳輸,這時(shí),可以計(jì)算數(shù)據(jù)的長(zhǎng)度,并將其編碼到 Content-Length中。但是,有時(shí),內(nèi)容是動(dòng)態(tài)生成的,服務(wù)器希望在數(shù)據(jù)生成之前就開始傳輸,這時(shí),是沒有辦法知道數(shù)據(jù)大小的。這種情況下,就要用到 傳輸編碼來標(biāo)注數(shù)據(jù)的結(jié)束的。

HTTP協(xié)議中通過如下兩個(gè)首部來描述和控制傳輸編碼:

分塊編碼的報(bào)文形式是這樣的:

每個(gè)分塊包含一個(gè)長(zhǎng)度值(十六進(jìn)制,字節(jié)數(shù))和該分塊的數(shù)據(jù)。 <CR><LF>用于區(qū)隔長(zhǎng)度值和數(shù)據(jù)。長(zhǎng)度值不包含分塊中的任何 <CR><LF>序列。最后一個(gè)分塊,用長(zhǎng)度值0來表示結(jié)束。注意報(bào)文首部包含一個(gè) Trailer:Content-MD5, 所以在緊跟著最后一個(gè)報(bào)文結(jié)束之后,就是一個(gè)拖掛。其他如, Content-Length, Trailer, Transfer-Encoding也可以作為拖掛。

內(nèi)容編碼和傳輸編碼是可以結(jié)合起來使用的。

國際化支持

HTTP為了支持國際化的內(nèi)容,客戶端要告知服務(wù)器自己能理解的何種語言,以及瀏覽器上安裝了何種字母表編碼算法。這通過 Accept-CharsetAccept-Language首部實(shí)現(xiàn)。

比如:

Accept-Language: fr, en;q=0.8 Accept-Charset: iso-8859-1, utf-8

表示:客戶端接受法語(fr, 優(yōu)先級(jí)默認(rèn)為1.0)、英語(en, 優(yōu)先級(jí)為0.8),支持iso-8859-1, utf-8兩種字符集編碼。服務(wù)器則會(huì)在 Content-Type首部里放上 charset.

本質(zhì)上,HTTP報(bào)文的body部分存放的就是一串二進(jìn)制碼,我們先把二進(jìn)制碼轉(zhuǎn)換成字符代碼(如ascii是一個(gè)字節(jié)表示一個(gè)字符,而utf-8則表示一個(gè)字符的字節(jié)數(shù)不定,每個(gè)字符1~6個(gè)字節(jié)),之后,用字符代碼去字符集中找到對(duì)應(yīng)的元素。

比較常見的字符集是 US-ASCII: 這個(gè)字符集是所有字符集的始祖,早在1968年就發(fā)布了標(biāo)準(zhǔn)。ASCII碼的代碼值從0到127, 只需要7個(gè)bit位就可以覆蓋代碼空間。HTTP報(bào)文的首部、URL使用的字符集就是ASCII碼。可以再看下上文報(bào)文分析部分的acsii碼集。

US-ASCII是把每個(gè)字符編碼成固定的7位二進(jìn)制值。 UTF-8則是無固定的編碼方案。第一個(gè)字節(jié)的高位用來表示編碼后的字符所用的字節(jié)數(shù)(如果所用的字節(jié)數(shù)是5,則第一個(gè)字節(jié)前5bit都是1,第6bit是0),所需的后續(xù)的字節(jié)都含有6位的代碼值,前兩個(gè)bit位是用 10標(biāo)識(shí)。

舉個(gè)例子,漢字“嚴(yán)”的Unicode編碼為 4E25( 100111000100101), 共有15位,落在上表中的第三行,因此“嚴(yán)”的編碼就需要三個(gè)字節(jié)。將 100111000100101填入上表中的 c位即可。因此,嚴(yán)的 UTF-8編碼是11100100 10111000 10100101,轉(zhuǎn)換成十六進(jìn)制就是E4B8A5. 比如我在谷歌搜索框里搜索“嚴(yán)”字,google發(fā)出的請(qǐng)求如下:

https://www.google.com.hk/search?q=%E4%B8%A5&oq=%E4%B8%A5&aqs=chrome..69i57j0l5.3802j0j4&sourceid=chrome&ie=UTF-8&gws_rd=cr

q=%E4%B8%A5這個(gè)就是搜索的詞了。

重定向與負(fù)載均衡

Web內(nèi)容通常分散地分布在很多地方,這可以防止“單點(diǎn)故障”,萬一某個(gè)地方發(fā)生地震了,機(jī)房被毀了,那還有其他地方的機(jī)房可以提供服務(wù)。一般都會(huì)有所謂的“雙活”,“多活”,所謂 狡兔三窟嘛。

這樣,用戶的請(qǐng)求會(huì)根據(jù) 負(fù)載均衡的原則,被 重定向到它應(yīng)該去的地方。

HTTP重定向

服務(wù)器收到客戶端請(qǐng)求后,向客戶端返回一條帶有狀態(tài)碼 302重定向的報(bào)文,告訴他們應(yīng)該去其他的地方試試。web站點(diǎn)將重定向看成一種簡(jiǎn)單的負(fù)載均衡策略來使用, 重定向服務(wù)器找到可用的負(fù)載最小的機(jī)器,由于服務(wù)器知道客戶端的地址,理論上來說,可以做到最優(yōu)的重定向選擇。

當(dāng)然,缺點(diǎn)也是顯而易見的,由于客戶端要發(fā)送兩次請(qǐng)求,因此會(huì)增加耗時(shí)。

DNS重定向

DNS將幾個(gè)IP地址關(guān)聯(lián)到一個(gè)域上,采用算法決定返回的IP地址。可以是簡(jiǎn)單的 輪轉(zhuǎn);也可以是更高級(jí)的算法,如返回負(fù)載最輕的服務(wù)器的IP地址,稱為 負(fù)載均衡算法;如果考慮地理位置,返回給客戶端最近位置的地址,稱為 鄰接路由算法;還有一種是繞過出現(xiàn)故障的地址,稱為 故障屏蔽算法

DNS服務(wù)器總是會(huì)返回所有的IP地址,但是DNS客戶端一般只會(huì)使用第一個(gè)IP地址,而且會(huì)緩存下來,之后會(huì)一直用這個(gè)地址。所以,DNS輪轉(zhuǎn)通常不會(huì)平衡單個(gè)客戶端的負(fù)載。但是,由于DNS服務(wù)器對(duì)于不同的請(qǐng)求,總是會(huì)返回輪轉(zhuǎn)后的IP地址列表,因此,會(huì)把負(fù)載分散到多個(gè)客戶端。

HTTP連接

HTTP連接是HTTP報(bào)文傳輸?shù)年P(guān)鍵通道。

并行連接

對(duì)于一個(gè)頁面上同時(shí)出現(xiàn)多個(gè)對(duì)象的時(shí)候,如果瀏覽器并行地打開多個(gè)連接,同時(shí)去獲取這些對(duì)象,多個(gè)連接的TCP握手時(shí)延可以進(jìn)行重疊,速度會(huì)快起來。

如一個(gè)包含3張圖片的頁面,瀏覽器要發(fā)送4次HTTP請(qǐng)求來獲取頁面。1個(gè)用于頂層的HTML頁面,3個(gè)用于圖片。如果采用串行方式,那么連接時(shí)延會(huì)進(jìn)行疊加。

采用并行連接之后:

但是并行連接也不絕對(duì)提升速度,如果一個(gè)頁面有數(shù)百個(gè)內(nèi)嵌對(duì)象,那要啟動(dòng)數(shù)百個(gè)連接,對(duì)服務(wù)器的性能也是非常大的挑戰(zhàn)。所以,通常瀏覽器會(huì)限制并行連接的總數(shù)據(jù)在一個(gè)較小的值,通常是4個(gè),而且服務(wù)端可以隨意關(guān)閉客戶端超量的連接。

另一方面,如果客戶端網(wǎng)絡(luò)帶寬較小,每個(gè)連接都會(huì)去爭(zhēng)搶有限的帶寬,每個(gè)連接都會(huì)獲取較小的速度,即每個(gè)對(duì)象都會(huì)以較小的速度去加載。這樣,并行連接帶來的速度提升就會(huì)比較小,甚至沒有提升。

持久連接

HTTP keep-alive機(jī)制

我們知道HTTP請(qǐng)求是“請(qǐng)求-應(yīng)答”模式,每次請(qǐng)求-應(yīng)答都要新建一個(gè)連接,完成之后要斷開連接。HTTP是無狀態(tài)的,連接之間沒有任何關(guān)系。

HTTP是應(yīng)用層協(xié)議,TCP是傳輸層協(xié)議。HTTP底層仍然采用TCP進(jìn)行傳輸數(shù)據(jù)。TCP為HTTP提供了一層可靠的比特傳輸通道。HTTP一般交換的數(shù)據(jù)都不大,而每次連接都要進(jìn)行TCP三次握手,很大一部分時(shí)間都消耗在這上面,有時(shí)候甚至能達(dá)到50%。如果能復(fù)用連接,就可以減少由于TCP三次握手所帶來的時(shí)延。

HTTP 1.1默認(rèn)開啟keep-alive機(jī)制,從上面抓到的包也可以看到。這樣,數(shù)據(jù)傳輸完成之后保持TCP連接不斷開,之后同域名下復(fù)用連接,繼續(xù)用這個(gè)通道傳輸數(shù)據(jù)。服務(wù)器在響應(yīng)一個(gè)請(qǐng)求后,可以保持這個(gè)連接keep-alive timeout的時(shí)間,在這個(gè)時(shí)間內(nèi)沒有請(qǐng)求,則關(guān)閉此連接;否則,重新開始倒計(jì)時(shí)keep-alive timeout時(shí)間。

HTTP有keep-alive機(jī)制,目的是可以在一個(gè)TCP 連接上傳輸多個(gè)HTTP事務(wù),以此提高通信效率。底層的TCP其實(shí)也有keep-alive機(jī)制,它是為了探測(cè)TCP連接的活躍性。TCP層的keepalive可以在任何一方設(shè)置,可以是一端設(shè)置、兩端同時(shí)設(shè)置或者兩端都沒有設(shè)置。新建socket的時(shí)候需要設(shè)置,從而使得協(xié)議棧調(diào)用相關(guān)函數(shù)tcpsetkeepalive,來激活連接的keep-alive屬性。

當(dāng)網(wǎng)絡(luò)兩端建立了TCP連接之后,閑置(雙方?jīng)]有任何數(shù)據(jù)流發(fā)送往來)時(shí)間超過 tcp_keepalive_time后,服務(wù)器內(nèi)核就會(huì)嘗試向客戶端發(fā)送偵測(cè)包,來判斷TCP連接狀況(有可能客戶端崩潰、強(qiáng)制關(guān)閉了應(yīng)用、主機(jī)不可達(dá)等等)。如果沒有收到對(duì)方的回答(ack包),則會(huì)在 tcp_keepalive_intvl后再次嘗試發(fā)送偵測(cè)包,直到收到對(duì)方的ack,如果一直沒有收到對(duì)方的ack,一共會(huì)嘗試 tcpkeepaliveprobes次,每次的間隔時(shí)間在這里分別是15s, 30s, 45s, 60s, 75s。如果嘗試 tcp_keepalive_probes次后,依然沒有收到對(duì)方的ack包,則會(huì)丟棄該TCP連接。TCP連接默認(rèn)閑置時(shí)間是2小時(shí),一般設(shè)置為30分鐘足夠了。

管道化連接

在keep-alive的基礎(chǔ)上,我們可以做地更進(jìn)一步,在響應(yīng)到達(dá)之前,我們將多條請(qǐng)求按序放入請(qǐng)求隊(duì)列,服務(wù)端在收到請(qǐng)求后,必須按照順序?qū)?yīng)請(qǐng)求的響應(yīng)。但由于網(wǎng)絡(luò)環(huán)境非常復(fù)雜,因此即使請(qǐng)求是按順序發(fā)送的,也不一定是按順序到達(dá)服務(wù)端的。而且就算是服務(wù)端按序處理的,也不一定是按序返回給客戶端,所以最好是在響應(yīng)中附帶一些可以標(biāo)識(shí)請(qǐng)求的參數(shù)。

為了安全起見,管道化的連接只適合“冪等”的請(qǐng)求,一般我們認(rèn)為:GET/HEAD/PUT/DELETE/TRACE/OPTIONS等方法都是冪等的。

小結(jié)

以上,就是所有HTTP的通信細(xì)節(jié)了,足夠在日常開發(fā) 作中使用了。更多沒有涉及的細(xì)節(jié)可以在用到的時(shí)候再去仔細(xì)研究。

文章看完了,不知道你對(duì)HTTP的理解有沒有更上一層樓?歡迎一起交流探討。

? ?本文作者:饒全成,中科院計(jì)算所碩士,滴滴出行后端研發(fā)工程師。

? ? ? ? ? ?

?熱 文?推 薦?

??自費(fèi)送書!16本!年前替我領(lǐng)回家!

??像我這樣的人,除了寫代碼,還能干啥?

分享程序員關(guān)心的技術(shù)、求職、學(xué)習(xí)成長(zhǎng)與生活

總結(jié)

以上是生活随笔為你收集整理的滴滴工程师带你深入理解 HTTP通信细节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久99精品久久久久久 | 人人看人人艹 | 欧美成亚洲 | 菠萝菠萝在线精品视频 | 在线亚洲人成电影网站色www | 99视频在线| 97成人在线观看视频 | 久操视频在线观看 | 中文在线字幕免费观看 | 日韩在线观看一区二区三区 | 久草五月| 久久久久久久久久福利 | 成人av在线电影 | 日本bbbb摸bbbb| 日韩精品一区二区三区免费观看视频 | 日韩电影一区二区三区在线观看 | 日韩精品一区二区三区视频播放 | 久久在视频 | 精品久久久亚洲 | 99视频免费在线观看 | 国产一二区在线观看 | 国产一区二区免费看 | 亚洲精品黄色片 | 国产一区二区在线免费观看 | 国产在线观看一 | 日本性xxxxx| 成人小视频免费在线观看 | 少妇视频一区 | 99久久精品国产亚洲 | 黄在线 | 色综合中文综合网 | 色香网 | 日韩黄色软件 | 奇米影音四色 | 久久国产品 | 欧美一级久久久 | 天堂av一区二区 | 九九热国产视频 | 中文字幕在线影院 | 丁香在线视频 | 在线观看国产一区 | 91夫妻视频| 波多野结衣网址 | 日韩美在线 | 久久免费视频5 | 天天爽天天做 | 亚洲国产字幕 | 不卡的av在线播放 | 香蕉视频国产在线观看 | 久久99精品国产麻豆宅宅 | 精品国产一区二区久久 | 国产福利一区二区在线 | 成人aaa毛片 | 日日干天天 | 狠狠躁夜夜躁人人爽视频 | 国产精品成人免费精品自在线观看 | 91视频一8mav | 国产精品中文久久久久久久 | 超碰在线个人 | 日韩在线视频二区 | 免费视频一二三 | 在线欧美中文字幕 | www.亚洲激情.com | 国产美女精品视频 | 国产福利久久 | 色综合天天视频在线观看 | 人人射人人爽 | 国产视频一二区 | 国产久草在线 | 久久久一本精品99久久精品 | 国产精品大片 | 国产精品中文字幕在线播放 | 超碰人人乐| a黄色大片| 久草在线视频网站 | 午夜精品剧场 | 国产h在线播放 | 亚洲精品视频免费在线观看 | 精品久久久久久久久久岛国gif | 久久在线电影 | 国产黄色av | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产成人一区二区三区影院在线 | 在线观看一级片 | 日韩黄色免费看 | 日本 在线 视频 中文 有码 | 国产福利资源 | 俺要去色综合狠狠 | 日韩欧美一区二区在线观看 | 亚洲 欧洲av | 久久免费视频网站 | 国产精品成人一区二区三区吃奶 | 天天综合成人 | zzijzzij日本成熟少妇 | 六月丁香婷婷网 | 国产裸体bbb视频 | 国产免费看 | 国产色女 | 日韩啪视频 | 免费福利小视频 | 久久精品屋 | 九九色综合 | 久久综合综合久久综合 | 人人爽人人 | 波多野结衣在线观看一区 | 狠狠干狠狠色 | 欧洲一区二区三区精品 | 人人讲| 午夜av不卡 | 国产成人精品一区二区三区网站观看 | 成人影片在线播放 | www.久久免费视频 | 久操视频在线播放 | 色噜噜日韩精品一区二区三区视频 | 91精品国产综合久久福利不卡 | 日韩中字在线观看 | av网站在线免费观看 | 免费网站看v片在线a | 国产高清在线看 | 国产亚洲精品久久久久久移动网络 | 91麻豆精品一区二区三区 | www激情com | 在线免费观看黄网站 | 亚洲九九九在线观看 | 亚洲91网站 | 午夜精品福利影院 | 日韩大陆欧美高清视频区 | 亚洲少妇激情 | 亚洲欧美婷婷六月色综合 | v片在线播放 | 日韩中文字幕免费视频 | 中文字幕日韩一区二区三区不卡 | 91在线网站| 97超碰资源 | 欧美一级艳片视频免费观看 | 天天摸夜夜添 | 国产一级一片免费播放放 | 久久99精品热在线观看 | 天天色播 | 在线国产视频观看 | 黄色的网站免费看 | 国产99久久久国产精品免费看 | 福利视频精品 | 国产日产精品久久久久快鸭 | 97成人在线免费视频 | 国产精品视频永久免费播放 | 久久视频在线视频 | 在线观看久久 | 天天操夜夜摸 | 久草资源在线 | 狠狠干综合 | 91成人在线观看喷潮 | 911香蕉视频 | 香蕉视频国产在线观看 | 日韩极品在线 | 精品在线观看一区二区三区 | 日韩在线免费播放 | 国产伦理一区二区三区 | 亚洲精品免费在线观看 | 成年人在线 | 99c视频高清免费观看 | 日韩资源在线观看 | 在线久热 | www.黄色 | www.com操| 天天干视频在线 | 一区二区三区 中文字幕 | 韩国av不卡 | 狠狠躁日日躁狂躁夜夜躁av | 国产一区二区久久精品 | 国产精品一区二 | 国产色在线观看 | 国产美女精品视频 | 精品久久五月天 | 九九视频精品免费 | 亚洲高清视频在线播放 | 国产99久久久久久免费看 | 国产免费黄视频在线观看 | 免费在线一区二区三区 | 欧美一级片在线免费观看 | 一区二区三区四区精品视频 | 国产第一页在线观看 | 在线免费看黄网站 | 国产一级片在线播放 | 国产网红在线观看 | 色综合天天色综合 | 中字幕视频在线永久在线观看免费 | 在线免费视频 你懂得 | 91试看 | av电影在线免费观看 | 国产福利中文字幕 | 性色av免费在线观看 | 一区二区观看 | 西西444www大胆高清图片 | 欧美日韩亚洲在线观看 | 国产精品一区二区美女视频免费看 | 欧美成a人片在线观看久 | 国产精品视频久久 | 婷婷色在线观看 | 日本三级在线观看中文字 | 国产福利免费看 | 手机av在线不卡 | 青青河边草观看完整版高清 | 国产乱码精品一区二区三区介绍 | 亚洲国产中文字幕在线观看 | 超碰97免费在线 | 人人干天天射 | 国产精品久久久av久久久 | 91爱爱网址 | 亚洲激情在线视频 | 九九欧美视频 | 一区二区三区 中文字幕 | 日本激情动作片免费看 | 中文字幕在线中文 | 精品亚洲午夜久久久久91 | 国产国语在线 | 午夜av网站| 在线观看911视频 | 五月综合激情 | 麻豆影视网 | 国产成人一区二区三区久久精品 | 天天天射| 久久精品9 | 天天色天天操综合网 | 国产97在线视频 | 国产无吗一区二区三区在线欢 | 精品欧美小视频在线观看 | 国产精品免费不卡 | 国产字幕在线看 | 亚州视频在线 | 在线观看日韩国产 | 婷婷色视频 | 久久精品日产第一区二区三区乱码 | 久二影院| 中文字幕乱在线伦视频中文字幕乱码在线 | 99久高清在线观看视频99精品热在线观看视频 | 超碰97在线资源 | 国产在线专区 | 久久视频在线观看 | 日本在线观看一区二区 | 人人插人人草 | 香蕉视频在线免费 | 欧美在线视频第一页 | 亚洲成人精品影院 | 99久久er热在这里只有精品66 | 日本乱视频 | 午夜视频免费 | 黄www在线观看 | 欧美性脚交 | 天天曰天天 | 成人黄色资源 | 久久久久久久久久久免费 | 久久免费黄色 | 日韩专区一区二区 | 国产二区av | 黄色av成人在线观看 | 91免费版在线| 亚洲最大的av网站 | 欧美午夜精品久久久久 | 丁香五月亚洲综合在线 | 人人干干人人 | 久久最新 | 色噜噜日韩精品一区二区三区视频 | 亚洲人人av | av片中文字幕 | 欧美日韩在线播放一区 | 黄色小网站在线观看 | 精品视频专区 | 亚州精品成人 | 久草视频免费在线播放 | 亚洲成av人影院 | 337p日本欧洲亚洲大胆裸体艺术 | 久久精品亚洲精品国产欧美 | 91免费版在线 | 国产一区二区三区免费在线 | 青青五月天 | 欧美精品一区二区性色 | 激情五月网站 | 免费看片黄色 | 在线观看国产一区 | 亚洲成人麻豆 | 婷婷色网视频在线播放 | 久久在线观看视频 | 国产精品一级在线 | 久久视频免费在线 | 国产一区二区三区免费在线 | 欧美日韩在线视频一区 | 亚洲国产成人久久 | 成人av在线直播 | 狠狠激情中文字幕 | 国产午夜免费视频 | 亚洲欧美视频网站 | 在线欧美小视频 | 亚洲91在线| 奇米影视777四色米奇影院 | 久久av中文字幕片 | 成人黄色片在线播放 | 日韩中文字幕免费电影 | 久久久一本精品99久久精品66 | 成人app在线免费观看 | 欧美日韩视频一区二区 | 国产分类视频 | www国产亚洲精品久久网站 | 国产青草视频在线观看 | 国内免费的中文字幕 | 国产美女在线免费观看 | 日韩在线免费不卡 | 国产精品中文字幕在线 | 成年人视频免费在线 | 国产精品毛片一区二区在线 | 日韩精品一区二区三区免费观看视频 | 99久久精品国产一区二区成人 | 中文字幕观看av | 亚洲精品国产拍在线 | 久久久久久草 | 在线观看aa | 日韩av在线高清 | 久久99九九99精品 | 麻豆一级视频 | 成人黄色小说在线观看 | 国产视频每日更新 | 99国产精品久久久久久久久久 | 日本中文字幕久久 | 激情五月五月婷婷 | 国产1区在线观看 | 亚洲精品成人 | 国产亚洲欧美在线视频 | 欧美日韩一区二区在线 | 久久免费中文视频 | 久久久一本精品99久久精品 | 欧美黄色高清 | 操操操人人 | 成年人在线看片 | 精品国产免费av | 久久久国产在线视频 | 天天操夜夜拍 | 激情一区二区三区欧美 | 丁香五香天综合情 | 欧美性久久久 | 亚洲午夜精品一区二区三区电影院 | 国产一区二区中文字幕 | 国产一区二区精品 | 久久久久久国产精品久久 | 亚洲精品一区二区在线观看 | 日本黄色大片免费看 | 欧美一区二区三区在线播放 | 色吊丝在线永久观看最新版本 | 8x8x在线观看视频 | 久久国产精品久久精品国产演员表 | 国产午夜精品一区二区三区嫩草 | 福利一区视频 | 免费福利在线观看 | 午夜精品视频一区二区三区在线看 | 97精品国产97久久久久久久久久久久 | 91精品在线视频 | 天天综合网天天综合色 | 在线视频黄| www.av中文字幕.com | 久久狠狠干 | 国产日产精品久久久久快鸭 | 69精品 | 国产黄免费 | 91成人黄色 | 久久免费的精品国产v∧ | 久草精品视频 | 色av婷婷 | 亚洲天堂网在线视频观看 | 国产综合福利在线 | 国产精品去看片 | 国产成人久久精品亚洲 | 精品影院一区二区久久久 | 国精产品永久999 | 最新日韩视频 | 手机av电影在线 | 成人在线观看免费 | 综合色狠狠 | www视频免费在线观看 | 久久久久亚洲精品成人网小说 | 最新国产精品拍自在线播放 | 久久久久久久久久电影 | 日韩在线视频免费播放 | 免费一级片在线 | www.国产在线视频 | 亚洲精品小视频 | 9在线观看免费高清完整 | 欧美日韩免费观看一区=区三区 | 天堂黄色片| 欧美日韩久| 992tv在线 | 国产一区欧美二区 | 国产成人精品av久久 | 99国产高清| 午夜黄色一级片 | 911在线| 91av超碰| 亚洲 欧洲av| 91久久久久久久一区二区 | 日韩欧美亚州 | av+在线播放在线播放 | 日韩91精品 | 精品国产一区二区久久 | 免费美女av | 亚洲资源一区 | 午夜视频欧美 | 在线播放视频一区 | 日韩最新中文字幕 | 最新超碰 | 精品欧美一区二区在线观看 | 国产激情久久久 | 99 久久久久 | 国产精品一区二区三区四 | 午夜在线看 | 亚洲专区一二三 | 日韩欧美网站 | 麻豆免费在线视频 | 91看片淫黄大片在线播放 | 在线视频久 | 国产午夜精品免费一区二区三区视频 | 人人干天天干 | 国产999| 麻豆视频在线看 | 成人精品一区二区三区中文字幕 | 九热在线| 超碰在线官网 | 操操操com | 蜜臀av性久久久久蜜臀av | 国产成人精品久久 | 天天艹日日干 | 久久草网 | 一级黄色在线视频 | 成人一区二区在线观看 | 国产一区免费观看 | 国产美女视频免费观看的网站 | 国产一二三区av | 亚洲一区二区黄色 | 俺要去色综合狠狠 | 亚洲另类人人澡 | 国产黄色免费电影 | 成人免费观看视频网站 | 精品久久91 | 九色视频网 | 天天射天天舔天天干 | 丁香久久久 | 久久精品免费 | 亚洲欧洲日韩在线观看 | 国产精品一区二区三区视频免费 | 探花视频在线观看+在线播放 | 亚洲精品综合在线观看 | 日韩欧美视频免费在线观看 | 亚洲 综合 国产 精品 | 中国一级片免费看 | 成人av免费在线观看 | 亚洲国产三级 | 国产91精品一区二区绿帽 | 精品国产1区2区3区 国产欧美精品在线观看 | 国产精品亚洲综合久久 | 美女啪啪图片 | 精品久久久久亚洲 | 日本久久视频 | 色视频网站在线观看一=区 a视频免费在线观看 | 亚洲免费观看视频 | 日韩在线| 超碰97国产 | 日韩a级免费视频 | 中文字幕在线视频国产 | 久久激情视频 | 午夜久久久精品 | 99夜色| 18久久久久 | 国产高清在线免费 | 欧美一级小视频 | 亚洲成人二区 | 99r精品视频在线观看 | 美女视频黄频大全免费 | 麻豆精品视频 | 精品国产美女 | 999视频在线观看 | 欧美一区二区精美视频 | 亚洲国产中文字幕 | 99久久99久久精品国产片 | 狠狠色综合欧美激情 | 中文字幕在线观看国产 | 亚洲不卡av一区二区三区 | 亚州精品成人 | 国产高清不卡av | 久久精品视频3 | 久久精品aaa| 九九九视频精品 | 色www精品视频在线观看 | 免费看的黄色小视频 | av官网在线| 国产小视频免费观看 | 91精选在线 | 国产毛片久久 | 欧美大片第1页 | 美女在线观看网站 | 成人欧美一区二区三区黑人麻豆 | 日日碰狠狠添天天爽超碰97久久 | 日p视频 | 极品嫩模被强到高潮呻吟91 | 国产午夜精品一区二区三区在线观看 | 欧美最猛性xxx | 黄色片视频在线观看 | 操操操日日日干干干 | 麻豆成人网 | 亚洲视频在线免费看 | 久久久69| 91污污视频在线观看 | 久久福利小视频 | 成 人 黄 色视频免费播放 | 新av在线 | 国产在线v | 日日天天狠狠 | 九九久久精品视频 | 国产精品99蜜臀久久不卡二区 | 日本久久免费视频 | 精品一区二区在线免费观看 | 深爱激情五月婷婷 | 午夜精品久久久久久 | 美女免费网视频 | 人人看人人草 | www狠狠操| 狠狠色伊人亚洲综合网站色 | 91影视成人| 日日草天天草 | av在线播放中文字幕 | 国产色女人 | 国产无遮挡又黄又爽馒头漫画 | 西西4444www大胆无视频 | 天天操天天玩 | 色噜噜狠狠狠狠色综合久不 | 在线观看爱爱视频 | 天天操天天插 | 麻豆视频在线免费观看 | 麻豆精品国产传媒 | 探花国产在线 | 国产精品久久久久久久av大片 | 欧美老女人xx| 五月婷婷一区二区三区 | 久久免费成人网 | 国产一区二区高清不卡 | 国产精品一区二区免费 | 国产成人av电影在线观看 | 中文不卡视频 | 亚洲免费精品一区二区 | 久久视频这里有久久精品视频11 | 夜夜澡人模人人添人人看 | 香蕉视频在线视频 | 久久不卡日韩美女 | 一区二区三区在线免费观看视频 | 97在线成人 | 天天操天天是 | 久草在线高清视频 | 亚洲精品字幕在线 | 免费美女久久99 | 丝袜美腿一区 | 欧美国产高清 | 欧美久久影院 | 国产亚州精品视频 | 成人电影毛片 | 97在线免费视频 | 99久久精品日本一区二区免费 | 精品自拍av | 超碰人人射 | 欧美成人xxxx | 日韩国产欧美在线视频 | 日韩av成人在线 | 国产破处精品 | 黄色成人免费电影 | 又黄又刺激的视频 | 91桃花视频 | 中文免费 | 色香网 | 日韩av不卡在线观看 | 五月天综合色激情 | 精品国产成人 | 成年人黄色大片在线 | 九七在线视频 | 玖玖爱免费视频 | 精品国产电影一区二区 | 色丁香色婷婷 | 国产韩国日本高清视频 | 亚洲国产一区二区精品专区 | 亚洲va韩国va欧美va精四季 | 日韩在线观看你懂的 | 国产精品久久网 | 久久草 | 97碰碰视频 | 久草网站在线观看 | 欧美日韩国产xxx | 国产精品av久久久久久无 | 色播六月天 | 91色在线观看视频 | 日韩电影在线观看一区二区三区 | 在线视频中文字幕一区 | av字幕在线| a级国产乱理伦片在线播放 久久久久国产精品一区 | 久久草在线精品 | 五月花丁香婷婷 | av在线8 | 免费大片黄在线 | 91麻豆精品国产午夜天堂 | 免费试看一区 | 99国产精品久久久久久久久久 | 黄色精品久久久 | 国产色女人 | 在线观看视频91 | 成人九九视频 | 亚洲日日日 | 久久久香蕉视频 | 99久e精品热线免费 99国产精品久久久久久久久久 | 日韩国产精品久久久久久亚洲 | 人人爽人人爽人人片av | 亚洲视频综合在线 | 人人干人人做 | 一区二区视频免费在线观看 | 久久视频6 | 91av网址| 亚洲黄色一级视频 | 狠狠色丁香婷婷综合 | 欧美另类网站 | 日韩欧美极品 | 欧美精品国产综合久久 | 在线观看色网站 | 亚洲一区二区视频在线 | 国产精品视频免费在线观看 | 国产99自拍| 狠狠婷婷 | 91精品在线看 | 亚洲丝袜一区 | 欧美大荫蒂xxx| 久久久免费| 99精品免费久久久久久日本 | 日韩色一区二区三区 | 国产精品一区二区美女视频免费看 | 中文字幕在线视频一区二区 | 国产一区欧美二区 | 一级成人网 | 综合久久一本 | 欧美日韩国产色综合一二三四 | 国产女人18毛片水真多18精品 | 亚洲永久国产精品 | 亚州成人av在线 | 天天干天天操天天操 | 91精品国产入口 | 成人片在线播放 | 又长又大又黑又粗欧美 | 91麻豆视频| 亚洲激情视频在线 | 黄色毛片网站在线观看 | 久久精品视频在线观看免费 | 日本中文字幕在线电影 | 97色噜噜| 字幕网av| 国产精品999久久久 久产久精国产品 | 国产精品18久久久久久不卡孕妇 | 久草在线免费在线观看 | 三级黄免费看 | 国产成人99av超碰超爽 | 午夜视频在线观看一区 | 日韩欧美高清在线 | 在线观看日韩一区 | 亚洲免费av网站 | 操夜夜操 | 国产专区一 | 狠狠操综合网 | 国产日本三级 | 中文字幕中文字幕中文字幕 | 成人在线视频论坛 | 日韩精品久久久免费观看夜色 | 久久视频网址 | 色妞色视频一区二区三区四区 | 欧美黑人巨大xxxxx | 日本精品视频在线 | 久久久久国产一区二区 | 国产99久久九九精品 | 在线国产不卡 | 免费观看的黄色 | 色综合久久五月天 | 亚洲国产手机在线 | 久久夜夜夜 | 午夜av免费在线观看 | 500部大龄熟乱视频 欧美日本三级 | 国产精品第72页 | 精品国产一二三 | 国产一级黄色片免费看 | 日色在线视频 | 国产精品黄色影片导航在线观看 | 91豆麻精品91久久久久久 | 97电影在线观看 | 免费视频一二三 | 欧美日韩免费看 | 国产精品一区二区av | 亚洲视频免费在线观看 | 狠狠色丁香久久婷婷综合丁香 | 欧美一级片在线 | 狠狠操狠狠插 | 国产大片免费久久 | 一区二区视频电影在线观看 | 国产日韩欧美在线影视 | 色婷婷 亚洲 | 激情综合色综合久久综合 | 成年人在线免费看视频 | 成人资源网 | 久久国产福利 | 六月色丁香 | 国产成人精品综合久久久久99 | 97电影手机版 | 久久久精品欧美 | 网站免费黄色 | 日韩在线精品视频 | 日韩v欧美v日本v亚洲v国产v | 久久免费视频8 | 中文字幕在线免费看线人 | 亚洲午夜久久久久久久久 | 97电影院网 | 在线а√天堂中文官网 | 在线视频中文字幕一区 | 国产黄免费在线观看 | 亚洲激情p | 色婷婷亚洲综合 | 精品一区二区日韩 | 2019国产精品 | 欧美婷婷色 | 久久欧美在线电影 | 成人小视频免费在线观看 | 91探花视频| 国产精品久久久久久影院 | 国产爽妇网 | av 一区 二区 久久 | 成人黄色国产 | 97超碰精品| 国产在线精 | 久久99精品国产一区二区三区 | 亚洲欧美日韩中文在线 | 美女国产精品 | 亚洲最新av网址 | 中文字幕在线日亚洲9 | 91欧美视频网站 | 插综合网 | 日日成人网| 欧美疯狂性受xxxxx另类 | 麻豆影视在线播放 | 国产视频手机在线 | 成人黄色大片在线免费观看 | 日韩三级不卡 | 欧美福利精品 | 欧美在线视频日韩 | 视频一区二区免费 | 9992tv成人免费看片 | 精品视频免费在线 | 91视频久久久久 | 国产亚洲精品久久19p | 视频直播国产精品 | 日本三级国产 | 日韩网站在线 | 久久精品99久久 | 黄网站免费久久 | 美女久久久久久久 | 五月花激情 | 国产中文字幕在线免费观看 | 国产精品女人网站 | 在线观看视频色 | 成年人视频在线免费观看 | 一级黄色毛片 | 久久久久久久久久福利 | 国色天香第二季 | 精品国产一区二区三区免费 | 天天激情综合 | 中文字幕在线高清 | 国产一级电影免费观看 | 国产中文字幕三区 | 国产99久久久国产精品免费看 | 91成人精品一区在线播放69 | 国产精品美女毛片真酒店 | 国产资源免费在线观看 | 91在线精品一区二区 | 国产精品一区电影 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 久久国产精品免费观看 | 麻豆94tv免费版 | 久久在视频 | 国产精品免费久久 | 亚洲激情影院 | 日日色综合 | 亚洲国产理论片 | 天天av在线播放 | 五月激情久久久 | 天天摸天天操天天爽 | 国产精品第二十页 | 中文字幕在线精品 | 伊人永久在线 | 国产精品国产精品 | 黄污污网站 | 成年人在线观看 | 综合激情伊人 | 亚洲欧美国产日韩在线观看 | 欧美福利久久 | 夜夜操网 | 亚州精品天堂中文字幕 | 国产免费三级在线观看 | 免费看一级特黄a大片 | 中文字幕在线免费观看视频 | 免费亚洲成人 | 91精品国产一区 | 黄色高清视频在线观看 | 日韩网站在线免费观看 | 亚洲 欧美变态 另类 综合 | 成人福利在线观看 | 成人综合日日夜夜 | 国产视频综合在线 | 欧美国产日韩一区二区三区 | 久久一线 | 日本精品一区二区在线观看 | 国产成人在线看 | 国产在线播放一区 | 国产视频色 | 久久久久久视频 | 午夜久久久久久久久久久 | 免费av影视| 国产精品美女在线观看 | 欧美日韩在线观看视频 | 国产精品久久av | 久碰视频在线观看 | 久久a v电影 | 国产精品成人一区二区三区 | 亚洲精品国产精品乱码不99热 | 丁香高清视频在线看看 | 天天干天天做天天爱 | 黄色三级免费网址 | 最新av免费在线 | 又湿又紧又大又爽a视频国产 | 中文字幕av在线电影 | 免费在线观看av不卡 | 色婷婷国产 | 亚洲自拍自偷 | 一本到在线 | 久久久久免费网 | 亚洲天天摸日日摸天天欢 | 97人人模人人爽人人喊网 | 久久婷婷丁香 | 五月婷婷综合色拍 | 日日夜夜狠狠干 | 91香蕉国产在线观看软件 | avhd高清在线谜片 | 亚洲黄在线观看 | 99久久精品国产一区 | 国产精品一区二区 91 | 成人免费一区二区三区在线观看 | 久草视频免费在线观看 | 亚洲成人黄色在线观看 | 香蕉视频最新网址 | 国产打女人屁股调教97 | 亚洲成人资源 | 午夜久久福利视频 | 香蕉视频在线免费 | 久久a v电影| 国产精品一区二区在线免费观看 | 欧美成年性| 国产视频二区三区 | 国产成人久久av977小说 | 国产成人三级一区二区在线观看一 | 日本精品视频在线观看 | 亚洲精品乱码久久久久久9色 | 欧美久久久久久久久中文字幕 | 亚洲国产精品传媒在线观看 | 综合色亚洲| 韩国av电影网 | 国产精品热 | 婷婷五情天综123 | 亚洲精品伦理在线 | 正在播放五月婷婷狠狠干 | 日韩av片在线 | 91女神的呻吟细腰翘臀美女 | 91在线视频 | 天天摸天天操天天爽 | 久久夜夜夜 | 久久这里只有精品9 | 国产精品久久久区三区天天噜 | 日本不卡一区二区 | 久久美女免费视频 | 精品中文字幕在线 | 国产精品久久久久永久免费 | 婷婷丁香色 | 91精品国产高清 | 最近字幕在线观看第一季 | 五月综合激情婷婷 | 国产日韩欧美在线看 | 香蕉网在线播放 | 日韩久久视频 | 69xx视频 | 久久99精品久久久久久清纯直播 | 久久免费视频在线观看 | 午夜天使 | 97视频在线免费 | 国语对白少妇爽91 | 午夜精品一区二区三区视频免费看 | 成人av片在线观看 | www.色婷婷.com| 国产精品高潮在线观看 | 国产在线中文字幕 | 色香蕉网| 欧美成人黄色片 | 99色在线播放 | 91日韩精品| 在线观看爱爱视频 | 亚洲无吗视频在线 | 日本黄色免费大片 | 99久久这里有精品 | 国产精品免费视频网站 | 久久国产综合视频 | 亚洲 在线 | 中文字幕 影院 | 色老板在线视频 | 亚洲精品99久久久久久 | 黄色软件视频大全免费下载 | 久久国产精品色av免费看 | 亚洲精品视频一二三 | 日韩激情精品 | 日本激情视频中文字幕 | 久久久精品欧美 | 91成品视频 | 中文字幕日韩一区二区三区不卡 | 国产精品一区在线播放 | 日韩av一区二区在线 | 日韩精品影视 | 日韩电影一区二区在线 | 99精品在这里 | 黄色成人av在线 | 亚洲午夜精品久久久久久久久 | 天天干天天射天天插 | 久久人人爽人人爽人人 | 国产99久久久精品视频 | 亚洲一区视频免费观看 | 免费看三级黄色片 | 天天射天天干天天爽 | 成年人av在线播放 | 国内精品福利视频 | www.99av | 国产高清黄 | 国产精久久 | 成人久久免费 | 男女拍拍免费视频 | 综合色伊人 | 色午夜影院 | a级国产乱理论片在线观看 伊人宗合网 | 久久都是精品 | 能在线看的av | 国产一二三四在线视频 | 免费91麻豆精品国产自产在线观看 | 免费a视频在线 | 久久综合久久综合这里只有精品 | 国产96精品 | 二区三区在线视频 | 国产一区二区三区免费视频 | 国精产品满18岁在线 | 日韩在线首页 | 亚洲国产最新 | 国产精品久久久久久久久久妇女 | 91片在线观看 | www.五月激情.com| 国产精品久久久久国产a级 激情综合中文娱乐网 | 日韩av在线网站 | 亚洲精品观看 | 久久精品久久久久 | 国产黄色片在线免费观看 | 日韩av免费网站 | 国产精品成人av久久 | 久久人人精| 久草视频在| 久久99精品久久久久久久久久久久 | 欧美亚洲成人xxx | 青青草国产免费 | www.黄色小说.com | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲在线视频免费观看 | 欧美韩国在线 | 97日日 | 国产在线中文字幕 | 亚洲手机av| 久久国产精品久久久 | 日韩在线一二三区 | 久久久免费毛片 | 久久免费视频3 | 91一区二区三区在线观看 | 成年人黄色av | 五月天天在线 | 欧美 日韩 国产 中文字幕 | 射久久久 | 奇米影视777影音先锋 | 国产一级二级av | 午夜精品久久久99热福利 | 精品久久久久久一区二区里番 | 国产精品九九视频 | 黄色免费大片 | 久久国产精品免费一区 | 久久综合狠狠综合久久激情 | 91麻豆高清视频 |