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

個人信息保護法,重要細節有哪些?

安全 應用安全
本篇文章是我對在 2021年08月01日深圳 GOTC 大會的《探索類型友好的 Node.js Web 框架》分享內容的整理與總結。

 [[418829]]

隨著 TypeScript 的流行,類型系統也逐步進入了大家的視野,類型安全相關的問題也受到了更多人的關注,那今天我就以這個角度帶大家感受  Farrow 在類型安全方面優秀方案的設計與思考,希望對大家能有所啟發。

在本篇文章中,我將為大家帶來以下的內容:

  • 類型安全 What & Why?

  • 當前 Node.js 主流 Web 框架現狀

  • 當下的 API 設計中的類型問題

  • Farrow 類型安全方案

  • Farrow 未來規劃

好,那我們現在開始。

類型安全

關于類型安全,可能很多同學已經有所了解,也了解過 Soundness [1] 這個詞,但也該也有許多同學不甚了解。

不了解的同學,你可以暫且將它簡單的理解為:

變量的行為與它的類型相匹配,不存在運行時的類型錯誤。

在 JavaScript 中進行下面幾個操作:

  • 訪問 null 的屬性

  • 將 string 類型當作 number 類型做運算

  • 調用對象不存在的方法

都會在運行時拋出類型錯誤。

那我們為什么要追求類型安全?

Well typed programs cannot go wrong.—— By Robin Milner 1978 《A Theory of Type Polymorphism in Programming》 [2]

正如上面這句話說的,類型系統可以有效的提升程序的正確性:

  • 盡可能在編譯期通過類型檢查提前捕獲可能的程序錯誤,提高代碼的健壯性

  • 配合編輯器類型提示,類型檢查是比單元測試反饋更快、更早、覆蓋更全面的實時測試

  • 符合類型安全準則的代碼,往往是設計更合理、質量更高、編寫更優雅的、表達更清晰的

類型檢查的優勢不用多說,要讓我們的代碼達到類型安全的狀態,往往需要我們對要解決的問題進行很好的建模,所以從這個角度看,類型系統也可以幫助我們寫出設計更合理、質量更高的代碼。

主流框架現狀

之前我們在實際的項目開發中遇到過 Node.js 框架選型的問題,經過調研,我們發現主流的 Node.js 框架: Express.js 、 Koa 、 EggJS 、 Hapi 、 Restify 、 Fastify 等都是用  JavaScript 實現的,他們充分發揮了  Javascript 的能力,但 從類型安全的視角看,當前 Web 框架的設計存在諸多問題。

API 設計類型問題

接下來,我們就以 Express 為例來看一下。

請求意外掛起(Hanging Request)

我們發現以 Express 這樣的中間件設計,它允許請求可以不被響應,也無法通過 TypeScript 的類型檢查得到約束和提示。

  1. app.use((req, res, next) => { 
  2.   // do nothing 
  3. }); 

錯誤的相應內容(Wrong Response)

同樣的,我們無法保證 header -> body 這樣正確的的響應次序

  1. app.use((req, res, next) => { 
  2.   // body 提前發送 
  3.   res.end('xxx'); 
  4.   // header 必須在 body 之前發送,這里報錯或 warning 
  5.   res.header('Content-Type''text/html'); 
  6. }); 

也無法在編譯期約束只發送一次 body

  1. app.use((req, res, next) => { 
  2.   // body 提前發送 
  3.   res.end('xxx'); 
  4.   // body 只能發送一次,這里報錯或 warning 
  5.   res.json({ error: true }); 
  6. }); 

而這些都會導致錯誤的響應內容。

篡改對象屬性(Monkey Patching)

在 JavaScript 中,我們可以任意的修改對象的屬性,但修改 req/res 或 ctx 污染全鏈路中間件的類型。這會導致,在任意一個中間件中,你都無法知道傳到當前中間件的對象中到底有哪些屬性和方法。

  1. app.use((req, res, next) => { 
  2.   // what type of res.locals 
  3.   res.locals.a = 1
  4.   next(); 
  5. }); 
  6.  
  7. app.use((req, res, next) => { 
  8.   // what type of res.locals 
  9.   console.log(res.locals.a); 
  10. }); 

