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

Axios vs. fetch():哪個最適合 HTTP 請求?

開發 前端
在本文中,我將按照基本語法、向后兼容性、響應超時、自動JSON數據轉換、HTTP攔截器、下載進度、同時請求這些方面來比較fetch()和Axios,看看它們如何執行任務。

因為Axios的易于使用,所以有些開發人員比起內置的API,更喜歡Axios。

但許多人高估了這個庫。

fetch() API不但完全能夠重現Axios的關鍵功能,而且還有隨時可用于所有現代瀏覽器中的獨特優勢。

在本文中,我將按照基本語法、向后兼容性、響應超時、自動JSON數據轉換、HTTP攔截器、下載進度、同時請求這些方面來比較fetch()和Axios,看看它們如何執行任務。

希望在本文結束時,大家對這兩個API有了更深入的了解。

基本語法

在我們深入研究Axios更高級地功能之前,先與fetch()進行基本語法的比較。

下面是Axios如何將帶有自定義請求頭的[POST]請求發送到指定URL的代碼:

// axios

const url = 'https://jsonplaceholder.typicode.com/posts'
const data = {
  a: 10,
  b: 20,
};
axios
  .post(url, data, {
    headers: {
      Accept: "application/json",
      "Content-Type": "application/json;charset=UTF-8",
    },
  })
  .then(({data}) => {
    console.log(data);
});

與fetch()版本進行比較:

// fetch()

const url = "https://jsonplaceholder.typicode.com/todos";
const options = {
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json;charset=UTF-8",
  },
  body: JSON.stringify({
    a: 10,
    b: 20,
  }),
};
fetch(url, options)
  .then((response) => response.json())
  .then((data) => {
    console.log(data);
  });

注意:

  • 為發送數據,fetch()使用body屬性將數據發送到服務端,而Axios使用data屬性
  • fetch()中的數據使用JSON.stringify方法轉換為字符串
  • Axios自動轉換從服務器返回的數據,但使用fetch()時,你必須調用response.json方法將數據解析為JavaScript對象。
  • 使用Axios,服務器提供的數據響應可以在數據對象中訪問,而對于fetch()方法,最終數據可以命名為任何變量

向后兼容性

Axios的主要賣點之一是其廣泛的瀏覽器支持。

即使是像IE11這樣的舊瀏覽器也可以毫無問題地運行Axios。這是因為它背后使用了XMLHttpRequest。

而fetch()僅支持Chrome 42+,Firefox 39+,Edge 14+和Safari 10.3+。

如果你使用Axios的唯一原因是向后兼容性,那么實際上并不需要HTTP庫。而且,你可以將fetch()與polyfill一起使用,在不支持fetch()的web瀏覽器上實現類似的功能。

要使用fetch() polyfill,可以通過npm命令進行安裝,如下所示:

npm install whatwg-fetch --save

然后,提出如下請求:

import 'whatwg-fetch'
window.fetch(...)

謹記,在有些舊瀏覽器中,可能還需要promise polyfill。

響應超時

在Axios中設置超時的簡單性,是一些開發人員比fetch()更喜歡Axios的原因之一。

在Axios中,你可以使用配置對象的timeout屬性來設置請求中止之前的毫秒數。

例如:

axios({
  method: 'post',
  url: '/login',
  timeout: 4000,    // 4 seconds timeout
  data: {
    firstName: 'David',
    lastName: 'Pollock'
  }
})
.then(response => {/* handle the response */})
.catch(error => console.error('timeout exceeded'))

Fetch()通過AbortController接口提供類似的功能。

不過,它的代碼不如Axios版本簡單:

const controller = new AbortController();
const options = {
  method: 'POST',
  signal: controller.signal,
  body: JSON.stringify({
    firstName: 'David',
    lastName: 'Pollock'
  })
};  
const promise = fetch('/login', options);
const timeoutId = setTimeout(() => controller.abort(), 4000);

promise
  .then(response => {/* handle the response */})
  .catch(error => console.error('timeout exceeded'));

代碼使用AbortController.abort()構造函數創建AbortController對象,它允許我們稍后中止請求。

Signal是AbortController的只讀屬性,提供了一種與請求通信或中止請求的方法。

如果服務器在4秒內沒有響應,則調用controller.abort(),終止操作。

