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

通過實例理解Web應用跨域問題

開發 前端
本文介紹了日常Web應用開發過程中經常遇到的跨域問題,探討了“域(Origin)”概念以及跨域問題的真實原因:即瀏覽器的同源策略限制了不同源請求資源的訪問。

在開發Web應用的過程中,我們經常會遇到所謂“跨域問題(Cross Origin Problem)”。跨域問題是由于瀏覽器的同源策略(Same-origin policy)[1]導致的,它限制了不同源(Origin:域名、協議或端口)之間的資源交互。在這篇文章中,我將通過一些具體的示例來把跨域問題以及主流解決方法說清楚,供大家參考。

1. 什么是跨域問題

跨域問題指的是當一個Web應用程序在訪問另一個域(Origin)的資源時,瀏覽器會阻止這個跨域的請求(Cross Origin Request)。這句針對跨域問題的詮釋里有一個術語“域(Origin)”,它到底是什么呢?

1.1 什么是Origin

在Mozilla官方術語表中,"Origin"指的是一個Web應用/網站的標識,由協議(protocol/scheme)、域名(domain,或主機名host)和端口(port)組成。如果兩個應用/網站的協議、域名和端口都相同,它們就被認為是同源的(same origin);否則,它們被視為不同源。我們看到:**Origin是一個典型的三元組(protocol, domain, port)**,只有三元組相同的兩個應用/站點才會被認為是同源的(same origin)。

下面是一些判斷兩個應用/站點是否同源的例子及判斷理由:

圖片圖片

知道了Origin三元組后,我們來揪出跨域問題背后的“罪魁禍首”。

1.2 同源策略 - 跨域問題的“罪魁禍首”

瀏覽器為了增加安全性而采取的一項重要措施,那就是“同源策略[2]”。同源策略限制了一個網頁中的腳本只能與同源(三元組:協議、域名、端口相同)的資源進行交互,而不能直接訪問不同源的資源。

瀏覽器的這種同源策略限制主要包含以下幾點:

  • Cookie、LocalStorage和IndexDB無法讀取非同源的資源。
  • DOM和JS對象無法獲得非同源資源。例如iframe、img等標簽加載的資源,DOM無法訪問;JS無法操作非同源頁面的DOM。
  • AJAX請求不能發送到非同源的域名,瀏覽器會阻止非同源的AJAX請求。
  • 不能讀取非同源網頁的Cookie、LocalStorage和IndexDB。

下圖(圖片來自網絡)展示了同源策略對惡意腳本代碼對非同源數據訪問的限制:

圖片圖片

上面這張圖片清晰地展示了惡意腳本代碼試圖訪問非同源數據進行惡意登錄的過程。

首先,用戶通過瀏覽器訪問正常網站domain1.com,并用用戶名密碼正常登錄該網站,domain1.com使用cookie技術[3]在用戶瀏覽器中保存了與用戶登錄domain1.com相關的會話信息或token信息。

之后,用戶又訪問了惡意站點domain2.com,該站點首頁的腳本代碼在被下載到用戶瀏覽器中后,試圖訪問瀏覽器cookie中有關domain1.com的cookie信息,并試圖用該信息冒充用戶登錄domain1.com做惡意操作。

瀏覽器的同源策略成功禁止了惡意代碼的這些惡意操作,瀏覽器從domain2.com下載的腳本代碼只能訪問與domain2.com同源的信息。

通過這個過程我們看到:瀏覽器同源策略的本意是防止惡意網站通過腳本竊取用戶的敏感信息,比如登錄憑證、個人資料等。如果同源策略不存在,惡意網站就可以自由地讀取、修改甚至篡改其他網站的數據,給用戶和網站帶來巨大的安全風險。

不過,這種策略的存在給開發人員在開發過程帶來諸多煩惱,比如:跨域數據訪問限制、跨域腳本調用限制以及無法在不同域名之間共享會話信息等。為此,開發人員需要使用一些技術手段來解決這些跨域問題,這增加了開發的復雜性,并且需要額外的配置和處理,給開發人員帶來了一定的麻煩。此外,不正確地處理跨域請求也可能導致安全漏洞,因此開發人員還需要對跨域請求進行合理的安全控制和驗證。

