亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP 網絡技術

2019-11-08 19:47:57
字體:
來源:轉載
供稿:網友

HTTP協議詳解

HTTP協議是一個應用層的通信規范: 雙方要進行通信, 大家都要遵守一個規范——HTTP協議。HTTP協議從WWW服務器傳世超文本到瀏覽器, 可以使瀏覽器更加高效。

HTTP(Hyper Text Transfer PRotocol, 超文本傳輸協議)萬維網協會(Word Wide Web Consortium)Internet 工作小組(Internet Engineering Task Force, IETF) 合作的結果, 最終發布了一些列的RFC(Request For Comments)。RFC 1945定義了HTTP 1.0版本, 最著名的RFC 2616, 其中定義了目前普遍使用的版本——HTTP1.1。

HTTP是一個應用層協議, 由請求和響應構成, 是一個標準的客戶端服務器模型。HTTP通常承載于TCP協議之上, 也有時候承載在TLS或SSL協議層之上, 這個時候就成了常說的HTTPS。

HTTP默認端口為80, HTTPS的端口是443。

HTTP協議是一個無狀態的協議, 同一個客戶端的這次請求和上次請求沒有對應關系。

sequenceDiagramClient->>Server: 請求Server->>Client: 響應

這種設計屬于問答式交互, 客戶端和服務器一問一答, 使HTTP協議模型異常簡單。但是這種設計也存在一些問題, 例如服務端不會主動向客戶端PUSH, 一問一答的輪詢也會使TCP連接頻繁建立和斷開, 導致其交互效率不高?;谏厦嫒秉c, SPDY協議誕生了。

SPDY 協議由谷歌推出, 優化瀏覽器和服務器之間的通信, 支持流復用, 具備優先級的請求、主動發起請求、強制SSL安全傳輸等先進特性。

目前ChromeFirefox瀏覽器的最新版本都支持 SPDY, 一些服務端軟件支持SPDY, 如Jetty 8、Nginx 1.3.x等。

SPDY 協議的應用需要客戶端瀏覽器和服務端同時支持。 目前應用SPDY 協議主要是Google的產品, 如Google Plus。

HTTP 協議如何工作

瀏覽網頁是HTTP協議的主要應用, 但是不代表HTTP協議只能用于網頁的瀏覽。只要通信的雙方都遵守HTTP協議, 就有用武之地。

HTTP協議如何工作:

首先, 客戶端發送一個請求(Request) 給服務器, 服務器在接收到這個請求后將生成一個響應(Response)返回給客戶端。一次HTTP操作稱之為一個事務, 其工作過程可分為四步:

客戶端與服務器建立連接。點擊某個超鏈接, HTTP 協議開始工作建立連接后, 客戶機發送一個請求給服務器。格式為: 前面是統一資源標識符(URL)、中間是協議版本號、后面是MIME信息(包括請求修飾符、客戶機信息和可能的內容)服務器接到請求后, 給予相應的響應信息。格式為: 首先是一個狀態行(包括信息的協議版本號、一個成功或錯誤的代碼), 然后是MIME信息(包括服務器信息、實體信息和可能的內容)客戶端接收服務器返回的信息并顯示在用戶顯示屏上, 然后斷開與服務器的連接

關于HTTP協議, 可以查看RFC 2616文檔。

常用的抓包軟件有IRIS、Wireshark等。

下面介紹HTTP協議中的一些主要的概念

請求

在發起請求前, 需要先建立連接。

連接是一個傳輸層的實際環流, 它建立在兩個相互通信的應用程序之間。

HTTP 1.1協議中, Request 和 Response 頭中都可能出現一個 connection 的頭, 其決定 Client和Server通信時對于長鏈接如何處理。

HTTP 1.1 中, Client和Server默認對方支持長鏈接, 如果CLient不希望使用長鏈接, 需要在Header中指明connection 為 cliose; 如果Server 不想支持長鏈接, 則在response中需要明確說明connection 為close。

響應

在接收和解釋請求消息后, 服務器返回一個HTTP響應消息。HTTP響應也由三個部分組成: 狀態行、消息報頭、響應正文。