當然有些框架支持一些類型標注的方案,來解決類型提示上的問題,但這并沒有從根本上解決問題,從類型系統的角度來看,動態追加的屬性或方法,與靜態標注的類型有本質矛盾,正確的方式是 讓靜態類型決定能否賦值屬性,而非屬性賦值決定是否包含特定類型。

無運行時驗證(No Runtime Validation)

在當前 TypeScript 官方提供的工具鏈中,TypeScript 類型在編譯后都被抹去,的確在大多數場景下,編譯階段前類型系統就完成了它的任務,但這也導致了一個嚴重的問題,請求的內容是未知的,通常需要手動進行校驗。

  1. app.use((req, res, next) => { 
  2.   req.body; // body type is any/unknown 
  3.   req.query; // query type is any/unknown 
  4.   const body = req.body as MyBodyType; // type wll be eliminated 
  5. }); 

如果請求參數比較復雜,通常需要編寫很復雜的校驗邏輯。

不友好的類型推導(Poor Type Inference)

現有框架在請求內容和響應內容的類型方面基本沒有提供比較好的類型推導方案,很多時候我們需要手動的類型校驗 + 類型轉換。

  1. app.get('/user/:userId', (req, res, next) => { 
  2.   req.params.userId; // no type infer 
  3.   const params = req.params as { userId: string }; 
  4.   const userId = Number(params.userId); // 必須每次手動 transform 
  5. }); 

問題

到現在,我們已經提到了 5 條現有 API 設計中的類型問題:

  1. Hanging Request(請求意外掛起)

  2. Wrong Response(錯誤響應內容)

  3. Monkey Patching(篡改對象屬性)

  4. No Runtime Validation(無運行時驗證)

  5. Poor Type Inference(不友好的類型推導)