自動JSON數據轉換

如前所述,Axios在發送請求時會自動字符串化數據(當然你也可以覆蓋默認行為并定義不同的轉換機制)。

但是,當使用fetch()時,你必須手動執行此操作。

比較:

// axios
axios.get('https://api.github.com/orgs/axios')
  .then(response => {
    console.log(response.data);
  }, error => {
    console.log(error);
  });
// fetch()
fetch('https://api.github.com/orgs/axios')
  .then(response => response.json())    // one extra step
  .then(data => {
    console.log(data) 
  })
  .catch(error => console.error(error));

自動轉換數據是一個不錯的功能,但同樣,這不是你不能用fetch()做的事情。

HTTP攔截器

Axios的主要功能之一是它能夠攔截HTTP請求。

當你需要檢查或更改從應用程序到服務器的HTTP請求時,使用HTTP攔截器非常方便,從服務器到應用程序亦是如此(例如,日志記錄、身份驗證或重試失敗的HTTP請求)。

使用攔截器就不必為每個HTTP請求編寫單獨的代碼。

在你想要為處理請求和響應設置全局策略時,HTTP攔截器非常有用。

以下是在Axios中聲明請求攔截器的方法:

axios.interceptors.request.use(config => {
  // log a message before any HTTP request is sent
  console.log('Request was sent');

  return config;
});

// sent a GET request
axios.get('https://api.github.com/users/sideshowbarker')
  .then(response => {
    console.log(response.data);
  });

上面的代碼中,axios.interceptors.request.use()方法用于定義發送HTTP請求之前要運行的代碼。而axios.interceptors.response.use()用于攔截來自服務器的響應。

假設存在網絡錯誤,那么通過響應偵聽器,可以重試相同的請求。

默認情況下,fetch()不提供攔截請求的方法,但它的解決方法也并不復雜。

那就是覆蓋全局fetch()方法并定義自己的攔截器,如下所示:

fetch = (originalFetch => {
  return (...arguments) => {
    const result = originalFetch.apply(this, arguments);
      return result.then(console.log('Request was sent'));
  };
})(fetch);

fetch('https://api.github.com/orgs/axios')
  .then(response => response.json())
  .then(data => {
    console.log(data) 
  });

下載進度

進度條在加載時非常有用,尤其是對于互聯網速度較慢的用戶。

以前,JavaScript程序員使用XMLHttpRequest.onprogress回調處理程序來實現進度指示器。

Fetch API沒有onprogress處理程序。事實上,它通過響應對象的body屬性來提供ReadableStream的實例。

以下示例表明如何使用ReadableStream在圖像下載期間為用戶提供即時反饋:

index.html
<!-- Wherever you html is -->
  <div id="progress" src="">progress</div>
  <img id="img">

script.js
'use strict'
const element = document.getElementById('progress');
fetch('https://fetch-progress.anthum.com/30kbps/images/sunrise-baseline.jpg')
  .then(response => {
    if (!response.ok) {
      throw Error(response.status+' '+response.statusText)
    }
    // ensure ReadableStream is supported
    if (!response.body) {
      throw Error('ReadableStream not yet supported in this browser.')
    }
    // store the size of the entity-body, in bytes
    const contentLength = response.headers.get('content-length');
    // ensure contentLength is available
    if (!contentLength) {
      throw Error('Content-Length response header unavailable');
    }
    // parse the integer into a base-10 number
    const total = parseInt(contentLength, 10);
    let loaded = 0;
    return new Response(
      // create and return a readable stream
      new ReadableStream({
        start(controller) {
          const reader = response.body.getReader();
          read();
          function read() {
            reader.read().then(({done, value}) => {
              if (done) {
                controller.close();
                return; 
              }
              loaded += value.byteLength;
              progress({loaded, total})
              controller.enqueue(value);
              read();
            }).catch(error => {
              console.error(error);
              controller.error(error)                  
            })
          }
        }
      })
    );
  })
  .then(response => 
    // construct a blob from the data
    response.blob()
  )
  .then(data => {
    // insert the downloaded image into the page
    document.getElementById('img').src = URL.createObjectURL(data);
  })
  .catch(error => {
    console.error(error);
  })