狀態碼由三位數字組成, 第一個數字定義了響應的類別, 有五種可能取值:

1xxx: 指示信息——請求已被成功接收, 繼續處理 2xx: 成功——請求已被成功接收、理解、接受 3xx: 重定向——要完成請求必須進行更進一步的操作 4xx: 客戶端錯誤——請求有語法錯誤或請求無法實現 5xx: 服務器端錯誤——服務器未能實現合法請求

報頭

HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭

普通報頭中有少數報頭域用作所有的請求和響應消息, 但并不用作于被傳輸的實體, 只用于傳輸的消息(如緩存控制、連接控制等)請求報頭允許客戶端向服務端傳遞請求的附加信息以及客戶端自身的信息(如UA頭、Accept等)響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息, 以及關于服務器的信息和對 Request-URI 所標識的資源進行下一步訪問的信息(如Location)。實體報頭定義了關于實體正文和請求所標識的資源的元信息, 例如有無實體正文。

比較重要的幾個報頭如下:

Host: 頭域指定請求資源的Internet主機和端口號, 必須表示請求URL的原始服務器或網關的位置。HTTP 1.1 請求必須包含主機頭域, 否則系統會以400狀態碼返回。User-Agent: 簡稱UA, 內容包含發出請求的用戶信息。通常UA包含瀏覽者的信息, 主要是瀏覽器的名詞版本和所用的操作系統。這個UA不僅僅使用瀏覽器才存在, 而是所有使用HTTP協議的客戶端都會發送, 這個UA頭是區分客戶端所使用設備的重要依據。Accept: 告訴服務器可以接受的文件格式。Cookie: Cookie分兩種, 一種是客戶端向服務器發送的, 使用Cookie報頭, 用來標記一些信息, 另一種是服務器發送給瀏覽器的, 報頭為Set-Cookie。二者主要卻別在于Cookie報頭的value可以有多個Cookie值, 并且不需要顯示指定domain等。而Set-Cookie報頭里一條記錄只能有一個Cookie的value, 需要指明domain、path等Cache-Control: 指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache0Control并不會修改另一個消息處理過程中的緩存處理機制。請求時的緩存指令包括 no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached; 響應消息中的指令包括 public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidatemax-age。Referer: 頭域允許客戶端指定請求URI的資源源地址, 這可以允許服務器生成回退鏈表, 可以用來登錄、優化緩存等。也允許廢除的或錯誤的連接由于維護的目的被追蹤。Content-Length: 內容長度Content-Range: 響應的資源范圍。可以在每次請求中標記請求的資源范圍, 在連接斷開重連時, 客戶端只請求該資源未下載的部分, 而不是重新請求整個資源, 實現斷點續傳。Accept-Encoding: 指定所能接受的編碼方式。通常服務器會對頁面進行GZip壓縮后再輸出, 以減少瀏覽, 一般瀏覽器均支持這種壓縮后的數據進行處理。自定義報頭: 在HTTP消息中, 也可以使用一些Http1.1中未定義的頭字段, 這些字段統稱為自定義的HTTP頭或者擴展頭。

php中一系列與HTTP協議相關的一系列函數:

array get_headers(string url[,intformat]) 函數: 取得服務器響應一個HTTP請求所發送的所有標頭。通常用此函數請求一個URL, 根據其返回的數據判斷狀態碼是否為200, 即可判斷所有請求的資源是否存在。file 系列函數: 包括fopen、file_get_contents等, 可以用來操作文件, 也可以用來請求一個網絡上的資源。stream_* 系列函數: 發送請求, 包括但不限于HTTP協議。socket 系列函數: 通過Socket發送和請求數據, 包括但不限于HTTP協議。cURL 擴展庫: PHP的一個擴展, 這是一個封裝的函數庫??梢杂脕砟M瀏覽器和服務器進行交互, 功能比較強大。header 函數: PHP中可用此函數發送原始的HTTP頭。需要的是, 這個函數之前不能有輸出以及空格等。