雖然這些框架不是使用 TypeScript 實現,但它們都提供了 @types/* 的類型包,但依舊存在諸多類型上的問題,可見只靠 *.d.ts,并不能獲得充分的類型友好和類型安全特性。

我們對這些問題和現有的 Node.js 框架進行了系統性的調研和考量,發現:

  • 基于 Express/Koa 可以用打補丁的方式解決一兩種類型問題,但不能從根本上解決問題

  • Fastify 提供了基于 JSON Schema 的運行時校驗請求內容的方案,但方案與類型系統不貼合

  • 要充分解決系統性問題,則需要基于 TypeScript 做全盤的思考

  • Type-First Development 類型優先開發

  • Type-Driven Development 類型驅動開發

為了做到這些和解決上面提到的問題,我們就需要一個新的類型安全的服務端框架。

類型安全的服務端框架設計目標

根據之前的問題,我們可以得到類型安全的服務端框架設計目標:

  • Prevent Hanging Request(阻止請求意外掛起)

  • Refuse Wrong Response(拒絕錯誤響應內容)

  • No need to Monkey-Patching(無需篡改對象屬性)

  • Embedded Runtime-Validation(內置運行時驗證)

  • Excellent Type Inference(出色的類型推導)

Farrow 作者:做到之前做不到,做好之前能做到。

從而就有了 Farrow 這樣一個框架,接下來我就向大家介紹一下,Farrow 的一些設計和它是如何做到上面所說的事情。

Farrow-Http 設計

Prevent Hanging Request & Refuse Wrong Response

首先,為了可以做到 阻止請求意外掛起 和 拒絕錯誤響應內容,Farrow 重新設計了中間件,取消了響應參數,通過返回值表達響應結果。

  1. import { Http, Response } from 'farrow-http'
  2.  
  3. const http = Http(); 
  4.  
  5. http.use((request, next) => { 
  6.   // response is return type 
  7.   return Response.text(request.pathname); 
  8. }); 

這樣 TypeScript 也可以檢查函數返回值類型是否滿足約束,沒有響應或者響應錯誤類型都會類型報錯。

 

 

 

 

Prevent Wrong Response

為了進一步解決錯誤的相應內容的問題, Farrow 設計了 Virtual Response 虛擬響應對象,Response.text 等方法構造了樸素數據,類似 Virtual DOM,并未直接產生作用,多次使用將 merged 到一起,Farrow 框架內部最終統一按照正確順序處理 header -> body 的次序和類型。

  1. import { Http, Response } from 'farrow-http'
  2.  
  3. const http = Http(); 
  4.  
  5. http.use((request, next) => { 
  6.   // response is return type 
  7.   return Response.text(request.pathname) 
  8.     .header('abc''efg'
  9.     .text('changed text'); 
  10. }); 

No need to Monkey-Patching(Request)

為了解決 Monkey-Patching 的問題,即不再推薦和引導開發者去修改 req 請求對象,Farrow 設計了 Virtual Request 虛擬請求對象,所以傳入中間件的請求對象不是原生  req 對象,而是從中提取的 plain data,所以可以通過 next(newRequest) 向后傳遞新的 request 對象,無需修改原對象。

  1. import { Http, Response } from 'farrow-http'
  2.  
  3. const http = Http(); 
  4.  
  5. http.use((request, next) => { 
  6.   return next({ 
  7.     ...request, 
  8.     pathname: '/another/pathname'
  9.   }); 
  10. }); 
  11.  
  12. http.use((request, next) => { 
  13.   request.pathname; // is equal to /another/pathname 
  14. }); 

No need to Monkey-Patching(Response)

為了進一步解決 Monkey-Patching 的問題,Farrow 重新設計了中間件的管理機制,next 將會返回下游中間件的 response 對象,可以加以后續處理,這樣就可以做到無需修改 res/ctx.body ,immutable 比 mutable 更加類型友好, prefer immutable。

  1. import { Http, Response } from 'farrow-http'
  2.  
  3. const http = Http(); 
  4.  
  5. http.use((request, next) => { 
  6.   let response = await next(); 
  7.   // 合并,組合,過濾,拼裝新的 response 
  8.   return Response.header('abc''efg').merge(response); 
  9. }); 
  10.  
  11. http.use((request, next) => { 
  12.   return Response.text('hello world!'); 
  13. }); 

No need to Monkey-Patching(Middleware)

雖然之前的方面解決了修改請求對象的問題,但中間件間共享變量的需求依舊沒有被解決,所以 Farrow 提供了 Context + Hooks 的方案,他們的工作機制類似 React Context 和 React Hooks,類似跨組件傳遞數據那樣,跨中間件傳遞 Context Data,這樣中間件間的共享變量就無需掛載到 req 對象上了,并且得益于 Node.js 的新特性 Async hooks,Farrow 能夠提供按需的、分布式的、細粒度的、關注度分離的、類型安全的 Context Passing 機制。

  1. import { Http, Response, createContext } from 'farrow-http'
  2.  
  3. const http = Http(); 
  4.  
  5. // 創建 Context 
  6. const AuthContext = createContext<Auth | null>(null); 
  7.  
  8. // 更新 Context 
  9. http.use(async (request, next) => { 
  10.   AuthContext.set(await getAuth(request)); 
  11.   return next(); 
  12. }); 
  13.  
  14. // 不管中間插入多少中間件,request/response 類型都不會污染 
  15.  
  16. // 消費 Context 
  17. http.use((request, next) => { 
  18.   // 跨中間件訪問 context 數據 
  19.   let auth = AuthContext.get(); 
  20.   return Response.text('hello world!'); 
  21. }); 

Embedded Runtime-Validation & Excellent Type Inference(Schema)

為了提供運行時驗證和更友好的類型推導能力,Farrow 設計了一套對 TypeScript 開發者非常友好的 Schema Builder,從而基于 Schema 提供了 Runtime Validation 機制,允許開發者使用 Schema Builder 去描述請求的形狀,基于這個形狀 Farrow 會自動推導出請求對象的類型,這樣就保證了在運行時請求對象對象的值將會滿足 Schema 所描述的形狀。這樣我們就同時提供了運行時校驗和友好的類型推導。

  1. import { Http, Response } from 'farrow-http'
  2. import { Int } from 'farrow-schema'
  3.  
  4. const http = Http(); 
  5.  
  6. http 
  7.   .match({ 
  8.     pathname: '/user'
  9.     method: 'post'
  10.     body: { 
  11.       userId: Int, 
  12.       userName: String, 
  13.       userAge: Int, 
  14.     }, 
  15.   }) 
  16.   .use((request, next) => { 
  17.     // request.body is { userId, userName, userAge } 
  18.     console.log('userId', request.body.userId); 
  19.     console.log('userName', request.body.userName); 
  20.     console.log('userAge', request.body.userAge); 
  21.   }); 

Embedded Runtime-Validation & Excellent Type Inference(URL)

后來我們發現很多時候我們又好像并不需要這么復雜的數據結構,所以 Farrow 提供了一種更簡單的描述方式:

  1. import { Http, Response } from 'farrow-http'
  2. import { Int } from 'farrow-schema'
  3.  
  4. const http = Http(); 
  5.  
  6. http 
  7.   .get('/greet/<name:string>?<age:int>&farrow=type-safety'
  8.   .use((request, next) => { 
  9.     // type infer for request from url 
  10.     console.log('name', request.params.name); 
  11.     console.log('age', request.query.age); 
  12.     console.log('farrow', request.query.farrow); 
  13.   }); 

它是基于 TypeScript 4.1 發布的 Template literal type 特性實現的,從 URL 中提取 TypeScript 類型,然后自動識別是 params 參數還是 query 參數,自動將 String 轉換成標記的 Int 、Boolean 等 Schema 類型,基于這個我們也可以同時提供了運行時校驗和友好的類型推導。

以上 farrow-http 運用 Type-First Development 思想和 React 啟發的函數式/immutable 理念,系統性地提升了 Web Framework 的類型安全水平,解決了以下的問題:

  • Prevent Hanging Request(阻止請求意外掛起)√

  • Refuse Wrong Response(拒絕錯誤響應內容)√

  • No need to Monkey-Patching(無需篡改對象屬性)√

  • Embedded Runtime-Validation(內置運行時驗證)√

  • Excellent Type Inference(出色的類型推導)√

新的挑戰:端到端類型同步

farrow-Http 優化了 Service Side 的類型安全,只解決了一半問題,End-to-end typing 將是一個新的問題 Client Side 如何復用 Service Side 的類型?Client Side 類型如何跟 Service Side 保持一致和同步?所以我們重新思考: BFF 應該為前端提供什么?

  • 傳統 BFF:為前端提供 data

  • 現代 BFF:為前端提供 data 和 type

  • 后現代 BFF:為前端提供 data,type 和 code

為了做到這些,Farrow 提供了一個新的方案:farrow-api。

Farrow-API 設計

Farrow 采用了 Introspection + Codegen 的方式來實現為前端提供 data,type 和 code。提供了類似 GraphQL 的 Introspection 機制,支持拉取 farrow-api 的 Schema 數據,然后通過 Code Generation 生成 TypeScript Type 和 HTTP Client Code。

 

 

 

 

在服務器端,描述請求和響應的形狀,然后聚合成 Farrow API

 

 

 

 

然后為該 API 實現請求處理函數

 

 

 

 

然后啟動 Server,在客戶端就可以生成下面的代碼

 

 

 

 

而在客戶端開發者只需要引入生成的函數,然后調用

 

 

 

 

除此之外,farrow-api 還支持其他描述 API 的屬性,比如 @deprecated 標記

 

 

 

 

至此 Farrow 實現了服務器端的類型安全,也解決了 C/S 模型下的類型同步問題。

Farrow 藍圖和未來展望

優勢

除了類型安全之外,Farrow 的設計還帶來了另外的一些優勢,擁有 Schema 之后可以形成接口的知識庫,知識庫可以用來做很多事情,函數級別的接口監控、測試和版本控制。

未來規劃

Farrow 目前的規劃中有兩個主要的方向:

首先是生態,因為目前 Farrow 的開發團隊比較小,所以不管是一些基礎的工具庫還是文檔、最佳實踐都是缺失和不完善的,但這些內容缺失導致很少的開發者能夠了解 Farrow 并使用它,所以這將是接下來 Farrow 團隊的比較主要的工作方向。除此之外,是基礎能力。Farrow 目前還不夠系統,我們還沒有將它的潛力完全發揮出來,所以也會有一大部分精力投入在繼續探索它能力的邊界。

Bonus: farrow-express & farrow-koa

需要告訴大家的一個好消息是:Farrow 現在已經可以通過 adapter 復用 Express/Koa 等生態:

farrow-express:將 farrow-http 運行在 Express App 上 farrow-koa:將 farrow-http 運行在 Koa App 上

總結

在本篇文章中

  • 我們了解了類型安全的定義及其價值

  • 我們看到了當前 Node.js Web 框架中存在的類型問題

  • 我們看到了 Farrow-HTTP 如何通過類型優先和函數式的思路,系統性地改善類型問題

  • 我們看到了 Farrow-API 如何貫通前后端類型

  • 我們了解了現在立刻能就在 Express/Koa 等應用中使用 Farrow 的方式

  • 我們了解了 Farrow 以及其它追求類型安全的框架將來要解決的問題

 

 

責任編輯:張燕妮 來源: 肖颯lawyer
相關推薦

2020-10-27 16:18:15

安全 信息安全數據信息

2020-10-30 09:38:02

個人信息保護法網絡安全信息安全

2020-10-06 18:40:44

個人信息保護法網絡安全信息安全

2021-08-20 16:19:14

信息安全網絡安全個人信息保護法

2020-10-24 17:30:01

個人信息保護法網絡空間信息安全

2021-08-24 10:04:55

數據安全信息隱私

2020-11-04 09:47:42

個人信息保護法數據保護GDPR

2021-11-05 22:05:38

信息安全大數據手機

2021-11-02 08:48:16

個人信息保護法信息安全個人信息

2021-08-13 16:08:06

信息保護法信息安全網絡空間

2021-11-02 14:57:51

大數據信息安全科技

2021-11-02 08:14:36

個人信息保護法信息安全個人信息

2022-05-17 11:52:55

金融數字化數字化轉型網絡安全

2021-11-01 22:42:04

信息安全大數據安全

2020-10-14 10:53:47

個人信息保護

2020-05-28 16:28:31

網絡安全

2021-11-01 08:02:19

大數據信息安全網絡安全

2021-08-20 15:52:34

信息安全大數據安全

2021-12-15 09:30:34

信息安全網絡安全電子商務

2021-08-21 15:06:32

大數據信息安全科技
點贊
收藏

51CTO技術棧公眾號

久久久综合视频| 精品免费在线| 性欧美大战久久久久久久久| 国产一级特黄a大片99| 免费成人美女女在线观看| 国模大尺度视频一区二区| 亚洲国产一区二区三区| 欧美精品与人动性物交免费看| 中文字幕免费播放| 欧美黄免费看| 亚洲三级 欧美三级| 九九九九九九九九| 色资源二区在线视频| 国产精品久久久久久久久果冻传媒| 99久热re在线精品996热视频| 在线观看日本网站| 欧美 亚欧 日韩视频在线 | 天天色综合社区| 日韩另类在线| 国产精品色婷婷久久58| 韩国成人动漫在线观看| 91丨九色丨丰满| 每日更新成人在线视频| 欧美精品激情在线观看| 亚洲一区电影在线观看| 九一亚洲精品| 亚洲护士老师的毛茸茸最新章节| 午夜一级免费视频| 亚洲永久av| 五月婷婷色综合| 蜜桃视频一区二区在线观看| 韩国一区二区三区四区| 国产污污视频在线观看| 婷婷伊人综合| 伊人久久久久久久久久久久久| 李丽珍裸体午夜理伦片| 成人在线视频www| 在线免费观看日韩欧美| 国产精品333| 欧美亚洲系列| 一区二区三区中文免费| 综合色婷婷一区二区亚洲欧美国产| 麻豆app在线观看| 99精品偷自拍| 精品乱码一区| 天堂在线视频免费| 国产成人日日夜夜| 亚洲aa中文字幕| 国产乱码久久久| 蜜桃视频在线观看一区| 国产精品久久久久久久app| 亚洲日本视频在线观看| 国产亚洲一区在线| 国语自产偷拍精品视频偷| 久久久久久久9999| 激情久久久久久| 午夜精品久久久久久久99黑人| 久草视频手机在线观看| 欧美日韩综合| 久久久久久国产精品美女| 精品一区二区三区四| 狠狠久久婷婷| 91av视频在线| 成人av网站在线播放| 日韩成人一区二区三区在线观看| 国产不卡在线观看| 国产午夜无码视频在线观看| 青草av.久久免费一区| 国产精品自产拍在线观| 国产女人高潮时对白| 国产一区在线观看视频| 5g国产欧美日韩视频| 精品人妻伦一区二区三区久久| 国产精品亚洲专一区二区三区| 国产91一区二区三区| 神马久久久久久久久久| 中文久久电影小说| 成人精品国产福利| 久久精品一二三区| 精品999视频| 国产精品成人一区二区艾草 | 色婷婷精品大视频在线蜜桃视频| 国产欧美在线一区| 国产成人精品一区二区三区视频| 欧美精选午夜久久久乱码6080| 国产成人精品一区二区在线小狼 | 九九视频精品免费| 91久久极品少妇xxxxⅹ软件| 天天操天天干天天插| 日本一区二区三区国色天香 | 日韩av综合网| 色婷婷国产精品免| 欧美在线免费一级片| 136fldh精品导航福利| 一级黄色大毛片| a在线播放不卡| 性欧美.com| 俺来俺也去www色在线观看| 91福利社在线观看| 手机看片国产精品| 国产尤物久久久| 欧美丰满老妇厨房牲生活| 欧美性猛交bbbbb精品| 精品亚洲成a人| 久久艳妇乳肉豪妇荡乳av| 麻豆网站在线看| 色综合婷婷久久| 国产精品99精品无码视亚| 欧美中文字幕一区二区| 久久久久久999| 91激情在线观看| 久久青草欧美一区二区三区| 法国空姐在线观看免费| 人人视频精品| 亚洲国模精品私拍| 青青草手机在线视频| 日本免费新一区视频| 亚洲性av网站| 日韩第一页在线观看| 玖玖在线播放| 欧美成人乱码一区二区三区| 五月天精品在线| 亚洲一区欧美二区| 岛国视频一区免费观看| 日韩在线观看www| 色婷婷综合视频在线观看| 国产一精品一aⅴ一免费| yiren22亚洲综合伊人22| 国产成人无码精品| 日韩片欧美片| 欧美在线视频一区二区| 亚洲av无码国产精品永久一区| 国产片一区二区| 欧美女人性生活视频| 国产精品国产| 欧美国产日韩中文字幕在线| 中文字字幕在线观看| 国产亚洲欧洲997久久综合| 欧美亚洲日本一区二区三区| 人人爱人人干婷婷丁香亚洲| www.久久撸.com| 最新黄色网址在线观看| 久久久久久久久久看片| aa免费在线观看| 日韩精品免费一区二区三区竹菊| 欧美激情在线观看视频| av中文字幕免费在线观看| 亚洲天堂成人网| 日本一二区免费| 婷婷激情综合| 成人中文字幕在线观看| 黄色在线视频网站| 制服丝袜激情欧洲亚洲| 日韩欧美国产成人精品免费| 久久99国产精品成人| 亚洲一区三区在线观看| 国产成人77亚洲精品www| 中文字幕亚洲综合久久| 中文字幕在线观看你懂的| 国产精品剧情在线亚洲| 小明看看成人免费视频| 亚洲电影影音先锋| 亚洲一区二区中文字幕| 日本精品600av| 精品国产一二三区| 国产奶水涨喷在线播放| 99久久精品99国产精品| 国产精品久久久久久久久久尿| 精品无码一区二区三区在线| 99精品女人在线观看免费视频| 久久久精品免费| 国产视频一区二区三区四区五区| 亚洲一区二区在线免费观看视频| 中文字幕人妻一区| 新67194成人永久网站| 日韩免费电影一区二区三区| 欧美一区二区三区婷婷| 欧美激情a在线| 日本大片在线观看| 精品视频一区二区三区免费| 国产97免费视频| 91在线云播放| 在线观看国产一级片| 欧美日韩日本国产亚洲在线| 精品国产一区二区三区麻豆免费观看完整版| 性爽视频在线| 久久精品小视频| 五月天婷婷在线观看| 欧美三级在线看| 久久精品视频9| 国产日韩欧美不卡| 黑人无套内谢中国美女| 亚洲欧美视频| 男同互操gay射视频在线看| 久久视频在线观看| 国产精品视频久久久| av3级在线| 北条麻妃久久精品| 日本1级在线| 日韩精品一区二区三区swag| 99久久久无码国产精品免费蜜柚| 亚洲女性喷水在线观看一区| 女尊高h男高潮呻吟| 精品亚洲欧美一区| 欧美黄网站在线观看| 亚洲高清资源在线观看| 日本一区二区在线| youjizz亚洲| 成人激情黄色网| 日韩高清中文字幕一区二区| 欧美第一淫aaasss性| 在线免费黄色| 亚洲欧美福利视频| 亚洲精品一区二区三区蜜桃| 欧美日韩国产影片| 国产精品一区二区三区四| 一区二区三区精品| 国产三级短视频| 久久色中文字幕| 国产chinese中国hdxxxx| 麻豆91在线播放| 免费在线观看的毛片| 日韩天堂av| 免费高清一区二区三区| 欧美亚洲国产成人| 欧美有码在线| 99精品99久久久久久宅男| 国产精品传媒麻豆hd| 国产成+人+综合+亚洲欧洲| 国产777精品精品热热热一区二区| 久久国产精品久久国产精品| 日本中文字幕在线视频| 在线观看亚洲区| 免费国产在线视频| 亚洲精品视频网上网址在线观看| 亚洲第一色网站| 欧美一级高清片| 国产毛片久久久久| 欧美精品精品一区| 91福利在线观看视频| 欧美日韩在线综合| 精品无码一区二区三区的天堂| 日韩欧美在线观看视频| 国产精品久久久久久久妇| 亚洲国产日韩一区二区| 国产亚洲精品久久久久久打不开 | 蜜桃视频在线网站| 久久久人成影片一区二区三区观看 | eeuss国产一区二区三区四区| 成人免费观看网址| 青青国产精品| 成人字幕网zmw| 久久国产精品免费一区二区三区| 亚洲精品免费一区二区三区| 日韩高清一区| 国产一区二区在线网站| 欧美午夜寂寞| 欧美久久在线| 91综合在线| 中文字幕一区二区三区乱码| 国产精品久久久久9999赢消| av影院在线播放| 亚洲激情影院| 男人操女人免费| 蜜臀av性久久久久av蜜臀妖精| 亚洲天堂2018av| 国产成人午夜精品影院观看视频| 佐佐木明希电影| 91丨九色丨尤物| 日本女人性生活视频| 亚洲青青青在线视频| 国产在线观看99| 色激情天天射综合网| 亚洲天堂网在线观看视频| 欧美一区二区三区播放老司机| 刘亦菲毛片一区二区三区| 亚洲视频在线播放| 日本在线人成| 麻豆精品国产传媒mv男同| 致1999电视剧免费观看策驰影院| 久久久久亚洲| 18岁网站在线观看| 免费观看久久久4p| 又黄又爽又色的视频| 99精品久久只有精品| 人人艹在线视频| 亚洲成人动漫在线观看| 这里只有精品免费视频| 欧美一区二区三区日韩视频| 青青免费在线视频| 欧美成人激情在线| 亚洲精品**中文毛片| 成人精品视频在线| 日本在线中文字幕一区| 一区二区三区电影| 亚洲青涩在线| 在线观看免费不卡av| 91麻豆swag| 欧美黄色aaa| 欧美亚一区二区| 色香蕉在线视频| 日韩视频欧美视频| 欧美一级大黄| 国产尤物91| 女人天堂亚洲aⅴ在线观看| 精品国产成人av在线免| 国产成人亚洲综合色影视| 免费看日本黄色片| 午夜久久久久久久久| 一级全黄裸体免费视频| 亚洲女人被黑人巨大进入| 日本高清成人vr专区| 国产精品网红直播| 小嫩嫩12欧美| av无码久久久久久不卡网站| 久久97超碰色| 亚洲一区 欧美| 欧美性猛交xxxx黑人| 成人黄色在线观看视频| 久久精品国产69国产精品亚洲 | 亚洲深深色噜噜狠狠爱网站| 日韩无套无码精品| av动漫一区二区| 久久久一二三区| 91麻豆精品国产自产在线| 天天综合视频在线观看| 国产精品福利在线观看| 亚洲精品推荐| 99热自拍偷拍| 99久久伊人网影院| 日韩av女优在线观看| 日韩欧美电影在线| 黄网站在线免费| 91精品啪aⅴ在线观看国产| 日韩理论在线| 国内自拍视频一区| 久久久精品天堂| 探花视频在线观看| 精品五月天久久| 日韩电影毛片| 精品国产一区二区三区四区vr| 精品96久久久久久中文字幕无| 免费观看黄网站| 一区二区三区四区不卡在线| 素人fc2av清纯18岁| 欧美丝袜一区| www.超碰com| 中文字幕第一区二区| 在线播放成人av| 色偷偷噜噜噜亚洲男人| 欧美日韩va| 日本福利视频导航| 国产九九视频一区二区三区| 欧美精品入口蜜桃| 亚洲大胆人体在线| 麻豆免费版在线观看| 久久大片网站| 日韩精品91亚洲二区在线观看| 法国空姐电影在线观看| 欧美一a一片一级一片| 1769在线观看| 亚洲综合色av| av不卡在线| 极品久久久久久久| 欧美剧在线免费观看网站| 在线观看中文| 久久综合毛片| 青青草精品视频| 午夜免费激情视频| 亚洲精品动漫久久久久| 成人美女黄网站| 一区二区不卡视频| 国产大片一区二区| 日韩视频在线观看一区| 中文字幕综合一区| 婷婷综合国产| 91传媒久久久| 国产精品久久久99| 免费国产羞羞网站视频| 日韩av免费一区| 我不卡手机影院| 中文字幕av观看| 欧美日韩午夜在线视频| 伊人222成人综合网| 国新精品乱码一区二区三区18| 天堂成人国产精品一区| 欧美爱爱免费视频| 日韩国产欧美区| 另类一区二区| 人妻熟妇乱又伦精品视频| 国产精品国产三级国产专播品爱网| 亚洲经典一区二区三区| 日本成人黄色片| 欧美激情1区| www久久久久久久| 精品第一国产综合精品aⅴ| 亚洲成人人体| 精品国偷自产一区二区三区| 国产欧美精品一区aⅴ影院| 成人免费视频国产|