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

「深入淺出」前端開發(fā)中常用的幾種跨域解決方案

開發(fā)
本文將為大家介紹,前端開發(fā)中,最常用的幾種跨域解決方案;

看完本文可以系統(tǒng)地掌握,不同種跨域解決方案間的巧妙,以及它們的用法、原理、局限性和適用的場(chǎng)景

[[342546]]

包括以下幾個(gè)方面:

跨域的現(xiàn)象,和幾種常見(jiàn)的跨域表現(xiàn)
跨域的解決方案(原理分析)
修改本地HOST
JSONP
CORS
Proxy
Nginx反向代理
Post Message(利用iframe標(biāo)簽,實(shí)現(xiàn)不同域的關(guān)聯(lián))
同源是什么?
如果兩個(gè)URL的協(xié)議protocol、主機(jī)名host和端口號(hào)port都相同的話,則這兩個(gè)URL是同源。

同源策略
同源策略是一個(gè)重要的安全策略。它能夠阻斷惡意文檔,減少被攻擊的媒介。

真實(shí)項(xiàng)目中,很少有同源策略,大部分都是非同源策略

跨域是什么?
當(dāng)協(xié)議、域名與端口號(hào)中任意一個(gè)不相同時(shí),都算作不同域,不同域之間相互請(qǐng)求資源的表現(xiàn)(非同源策略請(qǐng)求),稱作”跨域“。

跨域現(xiàn)象
那么我們就下面的網(wǎng)址分析一下,哪一塊是協(xié)議,哪一塊是域名及端口號(hào) 

  1. http://kbs.sports.qq.com/index.html 
  2.  
  3. 協(xié)議:http(還有以一種https協(xié)議) 
  4. 域名:kbs.sports.qq.com 
  5. 端口號(hào):80 
  6.  
  7. https://127.0.0.1:3000 
  8.  
  9. 協(xié)議:https 
  10. 域名:127.0.0.1 
  11. 端口號(hào):3000 

假如我們的真實(shí)項(xiàng)目開發(fā)中的Web服務(wù)器地址為 ”http://kbs.sports.qq.com/index.html“,而需要請(qǐng)求的數(shù)據(jù)接口地址為 "http://api.sports.qq.com/list"。

當(dāng)Web服務(wù)器的地址向數(shù)據(jù)接口的地址發(fā)送請(qǐng)求時(shí),便會(huì)造成了跨域現(xiàn)象

造成跨域的幾種常見(jiàn)表現(xiàn)
服務(wù)器分開部署(Web服務(wù)器 + 數(shù)據(jù)請(qǐng)求服務(wù)器)
本地開發(fā)(本地預(yù)覽項(xiàng)目 調(diào)取 測(cè)試服務(wù)器的數(shù)據(jù))
調(diào)取第三方平臺(tái)的接口
Web服務(wù)器:主要用來(lái)靜態(tài)資源文件的處理

解決方案

  1. 修改本地HOST(不作介紹) 
  2. JSONP 
  3. CORS 
  4. Proxy 
  5. Nginx反向代理 
  6. Post Message(利用iframe標(biāo)簽,實(shí)現(xiàn)不同域的關(guān)聯(lián)) 

在后面會(huì)詳細(xì)分析這四種解決方案的原理和用法配置,以及它們的優(yōu)點(diǎn)和局限性

  1. 注意: 基于ajax或fetch發(fā)送請(qǐng)求時(shí),如果是跨域的,則瀏覽器默認(rèn)的安全策略會(huì)禁止該跨域請(qǐng)求 

  1. 補(bǔ)充說(shuō)明:以下所有的測(cè)試用例,均由Web:http://127.0.0.1:5500/index.html向API:http://127.0.0.1:1001/list發(fā)起請(qǐng)求 

API接口的服務(wù)器端是自己通過(guò)express建立的,下文在服務(wù)器端以app.use中間件的形式接受來(lái)自客戶端的請(qǐng)求并做處理。

  1. 即 在“http://127.0.0.1:1001/list”from origin“http://127.0.0.1:55”上對(duì)XMLHttpRequest的訪問(wèn)已被CORS策略阻止:被請(qǐng)求的資源上沒(méi)有“Access- control - allow-origin”頭 