簡單的HTTP協議使用示例

<?php$html = file_get_contents('http://www.baidu.com/');print_r($http_response_header);$fp = fopen('http://www.baidu.com/', 'r');print_r(stream_get_meta_data($fp));fclose($fp);

context 參數使這些函數更加靈活, 通過該參數可以定制HTTP請求, 設置POST數據。

<?php$data = array('author' => 'pchangl', 'mail' => 'pchangl@163.com', 'text' => 'test content.');$data = http_build_query($data);$opts = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded/r/n' . 'Content-Length:' . strlen($data) . "/r/n", 'content' => $data ));$context = stream_context_create($opts);$html = @file_getcontents('http://www.baidu.com/', false, $context);

垃圾信息防御措施

IP限制: 原理在于IP難以偽造, 即使對于撥號用戶, 雖然IP可變, 但也會大大增加攻擊的工作量驗證碼: 重點是讓驗證碼難于識別, 對于數字+字母的驗證碼, 關鍵在于形變和重疊, 增加其破解中切割和字模對比的難度, 人眼尚且難以辨識, 機器就更難處理了, 再者是加大對于驗證碼的猜測難度。Token和表單欺騙: 通過加入隱藏的表單或者故意對程序混淆表單值, 進而達到判斷是真實用戶還是軟件提交的目地。審核機制: 加大了管理人員的工作量, 但理論上可以完全阻止垃圾信息, 這時最無奈也是最有效的策略。

Socket進程通信機制

Socket 通常稱為套接字, 用于描述IP地址和端口, 是一個通信鏈的句柄。應用程序通過套接字向網絡發出請求或者應答網絡請求。Socket既不是一個程序, 也不是一種協議, 只是操作系統提供的通信層的一組抽象API。

進程通信相關概念

為保證兩個相互通信的進程之間即互不干擾又協調一致工作, 操作系統為進程通信提供了相應措施, 如UNIX BSD中的管道(pipe)、命名管道(named pipe)和軟中斷信號(signal), 以及UNIX System V的消息(message)、共享存儲區(shared memory)和信號量(semaphore)等, 但這些都僅限于在本機進程之間的通信。

操作系統支持網絡協議眾多, 不同協議工作方式不同, 地址格式也不同, 因此, 網間通信還要解決多重協議的識別問題。

為了解決上述問題, TCP/IP協議引入了下列概念。

端口

網絡中可以被命名和尋址的通信端口, 是操作系統可分配的一種資源。

端口是一種軟抽象的軟件結構(包括一些數據結構和I/O緩沖區)。應用程序(即進程)通過系統調用某端口建立連接后, 傳輸層給該端口的數據都被相應進程所接收, 相應進程發給傳輸層的數據都通過該端口輸出。

TCP和UDP協議完全是兩個獨立的兩個軟件模塊, 因此各自端口號也相互獨立, TCP有一個255號端口, UDP也有一個255端口號, 二者并不沖突。TCP和UDP都有0~65535個端口號

端口號小于256的定義為常用端口, 服務器一般通過常用端口號識別客戶端只需要保證該端口號在本機是唯一的。客戶端口號因為存在時間短暫, 又稱臨時端口號大多數TCP/IP實現給臨時端口號分配1024~5000之間的端口號, 大于5000的端口是給其他服務預留的

常見的端口有FTP的21號端口, HTTP服務的80端口, SMTP的25端口和HTTPS的443端口。

地址

網絡通信中通信的兩個進程分別處在不同的機器上。遵循以下原則:

某臺主機可與多個網絡相連, 必須指定一個網絡地址網絡上每臺主機應有其唯一地址每臺主機的每個進程應有在該主機上唯一標識符。

連接

兩個進程間的通信鏈路稱為連接, 連接表現為一些緩沖區和一組協議機制。

SOCKET socket(int af, int type, int protocol);

