HTTP與RESTful

HTTP

HTTP是一個(gè)屬于應(yīng)用層的協(xié)議瑰钮,特點(diǎn)是簡介畦娄、快速

HTTP發(fā)展史

HTTP客戶端發(fā)起請求毕箍,創(chuàng)建端口
HTTP服務(wù)器在端口監(jiān)聽客戶端請求
HTTP服務(wù)器向客戶端返回狀態(tài)和內(nèi)容

網(wǎng)絡(luò)請求,頁面渲染

1皆辽、域名解析

  • 以Chrome瀏覽器為例萨赁,域名解析過程:

    • 1弊琴、Chrome搜索自身的DNS緩存
    • 2、搜索操作系統(tǒng)自身的DNS緩存(瀏覽器沒有找到緩存或緩存已經(jīng)過期失效):chrome://net-internals/#dns查看DNS緩存記錄
    • 3杖爽、讀取本地的HOST文件
    • 4敲董、瀏覽器發(fā)起一個(gè)DNS的一個(gè)系統(tǒng)調(diào)用,一般向本地主控DNS服務(wù)器
    • 5慰安、瀏覽器獲得域名對應(yīng)的IP地址后腋寨,發(fā)起HTTP "三次握手"
    • 6、TCP/IP連接建立起來后化焕,瀏覽器就可以向服務(wù)器發(fā)送HTTP請求了萄窜,使用了比如說,用HTTP的GET方法請求一個(gè)根域里的一個(gè)域名撒桨,協(xié)議可以采用HTTP1.0的一個(gè)協(xié)議查刻。
    • 7、服務(wù)器端接收到了這個(gè)請求凤类,根據(jù)根路徑參數(shù)穗泵,經(jīng)過后端的一些處理之后,把處理后的一個(gè)結(jié)果的數(shù)據(jù)返回瀏覽器踱蠢,如果是慕課網(wǎng)的頁面就會把完整的HTML頁面代碼返回給瀏覽器火欧。
    • 8、瀏覽器拿到了慕課網(wǎng)的完整的HTML頁面代碼茎截,在解析和渲染這個(gè)頁面的時(shí)候苇侵,里面的JS、CSS企锌、圖片靜態(tài)資源榆浓,它們同樣也是一個(gè)個(gè)HTTP請求,都需要經(jīng)過上面的主要的七個(gè)步驟撕攒。
    • 9陡鹃、瀏覽器根據(jù)拿到的資源對頁面進(jìn)行渲染,最終把一個(gè)完整的頁面呈現(xiàn)給了用戶抖坪。
  • 運(yùn)營商DNS服務(wù)器

    • 1萍鲸、寬帶運(yùn)營商服務(wù)器查看本身緩存
    • 2、運(yùn)營商服務(wù)器發(fā)起一個(gè)迭代的DNS解析請求
      • 運(yùn)營商服務(wù)器把結(jié)果返回操作系統(tǒng)內(nèi)核同時(shí)緩存起來
      • 操作系統(tǒng)內(nèi)核把結(jié)果返回瀏覽器
      • 最終瀏覽器拿到了www.imooc.com對應(yīng)的IP地址

瀏覽器以一個(gè)隨機(jī)端口向服務(wù)器的Web程序發(fā)起一個(gè)TCP連接請求擦俐,此連接請求通過層層路由設(shè)備到達(dá)網(wǎng)卡脊阴,然后進(jìn)入內(nèi)核的TCP/IP協(xié)議棧(有可能經(jīng)過防火墻過濾),最終到達(dá)Web服務(wù)端蚯瞧。

HTTP交互過程
1嘿期、客戶端發(fā)送SYN同步報(bào)文給服務(wù)端
2、服務(wù)端收到SYN同步報(bào)文之后埋合,給客戶端一個(gè)回復(fù)報(bào)文SYN,ACK報(bào)文
3备徐、客戶端收到第二條報(bào)文之后,會再給服務(wù)端回復(fù)一個(gè)ACK報(bào)文

連接建立完成之后甚颂,客戶端和服務(wù)端就可以進(jìn)行正常的HTTP網(wǎng)絡(luò)請求

4蜜猾、客戶端發(fā)送一個(gè)HTTP請求報(bào)文到服務(wù)端
5、服務(wù)端收到客戶端的HTTP請求報(bào)文振诬,處理之后把數(shù)據(jù)返回給客戶端瓣铣,產(chǎn)生第五條HTTP響應(yīng)報(bào)文