1.3 獲取請求中的“origin”

為了做同源檢測,我們需要獲取和確定請求中的origin信息。那么如何讀取和確定呢?

在HTTP請求頭中,"Origin"字段表示發送請求的頁面或資源的源信息。該字段包含了發送請求的頁面的完整URL或者僅包含協議、域名和端口的部分URL。

在同源策略下,所有的跨域請求都必須攜帶"Origin"請求頭字段,指示請求的來源。因此,在符合同源策略的情況下,每個請求都應該攜帶"Origin"字段。

在服務器端,我們可以通過讀取請求頭中的"Origin"字段來確定請求的origin,具體的方法會根據使用的編程語言和框架而有所不同,例如在Go中可以通過r.Header.Get("Origin")來獲取"Origin"字段的值。由于"Origin"字段是由客戶端提供的,服務器端在處理請求時,需要進行驗證和安全性檢查,以防止偽造或惡意的請求。

然而,有些情況下,請求可能不會攜帶"Origin"字段。例如,非瀏覽器環境下的請求(如服務器間的請求、命令行工具等)可能不會包含"Origin"字段。此外,某些舊版本的瀏覽器可能也不會發送"Origin"字段。

在這種情況下,我們就需要通過其他方式來確定請求的來源。例如,服務端可以查看請求頭中的Referer字段來獲取請求的來源。Referer字段指示了請求的來源頁面的URL。通過檢查Referer字段,服務端可以判斷請求是否來自不同的域。此外,服務器端還可以檢查請求頭中的Host字段,該字段指示了請求的目標主機。如果請求的目標主機與服務端所在的主機不一致,那么可以判斷請求是跨域的。

不過,需要注意的是,服務端的這些方法都依賴于請求頭中的信息,而請求頭可以被客戶端偽造或修改。因此,為了更可靠地判斷請求是否跨域,服務端應該綜合考慮多個因素,并進行適當的驗證和安全措施。

下面我們看一個可以復現跨域問題的示例。

1.4 復現跨域問題的Go代碼示例

出現跨域問題的示例的圖示如下:

圖片圖片

在這個示例中,我們有兩個Web應用:server1.com:8081和server2.com:8082。根據前面對Origin的理解,這兩個Web應用顯然不是同源的。

server1.com和server2.com對應的Go代碼分別如下:

// cross-origin-examples/reproduce/server1.com

func main() {
 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  w.Header().Set("Content-Type", "text/html; charset=utf-8")

  html := `
   <!DOCTYPE html>
   <html>
   <head>
    <title>Cross-Origin Example</title>
    <script>
     function makeCrossOriginRequest() {
      var xhr = new XMLHttpRequest();
      xhr.open("GET", "http://server2.com:8082/api/data", true);
      xhr.onreadystatechange = function() {
       if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
       }
      };
      xhr.send();
     }
    </script>
   </head>
   <body>
    <h1>Cross-Origin Example</h1>
    <button notallow="makeCrossOriginRequest()">Make Cross-Origin Request</button>
   </body>
   </html>
  `

  fmt.Fprintf(w, html)
 })

 err := http.ListenAndServe("server1.com:8081", nil)
 if err != nil {
  panic(err)
 }
}


// cross-origin-examples/reproduce/server2.com

package main

import (
 "fmt"
 "net/http"
)

func main() {
 http.HandleFunc("/api/data", func(w http.ResponseWriter, r *http.Request) {
  fmt.Printf("recv request: %#v\n", *r)
  w.Write([]byte("Welcome to api/data"))
 })

 http.ListenAndServe("server2.com:8082", nil)
}

注:在編譯啟動上面兩個程序之前,需要在/etc/hosts中將server1.com和server2.com的地址指為127.0.0.1。

從示意圖來看,用戶使用瀏覽器與兩個Web應用的交互過程是這樣的:

首先,用戶通過瀏覽器訪問了server1.com:8081的主頁,并收到server1.com:8081返回的應答包體。該應答包體是一個html頁面,如下圖:

圖片圖片

接下來,用戶點擊“Make Cross-Origin Request”按鈕,頁面內通過ajax向server2.com:8082/api/data發起GET請求。

最后,我們在(Edge/Chrome)瀏覽器的控制臺上將看到下面錯誤:

圖片圖片

通過下面server2.com的日志,我們看到ajax請求已經發到server2.com并被正確處理:

recv request: http.Request{Method:"GET", URL:(*url.URL)(0xc00010a480), Proto:"HTTP/1.1", ProtoMajor:1, ProtoMinor:1, Header:http.Header{"Accept":[]string{"*/*"}, "Accept-Encoding":[]string{"gzip, deflate"}, "Accept-Language":[]string{"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"}, "Connection":[]string{"keep-alive"}, "Origin":[]string{"http://server1.com:8081"}, "Referer":[]string{"http://server1.com:8081/"}, "User-Agent":[]string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.81"}}, Body:http.noBody{}, GetBody:(func() (io.ReadCloser, error))(nil), ContentLength:0, TransferEncoding:[]string(nil), Close:false, Host:"server2.com:8082", Form:url.Values(nil), PostForm:url.Values(nil), MultipartForm:(*multipart.Form)(nil), Trailer:http.Header(nil), RemoteAddr:"127.0.0.1:49773", RequestURI:"/api/data", TLS:(*tls.ConnectionState)(nil), Cancel:(<-chan struct {})(nil), Response:(*http.Response)(nil), ctx:(*context.cancelCtx)(0xc000106320)}

server2.com在服務端并沒有主動判斷是否是同源請求,但即使服務器沒有進行跨域校驗并返回成功的響應和數據,瀏覽器也會攔截腳本讀取跨域響應數據的嘗試,這是由瀏覽器的同源策略所決定的。這也是我們看到上面截圖中報錯的原因。

那么解決跨域問題有哪些主流的解決方法呢?我們繼續看一下。

2. 跨域問題的主流解決方法

為了解決跨域問題,有下面幾種常見的解決方法:

  • JSONP(JSON with Padding)

通過動態創建<script>標簽來加載跨域的JavaScript腳本,進而實現跨域數據獲取。

  • CORS[4](跨域資源共享, CORS是Cross-Origin Resource Sharing)

通過在服務器響應頭中設置CORS訪問策略以允許指定的Origin訪問資源。

  • 代理服務器

在同域下創建一個代理服務器,將跨域請求轉發到目標服務器并返回結果。代理服務器對響應頭統一增加Access-Control-Allow-Origin等CORS相關字段,表示允許跨域訪問。

其中CORS是解決跨域問題時應用最為廣泛的方法。CORS(跨域資源共享)主要是通過設置HTTP頭來解決跨域問題的。

服務器端通過在響應(Response)的HTTP頭中設置Access-Control-Allow-Origin頭來設置允許的請求來源域(Origin: 三元組)。

如果設置為“*”,則表示允許任意域發起跨域請求:

Access-Control-Allow-Origin: *

也可以在響應中將Access-Control-Allow-Origin設置為只允許指定的Origin訪問資源,比如:

Access-Control-Allow-Origin: http://server1.com:8081

Access-Control-Allow-Origin頭的值還支持設置多個origin,多個origin用逗號分隔:

Access-Control-Allow-Origin: http://server1.com:8081,https://server2.com:8082

注:關于Access-Control-Allow-Origin的值是否要帶上protocol和port的問題,我實測的情況是必須帶。前面說過:Origin是三元組,只有完全相同才算是同源。

此外,域名必須具體到二級域名才能匹配成功。頂級域名如“.com”、“.org”是不允許的。

服務端響應的跨域設置還不僅Access-Control-Allow-Origin一個,我們還可以設置Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-Control-Max-Age等字段來更細粒度的進行跨域訪問控制。

注:有些值Access-Control-XXX-xxx字段僅用于Preflight Request(預檢請求)[5],比如:Access-Control-Allow-Methods。CORS Preflight Request是一種CORS請求,它使用特定的方法和Header檢查CORS協議是否被理解和服務器是否被感知。它是一個OPTIONS請求,使用兩個或三個HTTP請求頭: Access-Control-Request-Method(訪問控制請求方法)、Origin(起源)和可選的 Access-Control-Request-Headers(訪問控制請求頭)。

3. 使用CORS解決跨域問題的示例

下面我們修改一下server2.com的代碼來解決前面遇到的跨域問題:

// cross-origin-examples/solve/server2.com/main.go

func main() {
    http.HandleFunc("/api/data", func(w http.ResponseWriter, r *http.Request) {
        fmt.Printf("recv request: %#v\n", *r)
        w.Header().Set("Access-Control-Allow-Origin", "http://server1.com:8081")
        w.Write([]byte("Welcome to api/data"))
    })

    http.ListenAndServe("server2.com:8082", nil)
}

我們僅在server2.com/main.go中增加了一行代碼,旨在允許來自http://server1.com:8081的跨域請求訪問server2.com的資源:

w.Header().Set("Access-Control-Allow-Origin", "http://server1.com:8081")

啟動新版server2.com后,再點擊頁面上的“Make Cross-Origin Request”按鈕,我們在瀏覽器的控制臺上就能看到應答成功被接受并顯示。

4. 小結

本文介紹了日常Web應用開發過程中經常遇到的跨域問題,探討了“域(Origin)”概念以及跨域問題的真實原因:即瀏覽器的同源策略限制了不同源請求資源的訪問。

接下來通過Go代碼示例演示了跨域問題的表現形式,并介紹了幾種主要的跨域解決方案,最后對最常見的CORS解決方案做了細致說明,并用實例展示了服務端設置CORS頭后跨域問題的解決。

希望本文可以幫助大家更深入的理解和掌握Web應用跨域問題以及解決方法。

本文涉及的源碼可以在這里[6]下載。

5. 參考資料

  • The ultimate guide to enabling Cross-Origin Resource Sharing (CORS)[7] - https://blog.logrocket.com/the-ultimate-guide-to-enabling-cross-origin-resource-sharing-cors/
  • Cross-Origin Resource Sharing (CORS)[8] - https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
  • Glossary: Origin[9] - https://developer.mozilla.org/en-US/docs/Glossary/Origin
  • Same-origin policy[10] - https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
責任編輯:武曉燕 來源: TonyBai
相關推薦

2023-10-31 07:37:02

2016-11-04 20:02:37

Apache

2023-10-26 08:19:34

2014-08-19 10:36:02

AngularCORS

2017-08-20 12:49:59

瀏覽器跨域服務器

2018-12-12 15:50:13

2021-06-10 18:11:02

Cors跨域Web開發Cors

2023-12-25 08:04:42

2018-11-26 14:52:12

Web前端跨域

2022-10-13 14:11:29

瀏覽器域名端口

2021-06-06 13:05:15

前端跨域CORS

2024-10-29 16:41:24

SpringBoot跨域Java

2010-07-30 12:48:13

Flex跨域調用

2010-01-04 13:15:33

跨域引用Silverl

2010-02-22 17:29:47

WCF跨域

2009-02-18 09:30:10

AJAX跨域XML

2024-12-02 14:30:20

2024-02-27 08:14:51

Nginx跨域服務

2019-11-11 17:34:16

前端開發技術

2015-04-24 10:37:40

Web安全瀏覽器跨域訪問
點贊
收藏

51CTO技術棧公眾號

99在线精品免费视频九九视| 粉嫩av一区二区| 国产精品国产三级国产aⅴ入口| 欧美激情一区二区三区久久久| 日本免费色视频| 亚洲区欧洲区| 国产午夜亚洲精品午夜鲁丝片| 久久久久久久久久久免费精品| 亚洲色图欧美自拍| 国内激情视频在线观看| 国产精品视频在线看| 国产精品久久久久一区二区| 伊人网伊人影院| 麻豆久久一区| 欧美综合天天夜夜久久| 成年人深夜视频| wwwxxx在线观看| 另类小说一区二区三区| 日韩午夜在线视频| 日本xxx在线播放| 精品国产乱码久久久久久樱花| 亚洲欧美日韩在线不卡| 欧美一区2区三区4区公司二百| 无码人妻精品一区二区三区不卡| 精品久久国产| 亚洲高清一二三区| 思思久久精品视频| 色综合一本到久久亚洲91| 亚洲最大成人网4388xx| 这里只有精品66| 国产精品一区二区三区四区色| 久久精品国产999大香线蕉| 68精品久久久久久欧美| 婷婷色一区二区三区| 国产欧美三级电影| 欧美成人一区二区三区| 欧美成人三级在线播放| 欧美一级大黄| 欧美午夜激情在线| 免费一级特黄特色毛片久久看| 五十路在线视频| 国产福利视频一区二区三区| 欧美一性一乱一交一视频| 久久久久久久毛片| 国产一区二区三区免费观看在线| 香港成人在线视频| 亚洲国产精品一区二区第四页av| www.日韩高清| 国产精品中文字幕欧美| 成人乱人伦精品视频在线观看| 国产一级在线播放| 精品9999| 欧美亚洲成人精品| 青青青国产在线| 久久性天堂网| 国产精品福利无圣光在线一区| 五月婷婷一区二区| 欧美日本不卡| 97精品国产91久久久久久| 日本在线视频免费观看| 亚洲精品在线二区| 4444欧美成人kkkk| 免费看一级视频| 免费观看一级特黄欧美大片| 国产原创欧美精品| av中文字幕观看| 成人午夜碰碰视频| 精品久久久久久乱码天堂| 亚洲av毛片成人精品| www.66久久| 欧美日韩一区二区三区在线视频 | 亚洲精品免费av| 天堂网视频在线| 免费久久精品视频| 成人激情在线播放| 国产香蕉在线观看| 国产在线乱码一区二区三区| 亚洲在线免费观看| 日本免费一区视频| 国产日韩欧美精品在线| 中文字幕一区二区三区四区五区六区| 青青草视频在线观看| 成人晚上爱看视频| 欧美日本韩国国产| 精品视频在线一区二区| 国产精品久久久久一区二区三区 | 日本女优一区| 久久国产精品电影| 黄色一级大片在线免费观看| 樱桃成人精品视频在线播放| 日本伊人精品一区二区三区介绍| 久草视频在线观| 蜜桃av一区二区三区| 亚洲自拍偷拍一区| 亚洲精品一区二区三区四区| 久久―日本道色综合久久 | 国产主播性色av福利精品一区| 日韩午夜在线播放| 无码人妻精品一区二区三区温州 | 亚洲激情视频网站| 男人天堂资源网| 亚洲日本欧美| 成人免费在线视频网址| 亚洲 精品 综合 精品 自拍| 国产精品免费久久| 国产精品无码av在线播放| 欧美黄色成人| 日韩国产精品一区| 日本天堂中文字幕| 奇米影视一区二区三区| 精品视频导航| 黄色大片在线| 欧美精品亚洲一区二区在线播放| 一卡二卡三卡四卡五卡| 精品国产一区二区三区| 国外成人性视频| 国产伦精品一区二区三区免.费 | 日本美女久久久| 精品99在线| 久久琪琪电影院| 国产精品特级毛片一区二区三区| 成人av综合在线| 男人天堂成人网| 亚洲四虎影院| 亚洲欧洲美洲在线综合| 久久久久久久久久久久久久免费看| 亚洲久久一区| 99视频在线播放| 含羞草www国产在线视频| 欧美亚洲一区二区在线观看| 91插插插影院| 日韩欧美中字| 国产精品专区h在线观看| 欧美3p视频在线观看| 五月天激情小说综合| 国内精品免费视频| 欧美喷水视频| 动漫3d精品一区二区三区| 岛国中文字幕在线| 制服.丝袜.亚洲.中文.综合| 欧洲美女女同性互添| 亚洲国产黄色| 国产亚洲一区二区三区在线播放| 成年人视频在线观看免费| 一本大道av一区二区在线播放| 超碰超碰在线观看| 精品精品国产三级a∨在线| 久久99国产精品久久久久久久久| 免费看污视频的网站| 国产一区二区三区久久久| 制服诱惑一区| vam成人资源在线观看| 亚洲精品有码在线| 国产寡妇亲子伦一区二区三区四区| 国产一区二区精品久久91| 尤物一区二区三区| 成人国产精品久久| 欧美成人精品影院| 亚洲精品国产精| 亚洲一区二区不卡免费| 波多野结衣影院| 欧美黄在线观看| 国产午夜精品在线| 户外露出一区二区三区| 中文字幕亚洲自拍| 国产裸体无遮挡| 亚洲福利国产精品| 一区二区不卡免费视频| 日本va欧美va精品| 中文字幕在线亚洲三区| 亚洲精品aⅴ| 7m第一福利500精品视频| 激情综合闲人网| 欧美一区二区三区在线电影| 天天躁夜夜躁狠狠是什么心态| 国产欧美在线| 亚洲成人精品电影在线观看| 国产精品1区| 97精品视频在线观看| 国产资源在线播放| 制服.丝袜.亚洲.另类.中文| 日本免费一二三区| 国产成人av一区二区三区在线| 在线一区亚洲| 精品淫伦v久久水蜜桃| 国产精品电影网站| fc2ppv国产精品久久| 国产视频精品自拍| 91午夜交换视频| 欧美性色xo影院| 中文字幕av播放| 久久综合色综合88| 99精品在线免费视频| 欧洲vs亚洲vs国产| 国产乱肥老妇国产一区二| 牛牛精品视频在线| 亚洲成人激情在线| 亚洲天堂中文字幕在线| 亚洲国产成人tv| 香蕉成人在线视频| 91丨porny丨蝌蚪视频| 久久久精品在线视频| 91成人精品视频| 日本不卡一二三区| 精品自拍偷拍| 国产精品99久久久久久久久久久久| 国产小视频免费在线观看| 日韩久久精品一区| 在线观看视频二区| 色综合久久九月婷婷色综合| 欧美色图亚洲天堂| www.欧美.com| 69久久精品无码一区二区| 午夜精品网站| 亚洲综合五月天| 国产欧美日韩| 精品乱码一区| 日本欧美韩国| 日本视频久久久| 免费观看久久久久| 欧美v国产在线一区二区三区| 日本在线小视频| 久久久91精品国产一区二区精品| 欧美男女交配视频| 久久精品首页| 免费无码av片在线观看| 影院欧美亚洲| 性高湖久久久久久久久aaaaa| 亚洲老女人视频免费| 豆国产97在线| 亚洲大奶少妇| 97伦理在线四区| 国产精品一区二区美女视频免费看| 久久久久中文字幕2018| 国产二区三区在线| 久久精品免费电影| 免费大片在线观看www| 亚洲国产精品电影| 六月丁香色婷婷| 亚洲精品在线三区| 丰满肥臀噗嗤啊x99av| 日韩精品一区二区在线| 精品人妻午夜一区二区三区四区 | 亚洲 自拍 另类小说综合图区| 电影一区二区在线观看| 91在线观看免费观看 | 91国产一区在线| free性欧美16hd| 午夜欧美不卡精品aaaaa| av在线小说| 欧美一级视频免费在线观看| 中文字幕中文字幕在线十八区| 亚洲精品天天看| 后进极品白嫩翘臀在线视频| 欧美视频三区在线播放| 成人一二三四区| 欧美日韩精品欧美日韩精品一| 国产又大又黄又粗| 一区二区三区四区在线| 久久激情免费视频| 激情成人在线视频| 久草视频在线资源| 午夜精品视频一区| 久久青青草原亚洲av无码麻豆 | 99久久国产综合精品女不卡| 日韩av手机在线播放| 久久一夜天堂av一区二区三区| 美女流白浆视频| aaa国产一区| 五月天精品视频| 亚洲欧洲日韩在线| 1024手机在线观看你懂的| 综合欧美一区二区三区| 精品无码m3u8在线观看| 亚洲黄一区二区三区| 日本中文字幕免费| 欧美在线一区二区三区| 精品二区在线观看| 91精品久久久久久久91蜜桃| 好吊色在线观看| 精品久久久久99| 美国成人毛片| 久久香蕉频线观| 天堂中文在线播放| 成人av.网址在线网站| 粉嫩久久久久久久极品| 日韩av一区二区三区美女毛片| 免费成人av| 中文字幕一区二区三区四区五区人| 日韩免费在线| 91精品国产91久久久久麻豆 主演| 国产综合网站| 欧美一级黄色影院| 青青青爽久久午夜综合久久午夜| 国产av无码专区亚洲精品| 精品一区二区在线看| 一本加勒比波多野结衣| 国产精品第四页| 毛片在线免费视频| 日韩色在线观看| 92国产在线视频| 2021国产精品视频| 日韩av超清在线观看| 国产传媒一区二区| 久久亚洲国产| 91精品国产毛片武则天| 久久一区中文字幕| 成人免费看片载| 亚洲人吸女人奶水| 在线观看亚洲黄色| 亚洲精品不卡在线| 日本性爱视频在线观看| 国产精品自产拍高潮在线观看| 国产麻豆一区二区三区| 日本一区二区在线| 亚洲午夜精品一区二区国产| 日本老熟妇毛茸茸| 久久众筹精品私拍模特| 日本熟妇乱子伦xxxx| 在线免费不卡视频| 免费在线黄色网址| 欧美性一区二区三区| 久久国产精品色av免费看| 日韩精品福利片午夜免费观看| 欧美日韩hd| 成人在线短视频| 136国产福利精品导航| 亚洲无码精品国产| 中文字幕日韩欧美| 成人精品国产| 色吧亚洲视频| 日本在线不卡视频| 最近中文字幕在线mv视频在线| 国产精品伦理在线| 日韩免费av片| 精品少妇一区二区三区日产乱码| 日韩欧美亚洲系列| 91国在线精品国内播放| 激情小说亚洲色图| 中文字幕一区二区三区乱码| 亚洲国产高清一区二区三区| 韩国三级在线看| 中文字幕欧美国产| 中文字幕福利视频| 中文字幕精品一区二区精品| 91国拍精品国产粉嫩亚洲一区 | 少妇一区二区三区四区| 欧美大片网站在线观看| 日韩成人精品| 久青草视频在线播放| 成人av网站在线观看免费| 日韩欧美性视频| 亚洲开心激情网| 欧美国产日韩电影| 永久免费精品视频网站| 国产老妇另类xxxxx| 久久久久久av无码免费网站| 亚洲丁香婷深爱综合| 欧美aa一级| 日本不卡免费新一二三区| 看片的网站亚洲| 99精品久久久久| 亚洲国产婷婷香蕉久久久久久| 国产三区视频在线观看| 亚洲一区亚洲二区| 亚洲人成人一区二区三区| 一区二区黄色片| 欧美男男青年gay1069videost | 国产乱色精品成人免费视频| 在线丨暗呦小u女国产精品| 亚洲欧洲二区| 2019日韩中文字幕mv| 久久久噜噜噜久久中文字幕色伊伊 | 久久精品99国产| 99久久国产综合精品麻豆 | 一区二区理论电影在线观看| 欧美一区,二区| 国产精品av网站| 欧美午夜在线| 免费一级做a爰片久久毛片潮| 欧美日韩免费看| 香蕉视频在线看| 国产精品夜间视频香蕉| 国色天香一区二区| 国产精品一级无码| 欧美日韩精品在线| 精精国产xxxx视频在线| 精品国产一区二区三区四区vr | 自拍偷自拍亚洲精品播放| 色偷偷在线观看| 国产在线观看精品一区二区三区| 日韩欧美精品| 99九九99九九九99九他书对| 香蕉成人伊视频在线观看| 亚洲1卡2卡3卡4卡乱码精品| 国产精品日韩一区二区| 欧美aaa在线| 日产亚洲一区二区三区| 日韩小视频在线观看| 美女毛片一区二区三区四区|