af: 指定應用程序使用的通信協議的協議族, 對于TCP/IP協議族該參數設置AF_INET, 對于UNIX可建立本地Socket。Type: 指定創建的Socket類型 流套接字類型(SOCK_STREAM): 最常見的類型, 基于TCP協議數據報套接字類型(SOCK_DGRAM): 即UDP數據報原始套接字類型(SOCK_RAW): 在IP層對套接字進行編程, 實際上就是在IP層構造自己的IP包, 然后把這個包發出去protocol: 指定應用程序所使用的通信協議, 通常是TCP協議與UDP協議
php中的socket函數
resource socket_create(int $domain, int $type, int $protocol)bool socket_bind(resource $socket, string $address[, int $port = 0])bool socket_listen(resource $socket [, int $backlog = 0])bool socket_set_block(resource $socket)int socket_write(source $socket, string $buffer [, int $length = 0])string socket_read(resource $socket, int $length [, int type = PHP_BINARY_READ])pfsockopen(string $hostname [, int $port = -1 [, int & $errno [, string & $errstr [, float $timeout = ini_get("default_socket_timeout")]]]])bool socket_set_option(resource $socket, int $level, int $optname, mixed $optval)int socket_last_error([resource $socket])

cURL 工具及應用

建立cURL請求的基本步驟:

初始化設置選項, 包括URL執行并獲取HTML文檔內容釋放cURL句柄<?php// 1. 初始化$ch = curl_init();// 2. 設置選項, 包括URLcurl_setopt($ch, CURLOPT_URL, "http://www.php.net");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //將curl_exec() 獲取的信息以文件流的形式返回, // 而不是直接輸出curl_setopt($ch, CURLOPT_HEADER, 1); //啟用時會將頭文件的信息作為數據流輸出// 3. 執行并獲取 HTML 文檔內容$output = curl_exec($ch);// 4. 釋放cURL句柄curl_close($ch);echo $output;

cURL 常用選項

選項 描述
CURLOPT_AUTOREFERER 當根據Location 重定向時, 自動設置 header 中的 Referer 信息
CURLOPT_COOKIEsession 啟用時 cURL 會僅僅傳遞一個 Session Cookie, 忽略其他 Cookie, 默認情況下 cURL 會將所有 Cookie 返回給服務器。Session Cookie 指用來判斷服務端的 Session 是否有效而存在的 Cookie
CURLOPT_FOLLOWLOCATION 啟用將服務器返回的 Location 放在 Header 中, 遞歸的返回給服務器, 使用 CURLOPT_MAXREDIRS 可以限定遞歸返回的樹立
CURLOPT_HEADER 啟用時將頭文件的信息作為數據流輸出
CURLOPT_RETURNTRANSFER 將 curl_exec() 獲取的信息以文件流的形式返回, 而不是直接輸
CURLOPT_INFILESIZE 設定上傳文件的大小, 單位為字節(byte)
CURLOPT_MAXCONNECTS 運行最大連接數量, 超過會通過CURLOPT_CLOSEPOLICY 決定應該停止哪些連接
CURLOPT_MAXREDIRS 指定 HTTP 重定向的最多數量, 和 CURLOPT_FOLLOWLOCATION 一起使用
CURLOPT_COOKIE 設定 HTTP 請求中 Cookie 部分的內容, 多個 Cookie 用分號分隔, 分號后帶一個空格
CURLOPT_COOKIEFILE 包含 Cookie 數據的文件名, Cookie 文件的格式可以是 Netscape 格式, 或者只是純 HTTP 頭部信息存入文件
CURLOPT_ENCODING HTTP 請求頭中 Accept-Encoding 的值, 支持的編碼有 identity, deflate 和 gzip。如果空字符串”“, 請求頭會發送所有支持的編碼類型
CURLOPT_POSTFIELDS 全部數據使用 HTTP 協議中的 POST 操作來發送。 要發送文件, 在文件名前面加上@前綴并使用完整路徑。這個參數通過 urlencoded 后的字符串類似 paral=val1&para2=varl2&… 或使用一個一字段名為鍵, 字段數據為值的數組。如果value是一個數組, Content-type 頭會被設置成 multipart/form-data
CURLOPT_RANGE 以 X-Y 的形式組成, 其中 X 和 Y 都是可選項獲取數據的范圍, 單位是字節。 HTTP 傳輸線程也支持幾個這樣的重復項中間用逗號分隔如 X-Y,N-M
CURLOPT_REFERER HTTP 請求中 Referer 的內容
CURLOPT_HTTPHEADER 用來設置 HTTP 頭字段的數組。數組形式如下: array(‘Content-type: text/plain’, ‘Content-length: 100’)
CURLOPT_FILE 設置輸出文件的位置, 值是一個資源類型, 默認為 STDOUT(瀏覽器)
CURLOPT_INFILE 在上傳文件時需要讀取的文件地址, 值是一個資源類型
CURLOPT_HEADERFUNCTION 設置一個回調函數, 其有兩個參數: 第一個是 cURL 的資源句柄, 第二個是輸出的 hander 數據。header 數據的輸出必須依賴這個函數, 返回寫入的數據大小
CURLOPT_WRITEFUNCTION 擁有兩個參數的回調函數: 第一個參數是會話句柄, 第二個是 HTTP 響應頭信息的字符串。使用此回調函數, 將自行處理響應頭信息。響應頭信息是整個字符串。設置返回值為精確的已寫入字符串長度。發生錯誤時傳輸線程終止