當(dāng)客戶端和服務(wù)端之間結(jié)束網(wǎng)絡(luò)請求之后,這條TCP連接通道就會關(guān)閉
假如斷開由客戶端發(fā)起贷揽,流程:
6棠笑、客戶端發(fā)送FIN終止信號報(bào)文
7、服務(wù)端收到客戶端發(fā)送的終止信號之后禽绪,服務(wù)端會回復(fù)給客戶端一個(gè)ACK確認(rèn)報(bào)文

當(dāng)客戶端收到第七條報(bào)文之后蓖救,有客戶端向服務(wù)端方向的連接就已經(jīng)斷開

8、過一段時(shí)間印屁,服務(wù)端又會發(fā)送給客戶端第八條FIN循捺、ACK終止報(bào)文
9、客戶端收到第八條報(bào)文之后雄人,會回復(fù)給服務(wù)端一條ACK確認(rèn)報(bào)文从橘,此時(shí)由服務(wù)端到客戶端方向的TCP連接通道關(guān)閉念赶。

TCP 連接通道是一個(gè)全雙工的通道,并不是兩條通道

Wireshark工具查看HTTP工作流程

HTTP消息體
HTTP Request 協(xié)議格式
HTTP Request 協(xié)議格式
? {請求方法}{/相對路徑} HTTP/{http版本}\r\n         \r\n = CRLF
? Header-Name-1:value\r\n
? Header-Name-2:value\r\n
? \r\n
? Optional Request Boby
HTTP Request 協(xié)議格式
HTTP Request 協(xié)議格式
? HTTP/{version} {status-code} {message}\r\n
? Header-Name-1:value\r\n
? Header-Name-2:value\r\n
? \r\n
? Optional Request Boby

Headers:頭信息

Preview:資源預(yù)覽

Response:么有處理的響應(yīng)的響應(yīng)的正文

Cookies:請求和返回的Cookies

Timing:圖形化顯示每個(gè)階段耗費(fèi)的時(shí)間

Stalled:等待時(shí)間:瀏覽器要發(fā)出請求到請求可以發(fā)出的等待時(shí)間恰力,一般是代理協(xié)商以及要等到TCP連接釋放的時(shí)間不包含DNS查詢和建立TCP連接的時(shí)間叉谜。

Proxy negotiation:代理協(xié)商的時(shí)間

Request sent:請求時(shí)間:第一個(gè)字節(jié)發(fā)出前,到最后一個(gè)字節(jié)發(fā)出后的時(shí)間踩萎,可以理解為請求時(shí)間或上傳時(shí)間

Watting(TTFB):請求發(fā)出以后到收到響應(yīng)的第一個(gè)字節(jié)所花費(fèi)的時(shí)間停局,包括整個(gè)數(shù)據(jù)在路由貫穿中所延遲的時(shí)間,以及服務(wù)器端響應(yīng)這個(gè)請求做的處理時(shí)間

Content Download:收到第一個(gè)字節(jié)開始到收到最后一個(gè)字節(jié)結(jié)束所花費(fèi)的時(shí)間

charles工具:抓取HTTP請求和響應(yīng)數(shù)據(jù)

Telnet模擬HTTP請求

HTTPS:Hyper Text Transfer Protocol over Secure Socket Layer.基于SSL層的HTTP

HTTP與HTTPS不同之處

  • HTTPS協(xié)議需要到CA申請證書香府,一般免費(fèi)證書很少董栽,需要交費(fèi);
  • HTTP是明文傳輸企孩,HTTPS則是具有安全性的SSL加密傳輸锭碳;
  • HTTP和HTTPS使用的端口也不一樣,前者是80勿璃,后者是443工禾;
  • HTTPS可進(jìn)行加密傳輸,身份認(rèn)證蝗柔,比HTTP安全闻葵。

HTTP最大特點(diǎn)是無連接無狀態(tài)。

  • 限制每次連接只處理一個(gè)請求癣丧,服務(wù)器處理完客戶的請求之后并且接收到客戶端的答應(yīng)后斷開此連接槽畔。這種方式的最大好處是節(jié)省傳輸時(shí)間。HTTP1.0胁编,早期客戶端與服務(wù)端交換的間歇性較大厢钧,大部分通道處于空閑,會無端占用資源嬉橙,利用這一特點(diǎn)設(shè)計(jì)了請求時(shí)建立連接早直,請求完畢后釋放連接,這樣可以盡快釋放資源市框,服務(wù)其他客戶端霞扬。

  • 隨著時(shí)間推移,keep-alive誕生枫振,解決效率低的問題喻圃,功能是客戶端到服務(wù)端連接持續(xù)有效。當(dāng)出現(xiàn)對服務(wù)器后續(xù)請求時(shí)粪滤,keep-alive避免了重新建立連接斧拍。也可以叫做HTTP的持久連接,可以使用同一TCP連接來發(fā)送和接受多個(gè)HTTP請求和應(yīng)答杖小。