在后端開啟了一個(gè)端口號(hào)為1001的服務(wù)器之后,我們來(lái)實(shí)踐一下

  1. let xhr = new XMLHttpRequest; 
  2. xhr.open('get''http://127.0.0.1:1001/list'); 
  3. xhr.onreadystatechange = () => { 
  4.   if (xhr.status === 200 && xhr.readyState === 4) { 
  5.     console.log(xhr.responseText); 
  6.   } 
  7. }; 
  8. xhr.send();  

跨域的常見(jiàn)報(bào)錯(cuò)提示
這就是由于瀏覽器默認(rèn)的安全策略禁止導(dǎo)致的。

下面介紹一下幾種常見(jiàn)的解決方案。

JSONP
原理:JSONP利用script標(biāo)簽不存在域的限制,且定義一個(gè)全局執(zhí)行上下文中的函數(shù)func

(用來(lái)接收服務(wù)器端返回的數(shù)據(jù)信息)來(lái)接收數(shù)據(jù),從而實(shí)現(xiàn)跨域請(qǐng)求。

  1. 弊端: 
  2.  
  3. 只允許GET請(qǐng)求 
  4. 不安全:只要瀏覽器支持,且存在瀏覽器的全局變量里,則誰(shuí)都可以調(diào)用 

圖解JSONP的原理

手動(dòng)封裝JSONP
callback必須是一個(gè)全局上下文中的函數(shù)

(防止不是全局的函數(shù),我們需要把這個(gè)函數(shù)放在全局上,并且從服務(wù)器端接收回信息時(shí),要瀏覽器執(zhí)行該函數(shù))

注意:

uniqueName變量存儲(chǔ)全局的回調(diào)函數(shù)(確保每次的callback都具有唯一性)
檢驗(yàn)url中是否含有"?",有的話直接拼接callback,沒(méi)有的話補(bǔ)”?“

  1. // 客戶端 
  2. function jsonp(url, callback) { 
  3.   // 把傳遞的回調(diào)函數(shù)掛載到全局上 
  4.  let uniqueName = `jsonp${new Date().getTime()}`; 
  5.   // 套了一層 anonymous function 
  6.   // 目的讓 返回的callback執(zhí)行且刪除創(chuàng)建的標(biāo)簽 
  7.   window[uniqueName] = data => { 
  8.   // 從服務(wù)器獲取結(jié)果并讓瀏覽器執(zhí)行callback 
  9.     document.body.removeChild(script); 
  10.     delete window[uniqueName]; 
  11.     callback && callback(data); 
  12.   } 
  13.    
  14.   // 處理URL 
  15.   url += `${url.includes('?')} ? '&' : '?}callback=${uniqueName}'`; 
  16.    
  17.   // 發(fā)送請(qǐng)求 
  18.   let script = document.createElement('script'); 
  19.   script.src = url; 
  20.   document.body.appendChild(script); 
  21.  
  22. // 執(zhí)行第二個(gè)參數(shù) callback,獲取數(shù)據(jù) 
  23. jsonp('http://127.0.0.1:1001/list?userName="lsh"', (result) => { 
  24.  console.log(result); 
  25. }) 
  1. // 服務(wù)器端 
  2. // Api請(qǐng)求數(shù)據(jù) 
  3. app.get('/list', (req, res) => { 
  4.    
  5.   // req.query 問(wèn)號(hào)后面?zhèn)鬟f的參數(shù)信息 
  6.   // 此時(shí)的callback 為傳遞過(guò)來(lái)的函數(shù)名字 (uniqueName) 
  7.  let { callback } = req.query; 
  8.    
  9.   // 準(zhǔn)備返回的數(shù)據(jù)(字符串) 
  10.   let res = { code: 0, data: [10,20] }; 
  11.   let str = `${callback}($(JSON.stringify(res)))`; 
  12.    
  13.   // 返回給客戶端數(shù)據(jù) 
  14.   res.send(str); 
  15. }) 

測(cè)試用例展示:

客戶端請(qǐng)求的url
服務(wù)端返回的數(shù)據(jù)
返回的callback
返回的數(shù)據(jù)信息 result

  1. // 服務(wù)器請(qǐng)求的 url 
  2. Request URL: 
  3.  http://127.0.0.1:1001/list?userName="lsh"&callback=jsonp159876002 
  4.  
  5. // 服務(wù)器返回的函數(shù)callback 
  6.  jsonp159876002({"code":0, "data": [10,20]}); 
  7.  
  8. // 客戶端接收的數(shù)據(jù)信息 
  9. { code: 0, data: Array(2) } 

當(dāng)瀏覽器發(fā)現(xiàn)返回的是jsonp159876002({"code":0, "data": [10,20]});這個(gè)函數(shù),會(huì)自動(dòng)幫我們執(zhí)行的。

JSONP弊端
在上文中說(shuō)到只要服務(wù)器端那里設(shè)置了允許通過(guò)jsonp的形式跨域請(qǐng)求,我們就可以取回?cái)?shù)據(jù)。

