精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产一国产二国产三| 少妇一级淫免费播放| 六月丁香综合网| 亚洲综合三区| 中文字幕日韩视频| 俄罗斯黄色录像| 老牛影视精品| 日韩一区中文字幕| 精品999在线观看| 国产精品久久久久久久久久久久久久久久 | 狠狠综合久久av| 日本一区二区三区久久| 国产精品xvideos88| 在线精品高清中文字幕| 99精品一区二区三区无码吞精 | 成人在线一区二区| 久久艹免费视频| 一区二区中文| 国产一区二区三区网站| 三级视频网站在线观看| 国产精品一区二区精品视频观看| 激情av一区二区| 日本黄xxxxxxxxx100| 可以在线观看的av| 成人一区在线观看| 成人激情免费在线| 国产精品成人久久久| 亚洲一区区二区| 欧美激情视频网站| 成人免费毛片xxx| 精品国产精品久久一区免费式| 欧美成人福利视频| 日日夜夜精品视频免费观看| jvid一区二区三区| 色美美综合视频| 国产原创中文在线观看 | 理论片中文字幕| 国内精品第一页| 国产精品自拍偷拍| 亚洲大尺度在线观看| 国产亚洲永久域名| 7777免费精品视频| 中文字字幕在线中文| 怡红院精品视频在线观看极品| 久久亚洲春色中文字幕| 极品尤物一区二区| av影片在线一区| 亚洲全黄一级网站| 精品人妻互换一区二区三区| 日韩美脚连裤袜丝袜在线| 欧美精品一区二区三区视频| 国偷自产av一区二区三区麻豆| 国产精品日本一区二区三区在线| 欧美久久久久久蜜桃| 鲁一鲁一鲁一鲁一av| 久久久国产精品网站| 欧美日韩在线三区| 亚洲va综合va国产va中文| 欧美三级电影网址| 91麻豆精品国产综合久久久久久| 毛片毛片毛片毛| 电影中文字幕一区二区| 宅男噜噜噜66一区二区66| 欧美高清精品一区二区| 亚洲视频精选| 日韩高清不卡av| www.久久国产| 日韩美女一区二区三区在线观看| 在线观看亚洲区| www色aa色aawww| 亚洲午夜一区| 欧美中文字幕在线| 亚洲天堂网视频| 国产精品中文字幕一区二区三区| 2019国产精品视频| 高h震动喷水双性1v1| 99re成人精品视频| 手机成人在线| 影音先锋在线播放| 天天综合色天天综合| 中文字幕第36页| 久久的色偷偷| 精品视频www| 成人信息集中地| 伊人成人在线视频| 国产成人精品视频| 国产浮力第一页| 久久久亚洲精品石原莉奈| 亚洲精品一区二区三区樱花| 成人av免费| 欧美午夜女人视频在线| 91制片厂毛片| 精品三级av在线导航| 一区二区三区亚洲| 久久久久久久久艹| 日韩精品久久理论片| 91久久久久久久| 欧美日韩国产中文字幕在线| 亚洲日本成人在线观看| 国产素人在线观看| 成人国产精品久久| 国产视频精品久久久| 亚洲天堂一级片| 久久午夜精品| 国产a一区二区| 日本精品一区二区三区在线播放| 亚洲动漫第一页| 中文字幕22页| 国产一区二区三区电影在线观看| 色综合男人天堂| 亚洲资源在线播放| 久久嫩草精品久久久久| 一区中文字幕在线观看| 色香欲www7777综合网| 亚洲国产精品福利| 久久精品一区二区三区四区五区| 欧美一级二区| 国产一区二区免费在线观看| sm国产在线调教视频| 欧美亚州韩日在线看免费版国语版| 久草免费资源站| **女人18毛片一区二区| 国产福利视频一区二区| 亚洲aⅴ乱码精品成人区| 亚洲一区二区三区四区在线免费观看 | 亚洲国内高清视频| 国产波霸爆乳一区二区| 久久精品999| 亚洲一区二区三区免费观看| 97成人资源| 日韩经典第一页| 久久精品视频6| 国产不卡高清在线观看视频| 五月天综合婷婷| 亚洲a成人v| 色黄久久久久久| 正在播放木下凛凛xv99| 国产亚洲美州欧州综合国| 无码人妻精品一区二区三区在线| 哺乳一区二区三区中文视频 | 日本在线啊啊| 精品成人在线观看| 久久网中文字幕| 国产成人av资源| 日韩欧美视频免费在线观看| 国产亚洲高清一区| 久久色精品视频| 国产毛片毛片毛片毛片| 亚洲人123区| 久久久精品视频国产| 婷婷综合视频| 91九色在线观看| wwwww亚洲| 亚洲国产精品免费| 国产精品久久久久久久久久久久久久久久久 | 国产女人水真多18毛片18精品| 欧美四级在线| 亚洲第一视频网站| 日韩免费视频一区二区视频在线观看| av不卡免费电影| 欧美 国产 日本| 精品视频国产| 国产色视频一区| 一区二区精品免费视频| 黄网站免费在线观看| 3d成人h动漫网站入口| 国产美女福利视频| 成人网在线免费视频| 国产婷婷一区二区三区| 亚洲区小说区| 国产视频999| 黑人另类精品××××性爽| 亚洲精品日韩丝袜精品| 中文字幕 国产| 一区二区三区不卡视频| 最近日本中文字幕| 青青草视频一区| www.99riav| 九九视频免费观看视频精品| 国产剧情日韩欧美| caoporn视频在线| 在线观看91久久久久久| 亚洲免费成人网| 在线观看欧美精品| 妺妺窝人体色www在线下载| www.成人在线| 在线能看的av网站| 亚洲在线观看| 青少年xxxxx性开放hg| 欧美黄色网视频| 成人av资源在线播放| 国产美女高潮在线| 日韩在线观看免费高清完整版| 亚洲毛片在线播放| 在线成人高清不卡| 在线天堂中文字幕| 伊人婷婷欧美激情| 人妻少妇无码精品视频区| 国产成人免费在线视频| chinese少妇国语对白| 伊人久久综合| youjizz.com亚洲| 精品久久久久久久久久久下田| aa成人免费视频| 国产成人77亚洲精品www| 97精品国产97久久久久久| 日本三级视频在线观看| 日韩精品视频在线播放| 成人福利小视频| 欧美视频一区二区三区在线观看| 精品少妇爆乳无码av无码专区| 亚洲国产精品成人久久综合一区 | 久久久亚洲高清| 最新日本中文字幕| 国产精品资源在线| 一区二区xxx| 久热综合在线亚洲精品| 国产69精品久久久久999小说| 欧美freesextv| 日本一区免费在线观看| 欧美成人午夜77777| 99re视频在线| 高清一区二区三区av| 国产精品免费一区豆花| 欧美特大特白屁股xxxx| 久久久久久亚洲| 牛牛精品在线视频| 九九精品在线播放| 高h视频在线观看| 日韩一区二区精品视频| av在线电影播放| 伊人久久久久久久久久久久久| 深夜福利视频在线观看| 亚洲第一男人av| 亚洲国产精品成人久久蜜臀| 日韩一级完整毛片| 精品久久久久中文慕人妻| 欧美一区二区高清| jlzzjlzzjlzz亚洲人| 337p亚洲精品色噜噜噜| av无码精品一区二区三区宅噜噜| 欧美精品久久一区二区三区| 一本色道久久综合精品婷婷| 欧美日韩中文另类| 亚洲天堂一二三| 5858s免费视频成人| 国产毛片久久久久| 日韩欧美国产成人一区二区| 亚洲av无码一区二区三区性色| 欧美一区二区视频网站| 精品黑人一区二区三区国语馆| 欧美va在线播放| 丰满少妇一级片| 亚洲精品按摩视频| 青青草av免费在线观看| 亚洲性日韩精品一区二区| av国产在线观看| 日韩在线视频观看| 亚洲妇熟xxxx妇色黄| 久久久亚洲福利精品午夜| 高清在线视频不卡| 国产成人欧美在线观看| 人人精品久久| 91成人免费视频| 老司机aⅴ在线精品导航| 麻豆亚洲一区| 污污网站在线观看视频| 欧美视频网站| 99视频在线免费播放| 久久精品一区二区国产| 一级黄色特级片| 国产精品77777竹菊影视小说| 99riav国产精品视频| 99久久精品免费看| youjizz亚洲女人| 亚洲综合色视频| 日韩 国产 欧美| 欧美精品乱人伦久久久久久| 亚洲精品无遮挡| 亚洲欧美日韩视频一区| 大片免费在线观看| 欧美在线欧美在线| 伊人亚洲精品| 你懂的视频在线一区二区| 天天综合网91| 久久国产亚洲精品无码| 精品制服美女丁香| 在线免费播放av| 国产精品白丝在线| 91玉足脚交嫩脚丫在线播放| 欧美日韩电影一区| 亚洲精品久久久久久久久久久久久久| 国产视频久久久久| 国产午夜精品久久久久免费视| 4388成人网| 日韩精品一页| 欧美中日韩一区二区三区| 欧美在线三级| 五月天婷婷激情视频| 国产成人一区在线| 手机看片日韩av| 亚洲v中文字幕| 性色av蜜臀av浪潮av老女人| 日韩三区四区| 91香蕉亚洲精品| 国产欧美日韩精品一区二区免费 | 欧美日韩精品免费看| 亚洲一区二区三区| 青青青在线视频免费观看| 成人自拍视频在线观看| 亚洲av无一区二区三区| 色老综合老女人久久久| 高清毛片aaaaaaaaa片| 久久精品成人欧美大片| 三级成人黄色影院| 国内视频一区| 欧美日韩成人| 色91精品久久久久久久久| 国产亚洲欧美日韩在线一区| 国产极品美女高潮无套嗷嗷叫酒店| 欧美精品久久一区二区三区| 国产视频福利在线| 91国产视频在线播放| av综合网址| 青青青在线观看视频| 狠狠久久亚洲欧美| 日本猛少妇色xxxxx免费网站| 精品久久久久久| 国产91久久久| 欧美福利视频在线观看| 欧美黄色一级| 中文字幕第50页| 国产美女久久久久| 特黄一区二区三区| 欧美日韩国产在线观看| 高清av在线| 国产精品入口日韩视频大尺度| 精品一区毛片| 成年人在线看片| 欧美国产欧美综合| 国产精品自拍第一页| 国产性色av一区二区| 91精品韩国| 性欧美videosex高清少妇| 蜜臀精品一区二区三区在线观看 | 亚洲一区二区三区四区精品| 国产精品伦理在线| 国产精品视频无码| 久久不射电影网| 成人动态视频| 日本福利视频在线| 久久精品亚洲乱码伦伦中文 | 亚洲巨乳在线观看| 理论电影国产精品| 永久看片925tv| 亚洲国产成人久久| 小草在线视频免费播放| 欧洲国产精品| 日韩国产欧美在线观看| 男女男精品视频网站| 欧美一级高清片在线观看| 七七成人影院| 麻豆蜜桃91| 看电视剧不卡顿的网站| 538精品在线观看| 亚洲成人xxx| 欧美成a人片在线观看久| 亚洲精品乱码久久久久久蜜桃91| 久久成人免费网| 国产一级二级毛片| 亚洲欧洲中文天堂| 欧美成人家庭影院| av在线播放亚洲| 日本一区二区视频在线观看| 国产精品一区二区av白丝下载 | 免费在线观看视频a| 久久青草欧美一区二区三区| 中文字幕人妻一区二区在线视频| 久久天天躁狠狠躁夜夜爽蜜月 | 日韩国产一区三区| 国产精品久久久久久久久免费高清 | 亚洲欧美va天堂人熟伦| 日韩三级中文字幕| 超级碰碰久久| 性做爰过程免费播放| 成人av网站大全| 亚洲香蕉在线视频| 2018日韩中文字幕| 国产精品x453.com| av2014天堂网| 欧美一区欧美二区| 性欧美videohd高精| 国产一二三区在线播放| 亚洲国产精品成人综合色在线婷婷 | 国产欧美123| 国产欧美日韩三区| 午夜成人鲁丝片午夜精品| 成人免费大片黄在线播放| 国产亚洲激情| 久久久久久久久97|