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

前端跨域請求原理及實踐

開發 前端
跨域請求并非是瀏覽器限制了發起跨站請求,而是請求可以正常發起,到達服務器端,但是服務器返回的結果會被瀏覽器攔截。

一、 跨域請求的含義

瀏覽器的同源策略,出于防范跨站腳本的攻擊,禁止客戶端腳本(如 JavaScript)對不同域的服務進行跨站調用。

一般的,只要網站的 協議名protocol、 主機host、 端口號port 這三個中的任意一個不同,網站間的數據請求與傳輸便構成了跨域調用。這也是我們下面實踐的理論基礎。我們利用 NodeJs 創建了兩個服務器,分別監聽 3000、 3001 端口(下面簡稱 服務器3000 與 服務器3001 ),由于端口號不一樣,這兩個服務器以及服務器上頁面通信構成了跨域請求。

在服務器3000 上有如下的頁面:

 

服務器3000 上的請求頁面中包含如下 JavaScript 代碼:

  1. $(function() { 
  2.  
  3.     $("#submit").click(function() { 
  4.  
  5.         var data = { 
  6.  
  7.             name: $("#name").val(), 
  8.  
  9.             id: $("#id").val() 
  10.  
  11.         }; 
  12.  
  13.         $.ajax({ 
  14.  
  15.             type: 'POST'
  16.  
  17.             data: data, 
  18.  
  19.             url: 'http://localhost:3000/ajax/deal'
  20.  
  21.             dataType: 'json'
  22.  
  23.             cache: false
  24.  
  25.             timeout: 5000, 
  26.  
  27.             success: function(data) { 
  28.  
  29.                 console.log(data) 
  30.  
  31.             }, 
  32.  
  33.             error: function(jqXHR, textStatus, errorThrown) { 
  34.  
  35.                 console.log('error ' + textStatus + ' ' + errorThrown); 
  36.  
  37.             } 
  38.  
  39.         }); 
  40.  
  41.     }); 
  42.  
  43. });  

服務器3000 對應的處理函數為

  1. pp.post('/ajax/deal'function(req, res) { 
  2.  
  3.     console.log("server accept: ", req.body.name, req.body.id) 
  4.  
  5.     var data = { 
  6.  
  7.         name: req.body.name + ' - server 3000 process'
  8.  
  9.         id: req.body.id + ' - server 3000 process' 
  10.  
  11.     } 
  12.  
  13.     res.send(data) 
  14.  
  15.     res.end() 
  16.  
  17. })  

請求頁面返回結果: 

 

此處數據處理成功。

由于數據請求一般都是由頁面發送數據字段,服務器根據這些字段作相應的處理,如數據庫查詢,字符串操作等等。所以我們這里簡單的處理數據(在數據后面加上字符串‘server 3000 process’),并且返回給瀏覽器,表示數據經過服務器端處理。

如果讓 服務器3000 上的頁面向 服務器 3001 發起請求會怎樣呢?

將請求頁面中的 ajax 請求路徑改為:

  1. $.ajax({ 
  2.  
  3.     ... 
  4.  
  5.     url: 'http://localhost:3001/ajax/deal'
  6.  
  7.     ... 
  8.  
  9. });  

服務器3001 對應的處理函數與 服務器3000 類似:

  1. app.post('/ajax/deal'function(req, res) { 
  2.  
  3.     console.log("server accept: ", req.body.name, req.body.id) 
  4.  
  5.     var data = { 
  6.  
  7.         name: req.body.name + ' - server 3001 process'
  8.  
  9.         id: req.body.id + ' - server 3001 process' 
  10.  
  11.     } 
  12.  
  13.     res.send(data) 
  14.  
  15.     res.end() 
  16.  
  17. })  

結果如下:

 

 

結果證明了我們上面所說的端口號不同,發生了跨域請求的調用。

需要注意的是,服務器 3001 控制臺有輸出:

  1. server accept:  chiaki 3001 

這說明跨域請求并非是瀏覽器限制了發起跨站請求,而是請求可以正常發起,到達服務器端,但是服務器返回的結果會被瀏覽器攔截。

二、 利用 JSONP 實現跨域調用

說道跨域調用,可能大家首先想到的或者聽說過的就是 JSONP 了。