PHPRPC 協議

一個輕型的、安全的、跨網際、跨語言的、跨平臺的、跨環境的、跨域的協議, 支持復雜對象傳輸、引用參數傳遞、內容輸出重定向、分級錯誤處理、會話,是面服務的高性能遠程過程調用協議。

PHPRPC 官網: http://phprpc.org/zh_CN/

PHPRPC 作為客戶端

<?phpinclude ("phprpc/phprpc_client.php");$client = new PHPRPC_Client('http://library.aiyooyoo.com:8080/action/book/rpc.jsp');echo $client->say('白菜');echo $client->allcount();echo $client->findbooks(0,5);

PHPRPC 作為服務端

<?phpinclude ("phprpc/phprpc_server.php");class Hello{ static function HelloWorld() { return 'Hello World'; }}$server = new PHPRPC_Server();$server->add('HelloWorld', 'hello');$server->start();

PHPRPC 客戶端調用上面服務端

<?phpinclude ("phprpc/phprpc_client.php");$client = new PHPRPC_Client('http://127.0.0.1/php/rtest.php');echo $client->HelloWorld();

SOAP

Cookie 是在遠程瀏覽器端存儲數據并以此跟蹤和識別用戶的機制。Cookie 是存儲在客戶端上的一小段數據, 瀏覽器(客戶端) 通過 HTTP 協議和服務器進行 Cookie 交互。

關于 Cookie 的 RFC 文檔主要有: RFC 6265、 RFC 2109

Cookie 主要是參照 RFC2019 標準由客戶端實現其生成、使用整個管理過程, 服務端則參照此標準實現和客戶端之間的交互指令。

Cookie 是 HTTP 頭的一部分, 即先發送或請求Cookie, 接下來才是data 域,所以setcookie() 等函數必須在其輸出數據之前調用, 這和 header() 函數是相同的。也可以使用輸出緩沖函數延遲腳本的輸出, 直到設置好所有 Cookie 和其他 HTTP 標頭。

正常 Cookie 只能在一個應用中共享, 即一個 Cookie 只能由創建它的應用獲得。實現 Cookie 的跨域, 主要是為了統一應用平臺, 即實現目前流行的單點登錄。最簡單的方式就是使用 P3P 協議。

P3P(Platform for Prvacy Preferences) 協議由萬維網協會研制, 為 Web 用戶提供了對自己公開信息的更多控制。

頁面的 Cookie 不能是瀏覽器進程的 Cookie, 如不設置超時時間的 Cookie, 則會跨域會取不到利用 IFRAME 時, 記得要在相應的動態頁面的頁頭添加一下 P3P 的信息, 否則 IE 會把 IFRAME 框里的 Cookie 給阻止掉, 產生問題本身未保存, 自然就去不到了。這其實是 FRAMESET 和 Cookie 的問題, 使用 FRAME 或者 IFRAME 時都會遇到IE 對跨域訪問 Cookie 限制比較嚴格, 在 Firefox、CHrome 等瀏覽器下測試, 即使不使用 P3P頭信息也能成功