安全套接字層SSL & 安全傳輸層TLS

  • SSL:Secure Sockets Layer安全套接層
  • TLS:Transport Layer Securuty 傳輸層安全肆汹,SSL繼任者
  • TLS與SSL在傳輸層之上對網(wǎng)絡(luò)連接進(jìn)行加密愚墓,為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性

SSL協(xié)議

為了解決以下風(fēng)險(xiǎn)而設(shè)計(jì)產(chǎn)生:

  • 所有信息都是加密傳播,第三方無法竊聽
  • 具有校驗(yàn)機(jī)制昂勉,一旦被篡改浪册,通信雙方會立刻發(fā)現(xiàn)
  • 配備身份證書,防止身份被冒充
HTTP與HTTPS架構(gòu)
SSL連接建立過程
1硼啤、客戶端發(fā)送握手信息給服務(wù)端议经,2個(gè)內(nèi)容:隨機(jī)數(shù)number1斧账,協(xié)商的加密算法(或者客戶端支持的加密算法)
2谴返、服務(wù)端給予客戶端響應(yīng)握手信息,隨機(jī)數(shù)number2咧织,匹配好的協(xié)商加密算法(一定是客戶端傳給服務(wù)器端的加密算法的一個(gè)子集)
3嗓袱、服務(wù)端給客戶端第一個(gè)響應(yīng)報(bào)文之后,隨即又會傳遞給客戶端第二個(gè)響應(yīng)報(bào)文习绢,即服務(wù)端的證書
4渠抹、客戶端收到服務(wù)端傳遞的證書之后,對證書進(jìn)行驗(yàn)證闪萄,是否有效梧却、合法(1、客戶端驗(yàn)證服務(wù)端證書的數(shù)字摘要和證書解密后的內(nèi)容是否被篡改败去;2放航、證書鏈。逐級驗(yàn)證服務(wù)端的證書圆裕,一直到根證書是否在我們的操作系統(tǒng)的可信任證書列表當(dāng)中广鳍。根證書會被植入到瀏覽器中或操作系統(tǒng)中)
5、客戶端組裝會話秘鑰(組裝有三個(gè)內(nèi)容:通過客戶端自己保留的隨機(jī)數(shù)number1吓妆、隨機(jī)數(shù)number2赊时,預(yù)主秘鑰組裝會話秘鑰)
6、客戶端將預(yù)主秘鑰通過服務(wù)端傳遞過來的證書里面的公鑰加密行拢,然后傳遞給服務(wù)端
7祖秒、服務(wù)端拿到加密過的預(yù)主秘鑰,通過私鑰解密域主秘鑰舟奠,服務(wù)端也獲取到三個(gè)隨機(jī)數(shù)
8狈涮、服務(wù)端拿到三個(gè)隨機(jī)數(shù)開始組裝會話密鑰
9、客戶端通過組裝的會話密鑰去加密一條消息鸭栖,把加密后的握手消息傳遞給服務(wù)端歌馍,主要為了驗(yàn)證服務(wù)端能否正常接收客戶端加密過的數(shù)據(jù)消息
10、服務(wù)端同樣發(fā)送一個(gè)加密后的握手消息給客戶端晕鹊,來驗(yàn)證客戶端是否能正常解析加密過的數(shù)據(jù)松却。9暴浦,10兩步驗(yàn)證通過,客戶端與服務(wù)端之間的SSL連接就建立完成了晓锻。

預(yù)主密鑰:由客戶端產(chǎn)生歌焦,傳遞給服務(wù)端,在會話中起著非常重要的作用砚哆,配合隨機(jī)數(shù)1和隨機(jī)數(shù)2生成最終的會話密鑰独撇。傳遞的隨機(jī)數(shù)和預(yù)主秘鑰完全可以只有預(yù)主秘鑰承擔(dān),為什么產(chǎn)生三個(gè)隨機(jī)數(shù):協(xié)議設(shè)計(jì)之初躁锁,假設(shè)客戶端所產(chǎn)生的隨機(jī)數(shù)不是真正的隨機(jī)數(shù)纷铣,為了保證隨機(jī)數(shù)的隨機(jī)性,我們通過產(chǎn)生多個(gè)隨機(jī)數(shù)來達(dá)到最終產(chǎn)生的秘鑰具有非常好的隨機(jī)性战转,防止被中間攻擊人隨意竊取搜立。