2.1 什么是JSONP

JSONP (JSON with Padding or JSON-P) is a JSON extension used by web developers to overcome the cross-domain restrictions imposed by browsers’ same-origin policy that limits access to resources retrieved from origins other than the one the page was served by. In layman’s terms, one website cannot just simply access the data from another website.

It was developed because handling a browsers’ same origin policy can be difficult, so using JSONP abstracts the difficulties and makes it easier.

JSON stands for “JavaScript Object Notation”, a format by which object fields are represented as key-value pairs which is used to represent data.

JSONP 是 JSON 的一種使用模式,可以解決主流瀏覽器的跨域數據訪問問題。其原理是根據 XmlHttpRequest 對象受到同源策略的影響,而 <script> 標簽元素卻不受同源策略影響,可以加載跨域服務器上的腳本,網頁可以從其他來源動態產生 JSON 資料。用 JSONP 獲取的不是 JSON 數據,而是可以直接運行的 JavaScript 語句。

2.2 使用 jQuery 集成的 $.ajax 實現 JSONP 跨域調用

我們先從簡單的實現開始,利用 jQuery 中的 $.ajax 來實現上訴的跨域調用。

依然是上面的例子,我們將 服務器 3000 上的請求頁面的 JavaScript 代碼改為:

  1. // 回調函數 
  2.  
  3. function jsonpCallback(data) { 
  4.  
  5.     console.log("jsonpCallback: " + data.name
  6.  
  7.  
  8. $("#submit").click(function() { 
  9.  
  10.     var data = { 
  11.  
  12.         name: $("#name").val(), 
  13.  
  14.         id: $("#id").val() 
  15.  
  16.     }; 
  17.  
  18.     $.ajax({ 
  19.  
  20.         url: 'http://localhost:3001/ajax/deal'
  21.  
  22.         data: data, 
  23.  
  24.         dataType: 'jsonp'
  25.  
  26.         cache: false
  27.  
  28.         timeout: 5000, 
  29.  
  30.         // jsonp 字段含義為服務器通過什么字段獲取回調函數的名稱 
  31.  
  32.         jsonp: 'callback'
  33.  
  34.         // 聲明本地回調函數的名稱,jquery 默認隨機生成一個函數名稱 
  35.  
  36.         jsonpCallback: 'jsonpCallback'
  37.  
  38.         success: function(data) { 
  39.  
  40.             console.log("ajax success callback: " + data.name
  41.  
  42.         }, 
  43.  
  44.         error: function(jqXHR, textStatus, errorThrown) { 
  45.  
  46.             console.log(textStatus + ' ' + errorThrown); 
  47.  
  48.         } 
  49.  
  50.     }); 
  51.  
  52. });  

服務器 3001 上對應的處理函數為:

  1. app.get('/ajax/deal'function(req, res) { 
  2.  
  3.     console.log("server accept: ", req.query.name, req.query.id) 
  4.  
  5.     var data = "{" + "name:'" + req.query.name + " - server 3001 process'," + "id:'" + req.query.id + " - server 3001 process'" + "}" 
  6.  
  7.     var callback = req.query.callback 
  8.  
  9.     var jsonp = callback + '(' + data + ')' 
  10.  
  11.     console.log(jsonp) 
  12.  
  13.     res.send(jsonp) 
  14.  
  15.     res.end() 
  16.  
  17. })  

這里一定要注意 data 中字符串拼接,不能直接將 JSON 格式的 data 直接傳給回調函數,否則會發生編譯錯誤: parsererror Error: jsonpCallback was not called。

其實腦海里應該有一個概念:利用 JSONP 格式返回的值一段要立即執行的 JavaScript 代碼,所以不會像 ajax 的 XmlHttpRequest 那樣可以監聽不同事件對數據進行不同處理。

處理結果如下所示:

 

 

2.3 使用 <script> 標簽原生實現 JSONP

經過上面的事件,你是不是覺得 JSONP 的實現和 Ajax 大同小異?

其實,由于實現的原理不同,由 JSONP 實現的跨域調用不是通過 XmlHttpRequset 對象,而是通過 script 標簽,所以在實現原理上,JSONP 和 Ajax 已經一點關系都沒有了。看上去形式相似只是由于 jQuery 對 JSONP 做了封裝和轉換。

比如在上面的例子中,我們假設要傳輸的數據 data 格式如下:

  1.  
  2. name"chiaki"
  3.  
  4. id": "3001" 
  5.  
  6.  

那么數據是如何傳輸的呢?HTTP 請求頭的第一行如下:

  1. GET /ajax/deal?callback=jsonpCallback&name=chiaki&id=3001&_=1473164876032 HTTP/1.1 

可見,即使形式上是用 POST 傳輸一個 JSON 格式的數據,其實發送請求時還是轉換成 GET 請求。

其實如果理解 JSONP 的原理的話就不難理解為什么只能使用 GET 請求方法了。由于是通過 script 標簽進行請求,所以上述傳輸過程根本上是以下的形式:

  1. <script src = 'http://localhost:3001/ajax/deal?callback=jsonpCallback&name=chiaki&id=3001&_=1473164876032'></script> 

這樣從服務器返回的代碼就可以直接在這個 script 標簽中運行了。下面我們自己實現一個 JSONP:

服務器 3000請求頁面的 JavaScript 代碼中,只有回調函數 jsonpCallback:

  1. function jsonpCallback(data) { 
  2.  
  3.     console.log("jsonpCallback: "+data.name
  4.  
  5.  

服務器 3000請求頁面還包含一個 script 標簽:

  1. <script src = 'http://localhost:3001/jsonServerResponse?jsonp=jsonpCallback'></script> 

服務器 3001上對應的處理函數:

  1. app.get('/jsonServerResponse'function(req, res) { 
  2.  
  3.     var cb = req.query.jsonp 
  4.  
  5.     console.log(cb) 
  6.  
  7.     var data = 'var data = {' + 'name: $("#name").val() + " - server 3001 jsonp process",' + 'id: $("#id").val() + " - server 3001 jsonp process"' + '};' 
  8.  
  9.     var debug = 'console.log(data);' 
  10.  
  11.     var callback = '$("#submit").click(function() {' + data + cb + '(data);' + debug + '});' 
  12.  
  13.     res.send(callback) 
  14.  
  15.     res.end() 
  16.  
  17. })  

與上面一樣,我們在所獲取的參數后面加上 “ – server 3001 jsonp process” 代表服務器對數據的操作。從代碼中我么可以看到,處理函數除了根據參數做相應的處理,更多的也是進行字符串的拼接。

最終的結果為:

 

2.4 JSONP 總結

至此,我們了解了 JSONP 的原理以及實現方式,它幫我們實現前端跨域請求,但是在實踐的過程中,我們還是可以發現它的不足:

只能使用 GET 方法發起請求,這是由于 script 標簽自身的限制決定的。

不能很好的發現錯誤,并進行處理。與 Ajax 對比,由于不是通過 XmlHttpRequest 進行傳輸,所以不能注冊 success、 error 等事件監聽函數。

三、 使用 CORS 實現跨域調用

3.1 什么是 CORS?

Cross-Origin Resource Sharing(CORS)跨域資源共享是一份瀏覽器技術的規范,提供了 Web 服務從不同域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,是 JSONP 模式的現代版。與 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以讓網頁設計師用一般的 XMLHttpRequest,這種方式的錯誤處理比 JSONP 要來的好。另一方面,JSONP 可以在不支持 CORS 的老舊瀏覽器上運作。現代的瀏覽器都支持 CORS。

3.2 CORS 的實現

還是以 服務器 3000 上的請求頁面向 服務器 3001 發送請求為例。

服務器 3000 上的請求頁面 JavaScript 不變,如下:

  1. $(function() { 
  2.  
  3.     $("#submit").click(function() { 
  4.  
  5.         var data = { 
  6.  
  7.             name: $("#name").val(), 
  8.  
  9.             id: $("#id").val() 
  10.  
  11.         }; 
  12.  
  13.         $.ajax({ 
  14.  
  15.             type: 'POST'
  16.  
  17.             data: data, 
  18.  
  19.             url: 'http://localhost:3001/cors'
  20.  
  21.             dataType: 'json'
  22.  
  23.             cache: false
  24.  
  25.             timeout: 5000, 
  26.  
  27.             success: function(data) { 
  28.  
  29.                 console.log(data) 
  30.  
  31.             }, 
  32.  
  33.             error: function(jqXHR, textStatus, errorThrown) { 
  34.  
  35.                 console.log('error ' + textStatus + ' ' + errorThrown); 
  36.  
  37.             } 
  38.  
  39.         }); 
  40.  
  41.     }); 
  42.  
  43. });  

服務器 3001上對應的處理函數:

  1. app.post('/cors'function(req, res) { 
  2.  
  3.     res.header("Access-Control-Allow-Origin""*"); 
  4.  
  5.     res.header("Access-Control-Allow-Headers""X-Requested-With"); 
  6.  
  7.     res.header("Access-Control-Allow-Methods""PUT,POST,GET,DELETE,OPTIONS"); 
  8.  
  9.     res.header("X-Powered-By"' 3.2.1'
  10.  
  11.     res.header("Content-Type""application/json;charset=utf-8"); 
  12.  
  13.     var data = { 
  14.  
  15.         name: req.body.name + ' - server 3001 cors process'
  16.  
  17.         id: req.body.id + ' - server 3001 cors process' 
  18.  
  19.     } 
  20.  
  21.     console.log(data) 
  22.  
  23.     res.send(data) 
  24.  
  25.     res.end() 
  26.  
  27. })  

在服務器中對返回信息的請求頭進行了設置。

最終的結果為: 

 

3.3 CORS 中屬性的分析

  • Access-Control-Allow-Origin

The origin parameter specifies a URI that may access the resource. The browser must enforce this. For requests without credentials, the server may specify “*” as a wildcard, thereby allowing any origin to access the resource.

  • Access-Control-Allow-Methods

Specifies the method or methods allowed when accessing the resource. This is used in response to a preflight request. The conditions under which a request is preflighted are discussed above.

  • Access-Control-Allow-Headers

Used in response to a preflight request to indicate which HTTP headers can be used when making the actual request.

3.4 CORS 與 JSONP 的對比

CORS 除了 GET 方法外,也支持其它的 HTTP 請求方法如 POST、 PUT 等。

CORS 可以使用 XmlHttpRequest 進行傳輸,所以它的錯誤處理方式比 JSONP 好。

JSONP 可以在不支持 CORS 的老舊瀏覽器上運作。

四、 一些其它的跨域調用方式

4.1 window.name

window對象有個name屬性,該屬性有個特征:即在一個窗口 (window) 的生命周期內,窗口載入的所有的頁面都是共享一個 window.name 的,每個頁面對 window.name 都有讀寫的權限,window.name 是持久存在一個窗口載入過的所有頁面中的,并不會因新頁面的載入而進行重置。

4.2 window.postMessage()

這個方法是 HTML5 的一個新特性,可以用來向其他所有的 window 對象發送消息。需要注意的是我們必須要保證所有的腳本執行完才發送 MessageEvent,如果在函數執行的過程中調用了他,就會讓后面的函數超時無法執行。

參考:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage 

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

2016-11-01 21:51:03

phpjavascript

2022-12-26 00:00:01

Go框架前端

2020-12-20 18:00:04

跨域請求開發CORS

2017-08-20 12:49:59

瀏覽器跨域服務器

2021-06-06 13:05:15

前端跨域CORS

2024-08-28 08:45:22

2021-06-10 18:11:02

Cors跨域Web開發Cors

2024-05-20 09:28:44

Spring客戶端瀏覽器

2018-11-26 14:52:12

Web前端跨域

2023-12-12 09:45:16

前端瀏覽器

2011-11-07 11:15:31

2018-12-12 15:50:13

2022-04-01 12:38:32

cookie代碼面試

2019-03-25 15:14:19

Flutter馬蜂窩開發

2022-04-29 09:11:14

CORS瀏覽器

2019-06-21 09:25:29

前端跨域JavaScript

2014-05-26 16:52:29

移動前端web組件

2011-05-26 13:10:30

JSONPJSON

2018-04-09 12:25:11

2011-01-24 13:12:01

AjaxDojojavascript
點贊
收藏

51CTO技術棧公眾號

国产精品亚洲一区二区三区在线| 久久蜜桃av| 色综合久久九月婷婷色综合| 日韩欧美亚洲日产国产| 99久久精品免费看国产交换| 亚洲欧洲日本一区二区三区| 国产一区二区日韩| 一级黄色免费毛片| 日韩三级影视| 亚洲精品ww久久久久久p站| 激情小说网站亚洲综合网| 欧美男人天堂网| 亚洲视频狠狠| www.亚洲免费视频| 美女久久久久久久久久| 久久9999免费视频| 在线观看免费亚洲| 久久国产午夜精品理论片最新版本| 国产香蕉在线| 成人a免费在线看| 91精品综合久久久久久五月天| 国产又黄又粗又爽| 欧美精品三区| 日韩中文字在线| 五月天精品视频| 成人福利一区| 欧美一区欧美二区| 黑人粗进入欧美aaaaa| √天堂8资源中文在线| 国产精品国产精品国产专区不片| 久久精品二区| 欧美综合视频在线| 国产成人午夜电影网| 国产欧美日韩精品丝袜高跟鞋| 欧美精品韩国精品| 在线成人h网| 欧美劲爆第一页| 精品国产欧美日韩不卡在线观看 | 成人免费网视频| 狠狠人妻久久久久久综合| 一区二区三区四区五区精品视频 | 亚洲成年人影院在线| 日本免费色视频| 亚洲精品.com| 色偷偷成人一区二区三区91 | 亚洲精品成人图区| 午夜影视日本亚洲欧洲精品| 800av在线免费观看| 国产精品实拍| 亚洲美女在线一区| 欧洲美女和动交zoz0z| 国产欧美久久久久久久久| 亚洲欧洲一区二区在线播放| 亚洲激情啪啪| 欧美69xxxx| 亚洲人成精品久久久久久| 四虎免费在线观看视频| a视频在线播放| 一区二区三区精品在线观看| 女人床在线观看| 青草在线视频在线观看| 亚洲第一福利一区| 国自产拍偷拍精品啪啪一区二区| 福利在线免费视频| 亚洲国产一区二区在线播放| 亚洲中文字幕无码av永久| 极品在线视频| 91国偷自产一区二区开放时间| 热久久精品免费视频| 成人自拍视频网| 91 com成人网| 精品一区二区视频在线观看| 亚洲福利网站| 丝袜一区二区三区| 乱h高h女3p含苞待放| 一区在线视频| 欧洲亚洲在线视频| 一级久久久久久久| 粉嫩蜜臀av国产精品网站| 国产日韩精品一区观看| 久草福利在线视频| 亚洲色图在线视频| 国产原创中文在线观看| 午夜av成人| 日韩一区二区三| 久久人人爽人人爽人人片| 欧美日韩水蜜桃| 欧美人成在线视频| 无码日韩精品一区二区| 在线观看完整版免费| 竹菊久久久久久久| 在线观看日韩av| 国产一区二区播放| 香蕉久久夜色精品| 成人在线免费观看视视频| 超碰人人人人人人| 久久这里只有精品视频网| 亚洲精品9999| 欧美xxx黑人xxx水蜜桃| 欧美午夜片欧美片在线观看| 亚洲欧美偷拍另类| 性欧美lx╳lx╳| 久久久精品999| 色屁屁影院www国产高清麻豆| 狠狠色狠狠色综合系列| 久久天天狠狠| av观看在线| 欧美在线观看一二区| 国产精品99精品无码视亚| 国语产色综合| 7777免费精品视频| 精品久久久久中文慕人妻| 国产喂奶挤奶一区二区三区| 加勒比成人在线| 伊人久久一区| 在线观看欧美成人| 国产精品久免费的黄网站| 国产成人小视频| 一区二区三区四区欧美| 在线免费日韩片| 精品久久一二三区| 国产精品国产三级国产传播| 视频一区二区不卡| 精品久久久久亚洲| 国产理论电影在线| 7777精品久久久大香线蕉| 91成人在线免费视频| 亚洲日韩成人| 懂色一区二区三区av片| 9191在线播放| 欧美一区二区三区系列电影| 一本一本久久a久久| 日韩激情一二三区| 欧美日韩成人一区二区三区| 男人av在线播放| 精品国产乱子伦一区| 日本中文字幕免费在线观看| 久久超碰97中文字幕| 先锋影音亚洲资源| 亚洲成人短视频| 一本色道久久88综合日韩精品| 成人在线免费看视频| av一区二区三区| 黄色av网址在线播放| 久本草在线中文字幕亚洲| 久久久久久久网站| 欧美一区二区黄片| 欧美激情一级精品国产| 国产精品一区二区人妻喷水| 真实国产乱子伦精品一区二区三区| 国产精品久久久久久久久粉嫩av| 国产在线一在线二| 欧洲av一区二区嗯嗯嗯啊| 国产精品三级在线观看无码| 亚洲欧美日韩视频二区| 欧美成熟毛茸茸复古| 在线免费观看黄色| 亚洲男人的天堂在线aⅴ视频| 欧美伦理片在线看| 国内亚洲精品| 国产欧美亚洲视频| 老司机精品视频在线观看6| 欧美精品在线观看一区二区| 三级影片在线观看| 国产精品一区二区久久精品爱涩| 成人毛片100部免费看| 亚洲精品一区二区三区中文字幕| 欧美激情久久久久久| 色丁香婷婷综合久久| 精品欧美激情精品一区| 色一情一交一乱一区二区三区 | 一区国产精品| 国产精品麻豆| 韩剧1988在线观看免费完整版| 天天操天天操天天干| 日韩欧美中文第一页| 青青草华人在线视频| 国产精品1区二区.| 男人用嘴添女人下身免费视频| 一个色免费成人影院| 国产欧美va欧美va香蕉在| 在线中文字幕第一页| 精品亚洲一区二区三区在线观看| 国产一级片一区二区| 亚洲黄色免费电影| 国产精品815.cc红桃| 国产在线视视频有精品| 成 年 人 黄 色 大 片大 全| 欧美禁忌电影| 亚洲综合中文字幕在线| 欧美aaaaa性bbbbb小妇| 日韩在线中文字| 天天操天天干天天爱| 精品视频一区二区不卡| 国产精品99re| 日本一区二区三区免费乱视频| 久久亚洲影音av资源网| 超碰在线播放97| 日韩欧美在线网址| 国产精品白丝喷水在线观看| 成人h精品动漫一区二区三区| 欧美日韩怡红院| 国产精品啊啊啊| 日本一区二区三区四区高清视频 | 精品久久久久久亚洲精品| 免费观看a级片| 99热99精品| 成人在线短视频| 日韩激情在线观看| 国产原创中文在线观看| 一本一道久久综合狠狠老| 欧美大陆一区二区| 国产三级精品三级在线观看国产| 成人有码在线视频| 国产成人免费| 国产不卡一区二区在线播放| 大香伊人久久| 久久综合久久八八| 1024免费在线视频| 亚洲美女av在线| 天堂网在线观看视频| 欧美成人国产一区二区| 国产精品女同一区二区| 欧美性受xxxx黑人xyx性爽| 日韩av在线天堂| 亚洲精品国产一区二区三区四区在线| 亚洲一级片在线播放| 久久先锋资源网| 7788色淫网站小说| gogo大胆日本视频一区| 国产又粗又猛又爽又黄| 国产一区二区调教| 国产aⅴ爽av久久久久| 免费观看在线综合| 嫩草av久久伊人妇女超级a| 男人天堂欧美日韩| 茄子视频成人免费观看| 国产精品入口| 久久国产亚洲精品无码| 亚洲激情成人| 免费观看美女裸体网站| 红桃视频国产精品| 黄色一级视频在线播放| 一本久道久久综合婷婷鲸鱼| 国产老熟妇精品观看| 先锋亚洲精品| 日韩在线第三页| 青青草精品视频| 国内外成人免费在线视频| 毛片不卡一区二区| 一区二区三区四区毛片| 激情欧美一区二区三区在线观看| 伊人成人222| 国产电影精品久久禁18| 久久av一区二区三| 97精品国产露脸对白| 一色道久久88加勒比一| 中文字幕不卡的av| 永久免费看片直接| 亚洲线精品一区二区三区八戒| 日韩经典在线观看| 色悠悠久久综合| 一级黄色大毛片| 日韩色在线观看| 香蕉视频911| 在线日韩av观看| 成人在线观看免费网站| 欧美激情在线播放| 欧美亚洲韩国| 国产日韩欧美电影在线观看| 日韩精品一区二区三区中文| 国产亚洲精品久久飘花| 欧美人与牛zoz0性行为| 亚洲一区高清| 亚洲福利国产| 丁香婷婷激情网| 国产成人亚洲综合a∨婷婷图片| 欧亚乱熟女一区二区在线| 国产亚洲一区二区在线观看| 亚洲国产精品一区二区久久hs| 一区二区高清免费观看影视大全| 五月天综合激情| 欧美日本一区二区| 好吊色一区二区| 一区二区亚洲精品国产| 亚洲欧美成人影院| 欧美在线视频导航| 成人永久在线| 美女精品国产| 国产精品观看| 簧片在线免费看| 成人精品视频一区| 国产精品久久免费观看| 亚洲综合色丁香婷婷六月图片| 国内自拍视频在线播放| 日韩一区二区三区视频在线观看| 日色在线视频| 欧美日韩成人在线视频| 欧美一区 二区 三区| av在线不卡一区| 91综合在线| 免费在线激情视频| 国产成人精品综合在线观看| 娇妻被老王脔到高潮失禁视频| 亚洲va欧美va国产va天堂影院| 在线观看视频中文字幕| 亚洲欧美另类自拍| 国内在线免费视频| 成人乱色短篇合集| 欧美一区二区三| 免费av观看网址| 国产成a人亚洲精品| jizz18女人高潮| 色综合色综合色综合| 国产 欧美 自拍| 美日韩在线视频| 图片一区二区| 深夜福利成人| 老司机精品视频网站| 亚洲无人区码一码二码三码| 亚洲精品综合在线| 一区二区视频免费| 国产亚洲精品激情久久| 色在线中文字幕| 精品一区二区国产| 99xxxx成人网| 欧美xxxxx精品| 亚洲成av人片一区二区三区 | 国产精品中文字幕日韩精品 | 欧美深夜福利| 深夜做爰性大片蜜桃| 中文字幕中文字幕在线一区 | 秋霞一区二区| 综合视频在线观看| 久久99精品久久久久| 少妇愉情理伦三级| 欧美视频精品在线| 啊v在线视频| 国产精品一区av| 色综合久久网| 午夜啪啪小视频| 亚洲男人电影天堂| 亚洲黄色在线播放| 欧美精品激情blacked18| 8848成人影院| 97在线国产视频| 337p粉嫩大胆噜噜噜噜噜91av | 欧美精品七区| 三级欧美韩日大片在线看| 男人的天堂官网| 欧美日本在线播放| 羞羞污视频在线观看| 国产高清自拍99| 亚洲影音一区| 日韩av片在线| 7777女厕盗摄久久久| 免费污视频在线| 久久99精品久久久久子伦| 美女91精品| av在线免费播放网址| 日韩女优av电影在线观看| zzzwww在线看片免费| 欧美日韩在线观看一区二区三区| 日日摸夜夜添夜夜添精品视频| 永久免费观看片现看| 欧美一区二区三区在线观看| av影片在线| 日韩视频专区| 国产精品456露脸| 五月婷婷亚洲综合| 尤物精品国产第一福利三区| 91成人短视频在线观看| 男女私大尺度视频| 国产亚洲欧美激情| 国产婷婷一区二区三区久久| 欧美精品久久一区二区| 国产欧美日韩在线观看视频| 亚洲色图欧美自拍| 五月婷婷欧美视频| jizz日韩| 国产日韩三区| 人妖欧美一区二区| 久久久久久久久久99| 亚洲一区二区久久| 在线精品自拍| 亚洲成色www.777999| 亚洲综合图片区| 国产免费永久在线观看| 99国产超薄丝袜足j在线观看| 久久亚洲美女| 久久久久黄色片| 亚洲午夜精品久久久久久性色 | 亚洲精品91天天久久人人| 久久成人在线视频| 一本色道久久综合亚洲精品酒店| 亚洲理论中文字幕| 欧美色视频日本高清在线观看| 国产素人视频在线观看| 日本午夜精品一区二区三区| 国产福利91精品一区|