function progress({loaded, total}) {
  element.innerHTML = Math.round(loaded/total*100)+'%';
}

在Axios中實現進度指示器更簡單,尤其是在使用Axios進度條模塊時。

首先,包含以下樣式和腳本:

// the head of your HTML
    <link rel="stylesheet" type="text/css"
         />


// the body of your HTML
     <img id="img" />
    <button onclick="downloadFile()">Get Resource</button>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://cdn.rawgit.com/rikmms/progress-bar-4-axios/0a3acf92/dist/index.js"></script>

// add the following to customize the style

<style>
    #nprogress .bar {
        background: red !important;
    }
    #nprogress .peg {
        box-shadow: 0 0 10px red, 0 0 5px red !important;
    }
    #nprogress .spinner-icon {
        border-top-color: red !important;
        border-left-color: red !important;
    }
</style>

然后像這樣實現進度條:

<script type="text/javascript">
        loadProgressBar();

        function downloadFile() {
          getRequest(
            "https://fetch-progress.anthum.com/30kbps/images/sunrise-baseline.jpg"
          );
        }

        function getRequest(url) {
          axios
            .get(url, { responseType: "blob" })
            .then(function (response) {
              const reader = new window.FileReader();
              reader.readAsDataURL(response.data);
              reader.onload = () => {
                document.getElementById("img").setAttribute("src", reader.result);
              };
            })
            .catch(function (error) {
              console.log(error);
            });
        }
      </script>

代碼使用FileReaderAPI異步讀取下載的圖像。

readAsDataURL方法以Base64編碼字符串的形式返回圖像的數據,然后將其插入到img標記的src屬性中以顯示圖像。

并發請求

為了同時發出多個請求,Axios提供axios.all()方法。

只需將請求數組傳遞給此方法,然后使用axios.spread()將響應數組的屬性分配給單獨的變量:

axios.all([
  axios.get('https://api.github.com/users/iliakan'), 
  axios.get('https://api.github.com/users/taylorotwell')
])
.then(axios.spread((obj1, obj2) => {
  // Both requests are now complete
  console.log(obj1.data.login + ' has ' + obj1.data.public_repos + ' public repos on GitHub');
  console.log(obj2.data.login + ' has ' + obj2.data.public_repos + ' public repos on GitHub');
}));

也可以使用內置的Promise.all()方法獲得相同的結果。

將所有fetch請求作為數組傳遞給Promise.all()。接著使用async函數處理響應,如下所示:

Promise.all([
  fetch('https://api.github.com/users/iliakan'),
  fetch('https://api.github.com/users/taylorotwell')
])
.then(async([res1, res2]) => {
  const a = await res1.json();
  const b = await res2.json();
  console.log(a.login + ' has ' + a.public_repos + ' public repos on GitHub');
  console.log(b.login + ' has ' + b.public_repos + ' public repos on GitHub');
})
.catch(error => {
  console.log(error);
});

結論

Axios在緊湊的軟件包中提供了一個易于使用的API,可滿足大多數HTTP通信需求。

而web瀏覽器提供的fetch()方法則能完全重現Axios庫的主要功能。

所以,是否加載客戶端HTTP API取決于你是否習慣使用內置API。

編程快樂!

責任編輯:武曉燕 來源: 前端新世界
相關推薦

2017-01-15 11:14:47

超融合數據中心IT基礎設施

2017-11-29 14:48:01

Node.JSRails語言

2017-03-09 13:30:13

Linux游戲AMD

2022-12-26 14:51:48

人工智能

2023-07-10 09:18:39

Redis訂閱模型

2019-09-01 19:19:04

TensorFlowPyTorch深度學習

2020-03-17 15:55:12

Redis數據庫命令

2023-01-13 10:46:42

2022-07-11 10:17:19

Swift編程語言項目

2012-05-16 11:53:39

虛擬化

2009-01-19 16:54:50

數據挖掘CRM孤立點

2016-01-26 09:58:28

云存儲云服務云安全

2015-12-08 09:31:02

Linux系統操作系統

2023-10-08 13:42:00

Python Web框架

2017-06-27 15:08:05

大數據Apache SparKafka Strea

2012-03-20 09:32:24

Linux服務器

2018-09-07 06:30:50

物聯網平臺物聯網IOT