公鑰、私鑰:非對稱加密中的專業(yè)術(shù)語槐秧。

對稱加密算法:加密所使用的秘鑰和解密所使用的秘鑰相同啄踊。常見的有AES、DES刁标。安全性差颠通,因?yàn)樾枰獙⑺借€傳輸給服務(wù)端。

對稱加密

非對稱加密:使用公鑰進(jìn)行加密膀懈,解密使用私密的算法顿锰。常見RSA。

非對稱加密

請求方法

  • GET:請求獲取Request-URI所標(biāo)識的資源
  • POST:新創(chuàng)建資源吏砂,在Request-URI所標(biāo)識的資源后附加新的數(shù)據(jù)
  • PUT:請求服務(wù)器存儲一個(gè)資源撵儿,并用Request-URI作為其標(biāo)識。向指定資源位置上傳最新內(nèi)容
  • DELETE:請求服務(wù)器刪除Request-URI所標(biāo)識的資源
  • HEAD:請求獲取由Request-URI所表示的資源的響應(yīng)消息報(bào)頭狐血,可以不用傳入全部內(nèi)容
  • TRACE
  • OPTIONS 請求查詢服務(wù)器的性能淀歇,或者查詢與資源相關(guān)的選項(xiàng)和需求

狀態(tài)碼

  • 1xx:信息響應(yīng)類,表示接收到請求并且繼續(xù)處理
  • 2xx:處理成功響應(yīng)類匈织,表示動作被成功接收浪默、理解和接受
  • 3xx:重定向響應(yīng)類,為了完成指定的動作缀匕,必須接受進(jìn)一步處理
  • 4xx:客戶端錯誤纳决,客戶請求包含語法錯誤或者是不能正確執(zhí)行
  • 5xx:服務(wù)器端錯誤,服務(wù)器不能正確執(zhí)行一個(gè)正確的請求

常用狀態(tài)碼

  • 200 OK 客戶端請求成功
  • 400 Bad Request 客戶端請求有語法錯誤乡小,不能被服務(wù)器所理解
  • 401 Unauthorized 服務(wù)器收到請求阔加,但是拒絕提供服務(wù)
  • 404 Not Found 請求資源不存在
  • 500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期的錯誤
  • 503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請求

URL:同一資源定位符,偏重定位满钟,說明了通過那種協(xié)議來訪問一個(gè)資源胜榔。

URI:同一資源標(biāo)識符胳喷,偏重標(biāo)識,一個(gè)字符串格式規(guī)范夭织。

URL是URI的子集吭露。

Restful

  • REST(Resource Representational State Transfer)是Roy Thomas Fielding在他2000年的博士論文中提出的。如果一個(gè)架構(gòu)符合REST原則尊惰,就稱為RESTful架構(gòu)

  • 本質(zhì):一種軟件架構(gòu)風(fēng)格

  • 核心:面向資源

  • 解決問題:降低開發(fā)的復(fù)雜性讲竿;提高系統(tǒng)的可伸縮性

  • Restful資源層Resource:文本、圖片弄屡、服務(wù)题禀、音頻等等

  • Restful表現(xiàn)層Representational

    • 文本:txt、html琢岩、xml投剥、json师脂、二進(jìn)制
    • 圖片:jpg担孔、png
    • Case:book是一個(gè)資源,獲取不同的格式
    • http協(xié)議的content-type和accept
  • Restful狀態(tài)轉(zhuǎn)化State Transfer

    • 冪等性:每次HTTP請求相同的參數(shù)吃警,相同的URI糕篇,產(chǎn)生的結(jié)果是相同的
    • GET
    • POST
    • PUT
    • DELETE

設(shè)計(jì)概念和準(zhǔn)則

  • 網(wǎng)絡(luò)上的所有事物都可以被抽象為資源。
  • 每一個(gè)資源都有唯一的資源標(biāo)識酌心,對資源的操作不會改變這些標(biāo)識拌消。
  • 所有的操作都是無狀態(tài)的。

資源:網(wǎng)絡(luò)上的一個(gè)實(shí)體安券,或者說是網(wǎng)絡(luò)上的一個(gè)具體信息墩崩。

