精品欧美一区二区三区在线观看 _久久久久国色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在线看黄| 亚洲午夜18毛片在线看| 亚洲精品观看| 欧美视频裸体精品| 中文字幕成人一区| 国产一级免费片| 久久国产黄色片| 成人毛片在线| 日韩免费性生活视频播放| 男人靠女人免费视频网站| 婷婷成人激情| 91麻豆.com| 亚洲专区中文字幕| 一级黄色av片| 亚洲性人人天天夜夜摸| 中文字幕亚洲专区| 久久久久成人精品无码中文字幕| 日韩综合久久| 色婷婷综合久久| 无码 制服 丝袜 国产 另类| 在线观看麻豆蜜桃| 久久女同精品一区二区| 91影院未满十八岁禁止入内| 波多野结衣电车痴汉| 在线免费观看欧美| 久久九九国产精品怡红院| 精品国产av无码| 第四色中文综合网| 欧美一区二区三区色| 乱子伦视频在线看| 欧美sm一区| 亚洲国产精品一区二区尤物区| 伊人天天久久大香线蕉av色| 黄网在线观看| 91蜜桃传媒精品久久久一区二区| 亚洲综合成人婷婷小说| 一炮成瘾1v1高h| 日韩中文字幕91| 日本高清+成人网在线观看| 欧美一级高潮片| 欧美精选在线| 欧美尺度大的性做爰视频| 国产一级伦理片| 国产精品一区二区中文字幕| 日韩三级中文字幕| 日本中文字幕在线不卡| 国产精品高清一区二区| 欧美日韩国产一级片| 9久久婷婷国产综合精品性色| 国产乱码午夜在线视频 | 美女洗澡无遮挡| 九色丨蝌蚪丨成人| 亚洲精品美女在线观看| v天堂中文在线| 日韩一级电影| 亚洲欧美在线免费观看| 国产精品高清无码在线观看| 国产a久久精品一区二区三区| 亚洲国产精品va在线看黑人动漫| 国产精品入口麻豆| 麻豆一区一区三区四区| 亚洲国产成人久久| 在线免费播放av| 日韩最新在线| 亚洲丝袜av一区| a天堂中文字幕| 日产午夜精品一线二线三线| 中文字幕少妇一区二区三区| 国产中文字幕久久| 国产精品啊v在线| 97精品国产97久久久久久免费 | 亚洲最大福利视频网| 亚洲AV无码国产精品午夜字幕| 国产99久久久国产精品潘金| 国产亚洲精品久久飘花| 偷拍自拍在线| 日本一区二区三区dvd视频在线| 午夜一区二区三区| 在线免费观看污| 亚洲不卡在线观看| 国产成人久久婷婷精品流白浆| 性欧美freehd18| 欧美一区二区网站| 日韩无码精品一区二区| 久久不见久久见国语| 最近的2019中文字幕免费一页 | 懂色av中文一区二区三区天美| 免费在线激情视频| 色综合视频一区二区三区日韩| 日韩亚洲国产中文字幕欧美| 97超碰在线资源| 久久理论电影| 久久免费高清视频| 国产在线观看第一页| 国产在线国偷精品免费看| 国产伦精品一区二区三区高清| 国产小视频福利在线| 亚洲特级片在线| 欧美日韩性生活片| 久久电影天堂| 日韩av一卡二卡| 亚洲色图27p| av不卡在线看| 成人两性免费视频| 色视频在线观看免费| 国产精品久99| 精品人妻一区二区三区四区在线| 外国成人毛片| 日韩hd视频在线观看| 男人在线观看视频| 久久蜜桃资源一区二区老牛| 91青青草免费观看| 在线观看av黄网站永久| 五月天丁香久久| 色婷婷综合在线观看| 国产欧美一区| 国内偷自视频区视频综合| 97在线视频人妻无码| 91视视频在线观看入口直接观看www | 91高清视频免费看| 国产香蕉精品视频| 午夜片欧美伦| 国产精品美女呻吟| 三级毛片在线免费看| 亚洲综合激情小说| 久久这里只精品| 亚洲免费观看高清完整版在线观| 欧美第一黄网免费网站| 在线免费av网| 国产视频一区在线观看| 91九色在线观看视频| 二区三区精品| 色综合伊人色综合网| 一级一片免费看| 91视频一区二区三区| 国产九色porny| 亚洲高清在线一区| 欧美老女人在线视频| 国产精品久久久国产盗摄| 欧美激情一区二区| 十八禁视频网站在线观看| 精品网站aaa| 亚州国产精品久久久| 精品乱子伦一区二区| 亚洲精品欧美在线| 国产精品自在自线| 97精品视频| 国产免费亚洲高清| 日本美女在线中文版| 欧洲av一区二区嗯嗯嗯啊| 偷拍女澡堂一区二区三区| 99视频一区| 久久艹中文字幕| 精品三级久久| 亚洲免费av电影| www.久久久久久久| 久久久久久久久岛国免费| 免费在线a视频| 三级精品视频| 国产999视频| 香蕉视频在线看| 欧美男男青年gay1069videost| 萌白酱视频在线| 国产在线精品一区二区三区不卡| 天天做天天爱天天高潮| 婷婷综合国产| 97精品久久久| 狠狠v欧美ⅴ日韩v亚洲v大胸| 欧美午夜激情视频| 日韩丰满少妇无码内射| 男女男精品网站| 中文字幕日韩一区二区三区 | 久久精品动漫| 西游记1978| 欧美成人精品午夜一区二区| 美女av一区二区三区| 成人毛片在线免费观看| 精品久久久久久久久久ntr影视| 9.1成人看片免费版| 麻豆精品蜜桃视频网站| 8x8ⅹ国产精品一区二区二区| 最新国产精品精品视频| 欧亚精品中文字幕| 日本三级在线视频| 亚洲大胆人体在线| 少妇又紧又色又爽又刺激视频| 国产精品传媒在线| 男男做爰猛烈叫床爽爽小说| 日本不卡在线视频| 欧美黑人在线观看| 免费视频亚洲| 91丝袜脚交足在线播放| 向日葵视频成人app网址| 久久久国产精品x99av| 日本高清视频www| 欧美午夜电影一区| 国产一级特黄aaa大片| 国产日产欧美一区二区三区| 日本r级电影在线观看| 国产欧美日韩一区二区三区在线| 亚洲在线观看一区| 欧美激情网址| 成人网在线观看| japanese23hdxxxx日韩| 九九精品在线视频| 1024国产在线| 国产视频欧美视频| 国内精品国产成人国产三级| 日韩久久精品网| 久久综合九色综合97婷婷女人| 九九热只有这里有精品| 欧美美乳视频| 福利视频一区二区三区| 激情欧美一区二区三区黑长吊| 国内精品久久久| 久久精品视频观看| 亚洲人成电影网站| 欧美一级淫片aaaaaa| 欧美麻豆精品久久久久久| 久久99精品波多结衣一区| 亚洲美女免费视频| 九一在线免费观看| 久久综合色婷婷| 日本一区二区在线观看视频| 精品在线播放免费| 搡女人真爽免费午夜网站| 亚洲精品偷拍| 青草视频在线观看视频| 亚洲女同另类| 亚洲激情图片| 精品国产不卡| 奇米精品在线| 亚洲国产国产| 久久国产一区| 欧美综合精品| 国产偷久久久精品专区| 在线视频亚洲欧美中文| 亚洲自拍av在线| 欧州一区二区三区| www.成人av| 国产精品日韩精品在线播放| 91精品视频观看| 久久人体av| 国产色婷婷国产综合在线理论片a| 欧美最新精品| 国产精品99久久久久久久久久久久| 日本不卡网站| 日韩免费av一区二区| 亚洲wwww| 国产精品久久久久久久久久新婚| 日本精品不卡| 国产精品电影网| 久久电影天堂| 亚洲最大福利网站| 久久aimee| 欧美中日韩一区二区三区| 国产欧美日韩| 亚洲一卡二卡| 欧美91精品| 日韩一级片免费视频| 亚洲精一区二区三区| 少妇高潮喷水在线观看| 久久九九电影| 第四色婷婷基地| 国产美女av一区二区三区| 欧美图片自拍偷拍| 91麻豆swag| 天堂网av2018| 亚洲免费看黄网站| 国产精品不卡av| 一本大道久久a久久精品综合| 天天天天天天天干| 在线播放亚洲一区| 高清国产mv在线观看| 亚洲精品中文字幕有码专区| 成人性爱视频在线观看| 欧美成人黑人xx视频免费观看| 丁香花在线电影| 国产精品大片wwwwww| 日韩午夜电影免费看| 国产日韩一区二区| 欧美激情在线免费| 中文字幕第一页亚洲| 亚洲黄色视屏| 五月天av在线播放| 成人国产免费视频| 中文字幕在线观看二区| 亚洲一区二区三区爽爽爽爽爽| 日韩精品一区二区亚洲av| 欧美精品久久久久久久多人混战 | 精品一区在线播放| 日韩理论电影大全| 男的插女的下面视频| 日韩成人一区二区三区在线观看| 涩涩网站在线看| 91麻豆国产香蕉久久精品| 波多野结衣喷潮| 激情成人在线视频| 国产裸体无遮挡| 亚洲精品在线观看www| 久草免费在线观看| 国产精品69av| 操欧美女人视频| 亚洲欧美国产精品桃花| 亚洲视频大全| 古装做爰无遮挡三级聊斋艳谭| 久久久夜色精品亚洲| 麻豆疯狂做受xxxx高潮视频| 在线免费观看一区| 日韩专区第一页| 精品国产一区久久久| 欧美美女日韩| 国产精品美女诱惑| 亚洲综合色网| 欧美第一页浮力影院| 91麻豆视频网站| 国产在线拍揄自揄拍无码视频| 欧美日韩成人综合天天影院| 青青国产在线| 亚洲91av视频| 成人在线tv视频| 久久精品在线免费视频| 久久精品国产一区二区三区免费看| 色呦呦一区二区| 精品日本美女福利在线观看| 亚洲av无码乱码国产麻豆| 日韩日本欧美亚洲| 国产成人精品一区二区三区在线 | 网友自拍视频在线| 国产精品高清在线观看| 日本在线中文字幕一区| 青青草国产精品视频| 国产a级毛片一区| 国产suv一区二区三区| 欧美精品xxxxbbbb| 伊人免费在线| 91沈先生在线观看| 91视频一区| 亚洲天堂av一区二区| 国产精品成人免费在线| 日本三级一区二区三区| 亚洲视频网站在线观看| 成人欧美magnet| 蜜桃成人在线| 久久精品人人| 非洲一级黄色片| 欧美性猛交一区二区三区精品| 黄色影院在线播放| 国产成人精品免高潮在线观看| 青青一区二区| 日本熟妇人妻xxxxx| 久久久国产精品麻豆| 看黄色一级大片| 日韩在线国产精品| 成人短视频软件网站大全app| 欧美日韩一区二区三区电影| 黄色精品一二区| 国产大片免费看| 亚洲精品一区二区三区精华液| sm在线播放| 欧美日韩大片一区二区三区 | 亚洲成人自拍网| 四虎影视精品成人| 国产精品高潮呻吟久久av野狼| 国产精品99一区二区三区| 国产黑丝在线视频| 亚洲国产综合在线| 人人九九精品| 国产精品丝袜久久久久久高清 | 337p粉嫩大胆噜噜噜鲁| 久久久久国产一区二区三区四区 | 亚洲免费影视第一页| 97精品国产99久久久久久免费| 一区二区在线不卡| 国产激情精品久久久第一区二区| 国产性xxxx高清| 亚洲图片欧美午夜| 美女久久精品| 日韩欧美亚洲天堂| 国产精品蜜臀av| 隣の若妻さん波多野结衣| 日韩免费av一区二区| 亚洲美女视频| 精品国产av无码| 日韩免费视频线观看| 日本综合字幕| 欧美美女黄色网| 久久久久国产精品人| 精品国产av一区二区三区| 91精品国产一区| 久久久国产精品| 亚洲欧美日本一区| 91精品国产综合久久久久久| 蜜桃麻豆影像在线观看| 一区二区三区欧美在线| 99久久99久久久精品齐齐| 国产永久免费视频| 日本一本a高清免费不卡| 欧美女激情福利| 亚洲AV无码成人精品区明星换面|