下面是在我們封裝完jsonp方法之后,向一個(gè)允許任何源向該服務(wù)器發(fā)送請(qǐng)求的網(wǎng)址xxx

  1. jsonp('https://matchweb.sports.qq.com/matchUnion/cateColumns?from=pc', result => { 
  2.   console.log(result); 
  3. }); 

CORS
上文提到,不允許跨域的根本原因是因?yàn)锳ccess-Control-Allow-Origin已被禁止

那么只要讓服務(wù)器端設(shè)置允許源就可以了

原理:解決掉瀏覽器的默認(rèn)安全策略,在服務(wù)器端設(shè)置允許哪些源請(qǐng)求就可以了

先來(lái)看一下下面的設(shè)置有哪些問(wèn)題

  1. // 服務(wù)器端 
  2. app.use((req, res, next) => { 
  3.  // * 允許所有源(不安全/不能攜帶資源憑證) 
  4.  res.header("Access-Control-Allow-Origin""*"); 
  5.  res.header("Access-Control-Allow-Credentials"true); 
  6.  
  7.  /* res.header("Access-Control-Allow-Headers""Content-Type,...."); 
  8.  res.header("Access-Control-Allow-Methods""GET,..."); */ 
  9.  
  10.  // 試探請(qǐng)求:在CORS跨域請(qǐng)求中,首先瀏覽器會(huì)自己發(fā)送一個(gè)試探請(qǐng)求,驗(yàn)證是否可以和服務(wù)器跨域通信,服務(wù)器返回200,則瀏覽器繼續(xù)發(fā)送真實(shí)的請(qǐng)求 
  11.  req.method === 'OPTIONS' ? res.send('CURRENT SERVICES SUPPORT CROSS DOMAIN REQUESTS!') : next(); 
  12. }); 
  13.  
  14. // 客戶端 
  15. let xhr = new XMLHttpRequest; 
  16. xhr.open('get''http://127.0.0.1:1001/list'); 
  17. xhr.setRequestHeader('Cookie''name=jason'); 
  18. xhr.withCredentials = true
  19. xhr.onreadystatechange = () => { 
  20.   if (xhr.status === 200 && xhr.readyState === 4) { 
  21.     console.log(xhr.responseText); 
  22.   } 
  23. }; 
  24. xhr.send(); 

當(dāng)我們一旦在服務(wù)器端設(shè)置了允許任何源可以請(qǐng)求之后,其實(shí)請(qǐng)求是不安全的,并且要求客戶端不能攜帶資源憑證(比如上文中的Cookie字段),瀏覽器端會(huì)報(bào)錯(cuò)。

告訴我們Cookie字段是不安全的也不能被設(shè)置的,如果允許源為'*'的話也是不允許的。

假如在我們的真實(shí)項(xiàng)目開發(fā)中

正確寫法✅