2021-02-14 10:09:04

數據目錄數據元數據

2018-07-16 08:50:31

固態硬盤內存

2019-03-10 22:21:47

框架AI開發
點贊
收藏

51CTO技術棧公眾號

国产又黄又粗视频| 精品丰满人妻无套内射| 国产一区二区视频免费观看| 在线一区电影| 天天综合网91| 日本一二三不卡| 亚洲综合在线做性| 在线观看日本视频| 性欧美欧美巨大69| 亚洲国产精品va| 九九热在线免费| 岛国片av在线| 国产精品久线观看视频| 不卡视频一区二区三区| 黄色一级视频免费看| 欧美一区视频| 亚洲视频欧洲视频| 日本一区二区免费视频| 国产精品黄色片| 亚洲成av人片在线观看无码| 亚洲一区三区| 国产精品国产高清国产| 激情都市一区二区| 国产精品 欧美在线| 久久免费少妇高潮99精品| 欧美日韩一二| 亚洲美女视频网站| 久久性爱视频网站| 久久精品免视看国产成人| 在线观看日韩av先锋影音电影院| 国产一区二区三区小说| 国产激情小视频在线| 国产亚洲一区二区在线观看| 国产亚洲第一区| 国产手机精品视频| 久久成人综合网| 国产精品久久不能| 五月婷婷激情视频| 一本色道久久综合亚洲精品不| 久久夜色撩人精品| 国精产品一区一区| 久久免费av| 一区二区欧美亚洲| 西西444www无码大胆| 日韩在线黄色| 日韩精品视频三区| 最新在线黄色网址| 丁香综合av| 亚洲精品在线观看视频| 日本少妇xxxx软件| 一区二区三区四区视频免费观看 | 国产精品自拍99| 伊人久久综合| 91精品国产亚洲| a v视频在线观看| 性欧美xxxx大乳国产app| 97视频国产在线| 五月婷婷亚洲综合| 亚洲免费播放| 国产va免费精品高清在线观看| chinese国产精品| 日韩成人一级片| 国产精品亚洲自拍| 国产精品国产一区二区三区四区| 国产一区二区调教| 97netav| 亚洲国产成人在线观看| 不卡的av中国片| 麻豆av一区| www.91在线| 国产精品视频九色porn| 亚洲五码在线观看视频| 超碰在线资源| 色哟哟一区二区| 天天综合网日韩| 国产视频一区二区在线播放| 欧美va亚洲va在线观看蝴蝶网| 亚洲麻豆一区二区三区| 自拍偷拍一区| 久久精品中文字幕电影| 麻豆一区二区三区精品视频| 最新成人av网站| 国产999精品久久久| 一区二区三区播放| 风流少妇一区二区| 欧美日韩亚洲一区二区三区在线观看| 91欧美在线视频| 洋洋成人永久网站入口| 久久久久久久激情| 91精品国产一区二区在线观看| 欧美videossexotv100| 国产人妻大战黑人20p| 一区二区三区在线电影| 欧美一级大片在线观看| 国产精品国产精品国产专区| 99久久久国产精品免费蜜臀| 中文网丁香综合网| 筱崎爱全乳无删减在线观看 | 亚洲午夜久久久久久久久电影网| 欧美成人xxxxx| www.久久久久爱免| 亚洲久久久久久久久久久| 久久国产波多野结衣| 国产精品久久久免费| 成人av电影天堂| 人操人视频在线观看| 亚洲激情六月丁香| 中文字幕av不卡在线| 另类春色校园亚洲| 美女黄色丝袜一区| 国产天堂第一区| 99久久精品情趣| 免费观看亚洲视频| 国产精品无码久久久久| 日韩精品免费视频| 老妇女50岁三级| 美女高潮久久久| 欧美久久久久久一卡四| 毛片网站在线看| 91精品国产综合久久福利软件| 亚洲人成人无码网www国产| 影音先锋日韩资源| 亚洲一区二区三区成人在线视频精品| 你懂的在线观看视频网站| 亚洲国产欧美日韩另类综合| 中文字幕在线视频精品| 久久激情电影| 国产福利精品在线| 人操人视频在线观看| 亚洲成a人片综合在线| 伊人精品视频在线观看| 欧美电影免费观看高清| 国产精品入口日韩视频大尺度| 久久电影中文字幕| 精品久久久视频| 黄色av电影网站| 亚洲网站视频| 国产精品传媒毛片三区| 色黄网站在线观看| 日韩视频在线永久播放| 精品一区在线观看视频| 国产一区二区三区日韩| 综合网五月天| www.成人在线.com| 米奇精品一区二区三区在线观看| 亚洲字幕av一区二区三区四区| 国产欧美日本一区二区三区| 国产一级特黄a大片免费| 国产成人精品免费视| 38少妇精品导航| 外国精品视频在线观看 | 99在线精品视频在线观看| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 伦伦影院午夜理论片| 四虎国产精品免费观看| 成人网在线免费看| dy888亚洲精品一区二区三区| 欧美一区二区三区性视频| 唐朝av高清盛宴| 成人丝袜高跟foot| 大陆极品少妇内射aaaaa| 日韩美女毛片| 国产精品久久久久久久av电影 | 97国产精品人人爽人人做| 日本人妻熟妇久久久久久 | 69堂免费视频| 教室别恋欧美无删减版| 91精品久久久久久久| 在线不卡日本v二区707| 日韩精品久久久久久福利| www.五月婷婷.com| 亚洲人成精品久久久久久| 国产精品91av| 美女精品一区| 久久久久久久免费视频| 国产精品久久久网站| 日韩av电影手机在线观看| 成年人免费在线视频| 日韩一区二区电影在线| 亚洲另类欧美日韩| 中文一区二区在线观看| 91精品人妻一区二区三区蜜桃2| 国产精品亚洲产品| 亚洲图片小说在线| 99久久香蕉| 国产成人亚洲综合91| 黄色免费在线观看| 日韩精品在线视频| 亚洲视频在线观看免费视频| 亚洲成a人v欧美综合天堂下载 | 国产精品狼人色视频一区| 性xxxfreexxxx性欧美| 亚洲午夜未满十八勿入免费观看全集| 国产精品一区二区av白丝下载| 性感美女极品91精品| 妖精视频在线观看免费| 成人动漫在线一区| 自拍偷拍21p| 国产欧美成人| 干日本少妇视频| 国产成人1区| 丁香五月网久久综合| 国产91在线精品| 国内精品久久久久久中文字幕| gogogo高清在线观看免费完整版| 精品国产3级a| 99国产精品久久久久久久成人 | 性做久久久久久久久久| 欧洲视频一区二区| 日韩成年人视频| 一区二区三区资源| 国精产品视频一二二区| 久久久久久免费网| 精品国产aⅴ一区二区三区东京热| 免费在线观看视频一区| 免费 成 人 黄 色| 国内精品99| 欧洲金发美女大战黑人| 欧美在线色图| 日本一区视频在线播放| 久久综合五月婷婷| 国产精品久久一区二区三区| 亚洲精品成a人ⅴ香蕉片| 国产精品久久久久久久久久新婚| 天堂av在线网| 91精品国产高清| av今日在线| 久久久久久国产精品美女| 亚洲羞羞网站| 欧美成年人视频| av片哪里在线观看| 欧美成人免费全部| fc2ppv国产精品久久| 久久在线免费视频| 国产素人视频在线观看| 日韩中文字幕视频在线| 在线a免费看| 中国人与牲禽动交精品| 成人动漫在线播放| 国产亚洲精品美女| 波多野结衣在线影院| 中文字幕国产亚洲2019| 草碰在线视频| 久久精品视频在线观看| 菠萝菠萝蜜在线观看| 欧美不卡视频一区发布| 羞羞视频在线观看免费| 欧美乱妇高清无乱码| 青草影视电视剧免费播放在线观看| 欧美大片免费观看在线观看网站推荐| 成人av福利| 欧美高跟鞋交xxxxxhd| 男女视频在线| 欧美亚洲国产视频| 亚洲欧美在线成人| 国产精品视频免费在线| 中文字幕日韩亚洲| 成人在线看片| 婷婷精品在线观看| 日产中文字幕在线精品一区| 欧美一区二区三区激情视频| 一区二区三区久久网| 亚洲欧美综合| 日韩精品 欧美| 石原莉奈一区二区三区在线观看| 男女污污的视频| 九九久久精品视频| 亚洲区 欧美区| 9色porny自拍视频一区二区| 亚洲AV无码国产成人久久| 欧美高清在线视频| 中文字幕在线观看成人| 午夜精品福利久久久| 超碰在线免费97| 欧美一区二区三级| 亚洲av激情无码专区在线播放| 国产亚洲欧美日韩一区二区| 怡红院av在线| 国产激情久久久久| 亚洲视频国产| 日韩av电影免费观看| 欧美伊人影院| 日批视频在线免费看| 国内久久婷婷综合| 国产女人18毛片水真多18| 国产精品麻豆欧美日韩ww| 久久精品性爱视频| 欧洲精品一区二区三区在线观看| 99精品国产99久久久久久97| 精品视频久久久| h片在线播放| 日产精品99久久久久久| 狂野欧美xxxx韩国少妇| 欧美大香线蕉线伊人久久| 五月天综合网站| 免费黄色特级片| 成人免费看黄yyy456| 国产又粗又猛又爽又黄的视频四季| 亚洲午夜精品在线| 国产精品自拍电影| 亚洲欧美国产精品va在线观看| 1区2区在线观看| 国产精国产精品| 欧美美女啪啪| 青青草综合视频| 精一区二区三区| 人妻视频一区二区| 亚洲大片免费看| 国产精品视频一二区| 亚洲视频777| 小h片在线观看| 国产福利一区二区三区在线观看| 天天综合精品| 手机在线免费观看毛片| 99re视频精品| 欧美日韩国产精品一区二区三区 | 午夜精品久久久久久久爽| 国产一区二区三区久久精品| 欧美日韩国产观看视频| av资源站久久亚洲| 亚洲成人tv| 国产91色在线观看| 久久久国产午夜精品| 国产成人免费观看视频 | 国产三区在线观看| 国产精品入口免费视| 国产免费久久| 久久久久久久久久久久久国产精品| 成人美女视频在线看| 久久久久久久久久91| 日韩午夜在线观看| а√天堂在线官网| 国产精品一区二区在线| 日韩夫妻性生活xx| www.日本xxxx| 欧美国产成人在线| 日韩精选在线观看| 亚洲视频日韩精品| 成人mm视频在线观看| 日韩中文字幕一区| 麻豆国产精品视频| 国产喷水在线观看| 3d动漫精品啪啪1区2区免费| xvideos国产在线视频| 91福利视频导航| 亚洲天堂成人| 人妻熟女aⅴ一区二区三区汇编| 欧美视频在线观看免费| 日韩欧美在线观看一区二区| 日本aⅴ大伊香蕉精品视频| 亚洲区小说区图片区qvod按摩| 国产精品丝袜久久久久久消防器材| xnxx国产精品| 久草视频在线免费| 日韩少妇与小伙激情| 日韩在线成人| 国产毛片视频网站| 久久女同互慰一区二区三区| 免费黄色小视频在线观看| 中文字幕在线亚洲| 精品一级视频| 亚洲人成无码网站久久99热国产| 91毛片在线观看| 在线不卡免费视频| 欧美成人精品三级在线观看| 精品视频高潮| 欧美在线观看视频网站| 亚洲视频小说图片| 黄色一级大片在线免费看国产一| 2018日韩中文字幕| 日韩欧美一区二区三区在线视频| 91性高潮久久久久久久| 午夜欧美大尺度福利影院在线看| 欧美女v视频| 91久久久久久久一区二区| 影音先锋久久久| 91视频免费看片| 欧美大肚乱孕交hd孕妇| 成人欧美magnet| 国产成人三级视频| 久久色在线视频| 国产精品一二三四五区| 欧美一区二区三区图| 婷婷六月综合| 国产成人无码一区二区在线观看 | 午夜福利123| 婷婷一区二区三区| 欧美三级黄网| 久久国产精品久久精品国产| 精品一二三四在线| 99热在线观看免费精品| 日韩中文字幕第一页| 人人精品视频| 天堂在线一区二区三区| 欧美性xxxx极品hd欧美风情| 中文在线手机av| 性欧美大战久久久久久久免费观看| 国产99久久久国产精品潘金| 最新国产中文字幕| 欧美性视频精品|