如果是多個工程, 其間關系就變得非常復雜, 這個時候, 就需要一個完整的 SSO 方案, 通常是通過 SSO Server 系統進行中轉, CAS 就是一個成熟的 SSO 解決方案。而不是使用跨域 Cookie。

本地存儲 localStorage

一個域名的每個 Cookie 限制在4千字節鍵值對的形式存在, 如果要在本地存儲數據, 可以使用localStorage本地存儲。

//檢測瀏覽器是否支持 localStorageif (window.localStorage) { alert('This browser supports localStorage');} else { alert('This browser does not support localStorage');}

HTML 5 本地存儲只能存儲字符串, 任何格式存儲的時候都會被自動轉化為字符串, 所以讀取的時候, 需要自己進行類型轉換。

HTML 5 監聽 storage 鍵值對改變事件:

if (window.AddEventListener) { window.addEventListener("storage", handle_storage, false);} else if(window.attachEvent) { window.attachEvent("onstorage", handle_storage);}function handle_storage(e){ if (!e) { e = window.event; } // showStorage();}

Session

Session 即會話, 指一種持續性的、雙向的連接。Session 和 Cookie 本質上沒什么區別, 都是針對 HTTP 協議局限性而提出的一種保持客戶端和服務器之間保持會話狀態的機制。

Session 指用戶在瀏覽某個網站時, 從進入網站到瀏覽器關閉這段時間內的會話。

要使用 Session 必須在程序的最開始處執行 session_start(), 前面不能有任何輸出內容, 否則就會拋出 WARNING 級別錯誤。

Session 通過一個稱為 PHPSESSID 的 Cookie 和服務器聯系。Session 是通過 SessionID 判斷客戶端用戶的, 即 Session 文件的文件名。

Session 的回收是被動的, 為了保證過期的 Session 能被正?;厥? 可以修改 PHP配置文件中的 session.gc_divisor 參數提高回收率(太大了會增加負載), 或者設置一個變量判斷是否過期。

訪問量大的網站可以通過使用 session_set_save_handler函數來將 session 存儲在 Data Base(數據庫、內存表、APC等)中。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品丝袜一区二区三区| 国产亚洲精品一区二区| 欧美大肥婆大肥bbbbb| 国产视频精品在线| 主播福利视频一区| 日韩亚洲欧美成人| 国产午夜一区二区| 欧美超级乱淫片喷水| 黄色精品在线看| 俺去啦;欧美日韩| 欧美巨乳在线观看| 欧美激情免费在线| 91欧美视频网站| 日韩中文字幕免费视频| 亚洲国产精品资源| 亚洲国产欧美一区二区丝袜黑人| 成人免费福利在线| 高跟丝袜一区二区三区| 欧美香蕉大胸在线视频观看| 亚洲精品国产精品国自产观看浪潮| 国产精品三级美女白浆呻吟| 在线观看视频亚洲| 96sao精品视频在线观看| 久久久久久久电影一区| 亚洲欧洲日产国码av系列天堂| 亚洲欧美在线免费观看| 亚洲高清久久网| 成人网址在线观看| 欧美亚洲国产日韩2020| 国产精品伦子伦免费视频| 97精品国产97久久久久久春色| 欧美日韩国产999| 亚洲欧美日韩中文在线| 欧美日韩亚洲高清| 欧美成人激情图片网| 日av在线播放中文不卡| 亚洲精品天天看| 奇门遁甲1982国语版免费观看高清| 亚洲精品国产品国语在线| 亚洲女性裸体视频| 人妖精品videosex性欧美| 国产丝袜一区二区三区免费视频| 日韩一区二区欧美| 亚洲国产精品久久久久秋霞蜜臀| 精品丝袜一区二区三区| 欧美激情一区二区三级高清视频| …久久精品99久久香蕉国产| 欧美日韩国产中文精品字幕自在自线| 最近更新的2019中文字幕| 国产精品jizz在线观看麻豆| 亚洲欧美日韩国产精品| 国产91色在线播放| 欧美日韩在线观看视频小说| 亚洲国产精品一区二区久| 久久久精品在线观看| 欧美大尺度激情区在线播放| 国模精品视频一区二区| 亚洲精品综合精品自拍| 欧美在线激情视频| 2019最新中文字幕| 国产精品美女www| 欧美成人国产va精品日本一级| 成人免费xxxxx在线观看| 日韩在线中文视频| 伊是香蕉大人久久| 最新国产精品拍自在线播放| 欧美国产日本高清在线| 国产一区玩具在线观看| 午夜精品免费视频| 2025国产精品视频| 97超碰蝌蚪网人人做人人爽| 亚洲国产精品va在看黑人| 日韩av毛片网| 欧美又大粗又爽又黄大片视频| 色偷偷偷综合中文字幕;dd| 欧美日韩爱爱视频| 国产亚洲欧洲高清| 韩国精品美女www爽爽爽视频| 国产精品第三页| 久久精品国产久精国产一老狼| 欧美日韩国产色| 精品久久久久久久久中文字幕| 亚洲专区在线视频| 国产日韩欧美中文在线播放| 国产色婷婷国产综合在线理论片a| 欧美日韩国产影院| 伊人久久大香线蕉av一区二区| 久久久久久国产三级电影| 亚洲电影免费观看高清完整版在线观看| 国产成人+综合亚洲+天堂| 久久91超碰青草是什么| 成人免费网站在线| 精品久久久久久久久中文字幕| 欧美高清视频免费观看| 26uuu日韩精品一区二区| 久久久国产精品x99av| 欧美高清在线视频观看不卡| 亚洲自拍偷拍福利| 日韩在线中文视频| 亚洲精品国产精品久久清纯直播| 亚洲福利在线播放| 国产精品视频成人| 亚洲欧美一区二区精品久久久| 欧美日韩一区二区三区在线免费观看| 精品二区三区线观看| 日韩中文字幕久久| 久久香蕉国产线看观看av| 国产精品一久久香蕉国产线看观看| 国产69精品久久久久9| 久久久久久国产精品美女| 色噜噜狠狠狠综合曰曰曰| 欧美亚洲成人免费| 久久999免费视频| 社区色欧美激情 | 中文精品99久久国产香蕉| 精品呦交小u女在线| 国产精品27p| 亚洲国产一区二区三区在线观看| 国产97人人超碰caoprom| 91av在线免费观看视频| 国产美女直播视频一区| 久久久91精品国产| 亚洲国产99精品国自产| 精品免费在线观看| 亚洲综合社区网| 日韩国产精品一区| 国内精品中文字幕| 国产成人一区二区在线| 中文字幕精品在线视频| 中文字幕一区二区三区电影| 6080yy精品一区二区三区| www.欧美免费| 欧美成年人视频网站欧美| 美女性感视频久久久| 狠狠色噜噜狠狠狠狠97| 亚洲a级在线观看| 2019亚洲日韩新视频| 久久精品成人欧美大片古装| 欧美日韩中国免费专区在线看| 97人人做人人爱| 国产精品一香蕉国产线看观看| 日韩av在线网址| 久久69精品久久久久久国产越南| 欧美日韩成人黄色| 久热国产精品视频| 色www亚洲国产张柏芝| 日韩电影免费观看中文字幕| 亚洲国内高清视频| 91成人福利在线| 日韩精品在线免费观看| 国产精品盗摄久久久| 97免费视频在线| 国产丝袜一区二区| 久久久久久中文| 久热精品视频在线免费观看| 国自在线精品视频| 国产精品日本精品| 午夜精品蜜臀一区二区三区免费| 国产欧美精品日韩精品| 日韩中文字幕国产精品| 欧美亚洲视频一区二区| 国产69精品久久久久99| 久久久在线免费观看| 日韩免费在线看|