設(shè)置單一源(安全/也可以攜帶資源憑證/只能是單一一個(gè)源)
也可以動(dòng)態(tài)設(shè)置多個(gè)源:每一次請(qǐng)求都會(huì)走這個(gè)中間件,我們首先設(shè)置一個(gè)白名單,如果當(dāng)前客戶端請(qǐng)求的源在白名單中,我們把Allow-Origin動(dòng)態(tài)設(shè)置為當(dāng)前這個(gè)源

  1. app.use((req, res, next) => { 
  2.    
  3.   // 也可自定義白名單,檢驗(yàn)請(qǐng)求的源是否在白名單里,動(dòng)態(tài)設(shè)置 
  4.   /* let safeList = [ 
  5.   "http://127.0.0.1:5500"
  6.   xxx, 
  7.   xxxxx, 
  8.  ]; */ 
  9.  res.header("Access-Control-Allow-Origin""http://127.0.0.1:5500"); 
  10.  res.header("Access-Control-Allow-Credentials"true); // 設(shè)置是否可攜帶資源憑證 
  11.  
  12.  /* res.header("Access-Control-Allow-Headers""Content-Type,...."); 
  13.  res.header("Access-Control-Allow-Methods""GET,..."); */ 
  14.  
  15.  // 試探請(qǐng)求:在CORS跨域請(qǐng)求中,首先瀏覽器會(huì)自己發(fā)送一個(gè)試探請(qǐng)求,驗(yàn)證是否可以和服務(wù)器跨域通信,服務(wù)器返回200,則瀏覽器繼續(xù)發(fā)送真實(shí)的請(qǐng)求 
  16.  req.method === 'OPTIONS' ? res.send('CURRENT SERVICES SUPPORT CROSS DOMAIN REQUESTS!') : next(); 
  17. }); 

CORS的好處
原理簡(jiǎn)單,容易配置,允許攜帶資源憑證
仍可以用 ajax作為資源請(qǐng)求的方式
可以動(dòng)態(tài)設(shè)置多個(gè)源,通過(guò)判斷,將Allow-Origin設(shè)置為當(dāng)前源
CORS的局限性
只允許某一個(gè)源發(fā)起請(qǐng)求
如多個(gè)源,還需要?jiǎng)討B(tài)判斷
Proxy
Proxy翻譯為“代理”,是由webpack配置的一個(gè)插件,叫"webpack-dev-server"(只能在開發(fā)環(huán)境中使用)

Proxy在webpack中的配置

  1. const path = require('path'); 
  2. const HtmlWebpackPlugin = require('html-webpack-plugin'); 
  3.  
  4. module.exports = { 
  5.   mode: 'production'
  6.   entry: './src/main.js'
  7.   output: {...}, 
  8.   devServer: { 
  9.     port: '3000'
  10.     compress: true
  11.     opentrue
  12.     hot: true
  13.     proxy: { 
  14.       '/': { 
  15.         target: 'http://127.0.0.1:3001'
  16.         changeOrigin: true 
  17.       } 
  18.     } 
  19.   }, 
  20.   // 配置WEBPACK的插件 
  21.   plugins: [ 
  22.     new HtmlWebpackPlugin({ 
  23.       template: `./public/index.html`, 
  24.       filename: `index.html` 
  25.     }) 
  26.   ] 
  27. }; 

圖解Proxy的原理

Proxy代理其實(shí)相當(dāng)于由webpack-dev-server配置在本地創(chuàng)建了一個(gè)port=3000的服務(wù),利用node的中間層代理(分發(fā))解決了瀏覽器的同源策略限制。

但是它只能在開發(fā)環(huán)境下使用,因?yàn)閐ev-server只是一個(gè)webpack的一個(gè)插件;

如果需要在生產(chǎn)環(huán)境下使用,需要我們配置Nginx反向代理服務(wù)器;

另外如果是自己實(shí)現(xiàn)node服務(wù)層代理:無(wú)論是開發(fā)環(huán)境還是生產(chǎn)環(huán)境都可以處理(node中間層和客戶端是同源,中間層幫助我們向服務(wù)器請(qǐng)求數(shù)據(jù),再把數(shù)據(jù)返回給客戶端)

Proxy的局限性
只能在本地開發(fā)階段使用

配置Nginx反向代理
主要作為生產(chǎn)環(huán)境下跨域的解決方案。

原理:利用Node中間層的分發(fā)機(jī)制,將請(qǐng)求的URL轉(zhuǎn)向服務(wù)器端的地址