schema://host[:port]/path [?query-string][#anchor]

  • schema:指定底層使用的協(xié)議(例如:http,https侯勉,ftp)

  • host:服務(wù)器的IP地址或者域名

  • port:服務(wù)器端口鹦筹,默認(rèn)為80

  • path:訪問資源的路徑

  • query-string:發(fā)送給http服務(wù)器的數(shù)據(jù)

  • anchor:錨

SOAP WebService

WebService:是一種跨編程語言和操作系統(tǒng)平臺的遠(yuǎn)程調(diào)用技術(shù)。

WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時(shí)采用XML格式封裝址貌,并增加了一些特點(diǎn)的HTTP消息頭铐拐,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議。

效率與易用性

SOAP由于各種需求不斷擴(kuò)充其本身協(xié)議的內(nèi)容练对,導(dǎo)致在SOAP處理方面的性能有所下降遍蟋。同時(shí)在易用性方面以及學(xué)習(xí)成本上也有所增加。

RESTful由于其面向資源接口設(shè)計(jì)以及操作抽象簡化了開發(fā)者的不良設(shè)計(jì)螟凭,同時(shí)也最大限度的利用了http最初的應(yīng)用協(xié)議設(shè)計(jì)理念虚青。

安全性

RESTful對于資源型服務(wù)接口來說很合適,同時(shí)特別適合對效率要求很高螺男,但是對于安全要求不高的場景棒厘。

SOAP的成熟性可以給需要提供給多開發(fā)語言钟些,對于安全性要求較高的接口設(shè)計(jì)帶來便利。所以我覺得純粹說什么設(shè)計(jì)模式將會占據(jù)主導(dǎo)地位沒有什么意義绊谭,關(guān)鍵還是看應(yīng)用場景政恍。

如何設(shè)計(jì)RESTful API

  • 資源路徑(URI)
  • HTTP動詞
  • 過濾信息
  • 狀態(tài)碼
  • 錯誤處理

HTTP動詞

對于資源的操作(CRUD),由HTTP動詞(謂詞)表示达传。

  • GET:從服務(wù)器取出資源(一項(xiàng)或多項(xiàng))
  • POST:在服務(wù)器新建一個(gè)資源
  • PUT:在服務(wù)器更新資源(客戶端提供改變后的完整資源)
  • PATCH:在服務(wù)器更新資源(客戶端提供改變的屬性)
  • DELETE:從服務(wù)器刪除資源
請求類型 請求路徑 功能
GET /books 獲取列表
POST /book 創(chuàng)建一本書
GET /books/id 通過id查詢一本書列表
PUT /book/id 通過id更新一本書
DELETE /book/id 通過id刪除一本書

過濾信息

  • 如果記錄數(shù)量很多篙耗,服務(wù)器不可能都將它們返回給用戶。API應(yīng)該提供參數(shù)宪赶,過濾返回結(jié)果宗弯。

舉例:

  • ?offset=10:指定返回記錄的開始位置
  • ?page=2&per_page=100:指定第幾頁,以及每頁的記錄數(shù)
  • ?sortby=name&order=asc:指定返回結(jié)果排序搂妻,以及排序順序
  • ?animal_type_id=1:指定篩選條件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒙保,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欲主,更是在濱河造成了極大的恐慌邓厕,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁瓢,死亡現(xiàn)場離奇詭異详恼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)引几,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門昧互,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伟桅,你說我怎么就攤上這事敞掘。” “怎么了楣铁?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵玖雁,是天一觀的道長。 經(jīng)常有香客問我民褂,道長茄菊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任赊堪,我火速辦了婚禮面殖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哭廉。我一直安慰自己脊僚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辽幌,像睡著了一般增淹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乌企,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天虑润,我揣著相機(jī)與錄音,去河邊找鬼加酵。 笑死拳喻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猪腕。 我是一名探鬼主播冗澈,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陋葡!你這毒婦竟也來了亚亲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤腐缤,失蹤者是張志新(化名)和其女友劉穎捌归,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柴梆,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陨溅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年终惑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绍在。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雹有,死狀恐怖偿渡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霸奕,我是刑警寧澤溜宽,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站质帅,受9級特大地震影響适揉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煤惩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一嫉嘀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魄揉,春花似錦剪侮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杰标。三九已至,卻和暖如春彩匕,著一層夾襖步出監(jiān)牢的瞬間腔剂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工驼仪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桶蝎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓谅畅,卻偏偏與公主長得像登渣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子毡泻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容