配置反向代理

  1. server { 
  2.  listen: 80; 
  3.   server_name: 192.168.161.189; 
  4.   loaction: { 
  5.   proxy_pass_http://127.0.0.1:1001; // 請(qǐng)求轉(zhuǎn)向這個(gè)URL地址,服務(wù)器地址 
  6.     root html; 
  7.     index index.html; 
  8.   } 

簡(jiǎn)單寫了一下偽代碼,實(shí)際開發(fā)中根據(jù)需求來(lái)配。

POST MESSAGE
假設(shè)現(xiàn)在有兩個(gè)頁(yè)面,分別為A頁(yè)面port=1001、B頁(yè)面port=1002,實(shí)現(xiàn)頁(yè)面A與頁(yè)面B的頁(yè)面通信(跨域)

原理:

把 B頁(yè)面當(dāng)做A的子頁(yè)面嵌入到A頁(yè)面里,通過(guò)iframe.contentWindow.postMessage向B頁(yè)面?zhèn)鬟f某些信息
在A頁(yè)面中通過(guò)window.onmessage獲取A頁(yè)面?zhèn)鬟f過(guò)來(lái)的信息ev.data(見(jiàn)下代碼)
同理在B頁(yè)面中通過(guò)ev.source.postMessage向A頁(yè)面?zhèn)鬟f信息
在A頁(yè)面中通過(guò)window.onmessage獲取B頁(yè)面?zhèn)鬟f的信息
主要利用內(nèi)置的postMessage和onmessage傳遞信息和接收信息。

A.html

  1. // 把 B頁(yè)面當(dāng)做A的子頁(yè)面嵌入到A頁(yè)面里 
  2. <iframe id="iframe" src="http://127.0.0.1:1002/B.html" frameborder="0" style="display: none;"></iframe> 
  3.  
  4. <script> 
  5.   iframe.onload = function () { 
  6.     iframe.contentWindow.postMessage('珠峰培訓(xùn)''http://127.0.0.1:1002/'); 
  7.   } 
  8.  
  9.   //=>監(jiān)聽(tīng)B傳遞的信息 
  10.   window.onmessage = function (ev) { 
  11.     console.log(ev.data); 
  12.   } 
  13. </script> 

B.html

  1. <script> 
  2.   //=>監(jiān)聽(tīng)A發(fā)送過(guò)來(lái)的信息 
  3.   window.onmessage = function (ev) { 
  4.     // console.log(ev.data); 
  5.  
  6.     //=>ev.source:A 
  7.     ev.source.postMessage(ev.data + '@@@''*'); 
  8.   } 
  9. </script> 

幾種方案的比較
1. JSONP方案需要前后端共同配置完成(利用script標(biāo)簽不存在域的限制)【麻煩,老項(xiàng)目使用】

2. CORS原理簡(jiǎn)單,但只能配置單一源,如果需要配置多個(gè)源,也只能從白名單中篩選出某一個(gè)符合表求的origin【偶爾使用】

服務(wù)器端需要單獨(dú)做處理,客戶端較為簡(jiǎn)單

3. Proxy客戶端通過(guò)dev-server,生產(chǎn)環(huán)境需要配置Nginx反向代理(利用Node中間層分發(fā)機(jī)制)【常用】

 

 

責(zé)任編輯:姜華 來(lái)源: 前端時(shí)光屋
相關(guān)推薦

2012-03-27 15:23:15

JSONPAJAX

2023-05-06 15:32:04

2010-07-26 12:57:12

OPhone游戲開發(fā)

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2018-12-12 15:50:13

2010-07-26 13:55:10

OPhone游戲開發(fā)

2018-03-15 09:13:43

MySQL存儲(chǔ)引擎

2019-11-11 14:51:19

Java數(shù)據(jù)結(jié)構(gòu)Properties

2009-11-30 16:46:29

學(xué)習(xí)Linux

2022-12-02 09:13:28

SeataAT模式

2021-07-20 15:20:02

FlatBuffers阿里云Java

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構(gòu)調(diào)度器

2012-05-21 10:06:26

FrameworkCocoa

2022-09-26 09:01:15

語(yǔ)言數(shù)據(jù)JavaScript

2023-03-20 09:48:23

ReactJSX

2009-12-25 15:49:43

Linux rescu

2019-11-14 09:53:30

Set集合存儲(chǔ)

2022-11-09 08:06:15

GreatSQLMGR模式
點(diǎn)贊
收藏

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

狠狠色综合色区| 欧美大片免费观看在线观看网站推荐| 亚洲国产精品久久久久婷婷老年 | 国产成人精品电影久久久| 久久久成人精品一区二区三区| 欧美性猛交xxxxx少妇| 都市激情亚洲| 色婷婷国产精品| 9l视频自拍9l视频自拍| 亚洲国产精品久久久久久久 | 久久精品国产亚洲a| 亚洲乱亚洲乱妇无码| 亚洲精品性视频| 不卡视频观看| 最好看的中文字幕久久| 久久国产精品高清| va视频在线观看| 日韩av一区二区三区四区| 国产亚洲在线播放| 激情视频免费网站| 麻豆视频在线观看免费网站黄| av电影在线观看不卡| 成人福利在线视频| 欧美色图亚洲天堂| 成人综合专区| 日韩国产高清污视频在线观看| 日本三级免费观看| 天堂8中文在线| 国产精品热久久久久夜色精品三区 | 亚洲欧美日韩一区在线观看| 亚洲免费视频观看| 国产一线在线观看| www 久久久| 欧美午夜精品理论片a级按摩| 在线免费观看成人网| 欧美色视频免费| 成人美女视频在线观看18| 国产欧美日韩丝袜精品一区| 免费在线一级片| 欧美一级三级| 亚洲第一在线视频| 乱码一区二区三区| 日本一区精品视频| 欧美一区二区三区在| 国产中文字幕二区| segui88久久综合| 一区二区三区四区在线| 欧美成ee人免费视频| 日本黄色三级视频| www.欧美日韩国产在线| 国产精品一区二区三区在线| 亚洲国产精品欧美久久| 视频一区在线播放| 日韩美女中文字幕| 精品无码一区二区三区的天堂| 欧美成人一区二免费视频软件| 日韩激情片免费| 亚洲黄色免费在线观看| 啄木系列成人av电影| 国产视频自拍一区| xxx在线播放| 奇米狠狠一区二区三区| 欧美变态凌虐bdsm| 久久99爱视频| 亚洲老司机网| 日韩一级视频免费观看在线| 日本女人性视频| 99ri日韩精品视频| 精品无码久久久久久国产| 亚洲男人天堂2021| 亚洲不卡在线| 欧美三级日韩在线| 黄网站色视频免费观看| 2019中文字幕在线电影免费| 性做久久久久久免费观看欧美| 制服国产精品| 人妖欧美1区| 亚洲欧美在线另类| 免费看毛片的网址| 亚洲精品mv| 欧美日本视频在线| 国产性猛交96| 国产一区网站| 亚洲精品视频网上网址在线观看| 国产人妻精品午夜福利免费| 美女午夜精品| 日日狠狠久久偷偷四色综合免费 | 日本免费一区二区视频| 亚洲国产成人爱av在线播放| 精品人妻无码一区二区三区换脸| 日韩av资源网| 日韩中文字幕av| 国产调教在线观看| 欧美国内亚洲| 日本亚洲欧美三级| 国产精品免费无遮挡| 99久久99久久久精品齐齐| 亚洲v国产v在线观看| 国产区美女在线| 欧美日韩一级二级三级| 无码人妻精品一区二区三区99不卡| 视频一区国产| 国产一区二区三区高清在线观看 | 亚洲视频免费在线观看| 久久久999免费视频| 国产精品久久久久久久久久齐齐| 欧美特级限制片免费在线观看| 天天爱天天操天天干| 伊人久久亚洲| 日韩综合中文字幕| 天堂网中文字幕| 成人爽a毛片一区二区免费| 亚洲欧美日韩国产yyy| 欧亚av在线| 日韩欧美国产综合在线一区二区三区| 韩国三级与黑人| 国产精品亚洲人成在99www| 色在人av网站天堂精品| 中文字幕人妻丝袜乱一区三区| 蜜臀久久99精品久久久画质超高清 | 国产一区二区三区在线观看网站| 欧美图片第一页| 狠狠88综合久久久久综合网| 成人中文字幕+乱码+中文字幕| 亚洲AV无码一区二区三区性| 成人国产视频在线观看| 欧美裸体网站| 国内高清免费在线视频| 欧美一级理论片| av在线网站观看| 欧美 日韩 国产一区二区在线视频| 欧美国产精品va在线观看| 亚洲一级在线播放| 久久久综合激的五月天| 男女私大尺度视频| 天堂精品久久久久| 欧美日韩国产成人在线| 精品国产一区二区三区四| 麻豆免费看一区二区三区| 欧美成人在线免费观看| 欧美xxxhd| 欧美电影精品一区二区| 黄色一级片在线免费观看| 久久久国产精品一区二区中文| 国产精品日韩在线播放| 亚洲男女视频在线观看| 一区二区三区四区激情| 亚洲狼人综合干| 国产欧美亚洲精品a| 日韩免费观看网站| 九色在线视频| 欧美性猛交一区二区三区精品| 手机看片国产精品| 精品一区av| 国产精品一区二区三区久久久| 丰满岳乱妇国产精品一区| 国产女人18水真多18精品一级做| 日韩在线视频在线| 成人久久网站| 日韩精品视频三区| 成人公开免费视频| 成人涩涩免费视频| 欧美大片在线播放| 日韩精品三级| 日韩天堂在线视频| 国产女人18毛片水18精| 日本一区二区综合亚洲| 一级黄色特级片| 综合激情视频| 国产亚洲自拍偷拍| 欧美日韩电影免费看| 丝袜亚洲另类欧美重口| 久久久久久少妇| 国产亚洲综合色| 一区二区在线免费看| 亚洲欧美一级二级三级| 国外成人免费视频| xxx性欧美| 亚洲欧美日韩国产精品| 日韩免费在线视频观看| 国产亚洲成aⅴ人片在线观看| 精品久久一二三| 超碰成人久久| 国产精品美女呻吟| 综合久久2019| 国产午夜精品麻豆| 欧美在线观看不卡| 99视频精品全部免费在线| 成人午夜激情av| 欧美精品麻豆| 日韩免费三级| 欧美暴力调教| 欧美日韩国产第一页| 亚洲第一天堂影院| 在线视频国内一区二区| 2021亚洲天堂| 国产成人a级片| 少妇激情一区二区三区| 欧美日韩影院| 国产精品久久波多野结衣| 一区二区视频免费完整版观看| 在线播放亚洲激情| 亚洲成人中文字幕在线| 偷偷要91色婷婷| 国产精品国产精品88| 久久亚洲综合色一区二区三区 | 蜜桃av一区二区| 国产曰肥老太婆无遮挡| 青青草91久久久久久久久| 国产欧美日韩亚洲| 97色婷婷成人综合在线观看| 欧美孕妇毛茸茸xxxx| 中文字幕中文字幕在线十八区 | 2019精品视频| 伊人影院在线视频| 亚洲精品电影网在线观看| 国产口爆吞精一区二区| 日本乱人伦一区| 欧美激情精品久久久久久免费| 国产精品亚洲综合一区在线观看| 中文字幕一区二区三区四区五区| 日本一区二区三区视频在线看 | 国产成人午夜性a一级毛片| 97超碰国产精品女人人人爽| 污污的网站在线免费观看| 日韩中文在线中文网三级| 国产91麻豆视频| 欧美一区三区二区| 一区二区日韩视频| 欧美性猛交xxxx乱大交退制版| 男女做暖暖视频| 91日韩在线专区| 国产草草浮力影院| 蜜桃一区二区三区四区| 凹凸日日摸日日碰夜夜爽1| 日韩视频二区| 欧美日韩亚洲一| 国产精品毛片久久| 亚洲欧洲精品一区二区| 黑人操亚洲人| 日韩欧美一区二区视频在线播放| 日韩亚洲精品在线观看| 91在线视频成人| 国产人与zoxxxx另类91| 亚洲一区中文字幕| 亚州一区二区三区| 国产精品电影一区| 国产91足控脚交在线观看| 欧美成人午夜免费视在线看片 | 俺去亚洲欧洲欧美日韩| 五月婷婷深深爱| 日韩av中文字幕在线播放| 国产精品女人久久久| 欧美巨大另类极品videosbest| 中文字幕一区二区三区手机版| 国产精品久久久久精k8| 国产精品久久AV无码| 91免费观看国产| 中文字幕在线观看免费高清| eeuss影院一区二区三区| 国产精品九九视频| 91麻豆精品一区二区三区| 成年人在线观看av| 国产午夜精品一区二区三区嫩草| 久久精品女同亚洲女同13| 91视频www| 三年中国中文观看免费播放| 国产精品国模大尺度视频| 久热这里有精品| 婷婷综合五月天| 黄色在线观看免费| 精品国产户外野外| 欧美成人一区二区视频| 9191成人精品久久| 日本精品一二区| 亚洲欧洲在线看| 国产三区在线观看| 久久激情视频免费观看| 美女航空一级毛片在线播放| 日本视频久久久| 在线日韩三级| 久久久久综合一区二区三区| 日韩精品欧美| 亚洲国产欧美日韩| 亚洲手机在线| 免费一级特黄录像| 成人一区二区三区在线观看 | 久久久久久激情| 欧美性猛交xxxx乱大交蜜桃| 色播视频在线播放| 五月天中文字幕一区二区| 日韩一级片中文字幕| 日韩一级成人av| 国产福利电影在线| 欧美激情2020午夜免费观看| 日韩国产激情| 97se亚洲综合在线| sdde在线播放一区二区| 久久av综合网| 蜜桃精品视频在线| 女人高潮一级片| 久久精品国产秦先生| 中文字幕日韩综合| 国产亚洲综合av| 日本最新中文字幕| 91精品国产综合久久香蕉麻豆| 国产aⅴ爽av久久久久成人| 精品在线欧美视频| 欧美寡妇性猛交xxx免费| 国产精品老牛影院在线观看| 国产精品午夜av| 99精品一级欧美片免费播放| 欧美大片一区| 国产视频1区2区3区| 97久久精品人人澡人人爽| 日本青青草视频| 91麻豆精品国产91久久久资源速度| 国产激情视频在线播放| 中文国产亚洲喷潮| 高清不卡av| 国产一区免费视频| 欧美在线观看天堂一区二区三区| 成人一区二区免费视频| 精品午夜久久福利影院| 变态另类ts人妖一区二区| 欧美丝袜第一区| 日本成人动漫在线观看| 欧美激情视频一区二区| av综合电影网站| 国内精品久久久久久久果冻传媒| 狠狠色丁香婷婷综合影院| 男女猛烈激情xx00免费视频| 国产精品一区二区在线观看网站| 色噜噜在线观看| 亚洲3atv精品一区二区三区| 亚洲h视频在线观看| 九九热这里只有在线精品视| 国产一区二区三区免费观看在线 | 欧美老女人另类| 黄色a级片免费| 国产麻豆日韩欧美久久| 国产免费美女视频| 91精品国产综合久久精品麻豆| 亚洲日本国产精品| 国模视频一区二区| 亚洲精品成a人ⅴ香蕉片| 亚洲第一综合| 久久激五月天综合精品| 美国精品一区二区| 欧美日韩另类字幕中文| 日韩国产福利| 国产精品扒开腿做爽爽爽视频| 2020国产精品极品色在线观看| 视频在线99| 久久国产精品免费| av男人的天堂av| 欧美日韩在线电影| 欧美三级电影一区二区三区| 91精品视频专区| 黄色欧美成人| 亚洲乱码国产乱码精品精大量| 亚洲精品视频在线观看网站| 超碰免费在线97| 4438全国亚洲精品在线观看视频| 亚洲成av人片在线观看www| 日韩精品综合在线| 91啪九色porn原创视频在线观看| 麻豆亚洲av成人无码久久精品| 欧美日韩日日摸| 99自拍视频在线观看| 国产精品一区二区免费| 女人香蕉久久**毛片精品| 四虎精品一区二区| 色激情天天射综合网| 免费在线观看黄| 国产高清一区视频| 久久人人97超碰国产公开结果| 国产又黄又粗又猛又爽的视频| 亚洲综合视频在线| 日本福利片在线| 欧美性做爰毛片| 欧美电影在线观看完整版| 已婚少妇美妙人妻系列| 久久综合狠狠综合久久综合88| 日韩精品――中文字幕| 国产亚洲视频在线| 日韩不卡在线| 日韩小视频网站| 欧美国产在线观看| 青青视频在线免费观看| 亚洲欧洲美洲在线综合| 欧美电影免费观看| 99re99热| 国产一区二区精品久久| 久久久久久久黄色片| 久久久999成人| 妖精视频一区二区三区| 免费裸体美女网站| 亚洲一区在线看| 午夜在线视频|