HTTP 緩存

HTTP報(bào)文:

報(bào)文信息主要分為兩部分
1.包含屬性的首部(header)--------------------------附加信息(cookie,緩存信息等)與緩存相關(guān)的規(guī)則信息,均包含在header中
2.包含數(shù)據(jù)的主體部分(body)-----------------------HTTP請(qǐng)求真正想要傳輸?shù)牟糠?/p>

緩存位置分類:

緩存的位置.png

Service Worker
Memory Cache
Disk Cache
Push Cache

  • 實(shí)際上,HTTP 協(xié)議頭的那些字段,都屬于 disk cache 的范疇,是幾個(gè)緩存位置的其中之一。
  • 我們可以在 Chrome 的開(kāi)發(fā)者工具中·Network -> Size 一列看到一個(gè)請(qǐng)求最終的處理方式:如果是大小 (多少 K, 多少 M 等) 就表示是網(wǎng)絡(luò)請(qǐng)求粘捎,否則會(huì)列出 from memory cache, from disk cache 和 from ServiceWorker。

1危彩、 Service Worker:

  • Service Worker 是運(yùn)行在瀏覽器背后的獨(dú)立線程攒磨,一般可以用來(lái)實(shí)現(xiàn)緩存功能。使用 Service Worker的話汤徽,傳輸協(xié)議必須為 HTTPS

  • Service Worker 能夠操作的緩存是有別于瀏覽器內(nèi)部的 memory cache 或者 disk cache 的娩缰。
    我們可以從 Chrome 的 F12 中,Application -> Cache Storage 找到這個(gè)單獨(dú)的“小金庫(kù)”谒府。
    如果 Service Worker 沒(méi)能命中緩存拼坎,一般情況會(huì)使用 fetch() 方法繼續(xù)獲取資源浮毯。這時(shí)候,瀏覽器就去 memory cache 或者 disk cache 進(jìn)行下一次找緩存的工作了泰鸡。注意:經(jīng)過(guò) Service Worker 的 fetch() 方法獲取的資源债蓝,即便它并沒(méi)有命中 Service Worker 緩存,甚至實(shí)際走了網(wǎng)絡(luò)請(qǐng)求盛龄,也會(huì)標(biāo)注為 from ServiceWorker

2饰迹、Memory Cache:

Memory Cache 也就是內(nèi)存中的緩存,主要包含的是當(dāng)前中頁(yè)面中已經(jīng)抓取到的資源,例如頁(yè)面上已經(jīng)下載的樣式余舶、腳本啊鸭、圖片等。 讀取內(nèi)存中的數(shù)據(jù)肯定比磁盤(pán)快,內(nèi)存緩存雖然讀取高效匿值,可是緩存持續(xù)性很短赠制,會(huì)隨著進(jìn)程的釋放而釋放。 一旦我們關(guān)閉 Tab 頁(yè)面挟憔,內(nèi)存中的緩存也就被釋放了憎妙。內(nèi)存比硬盤(pán)小很多,所以不能全部都放進(jìn)來(lái)

3曲楚、Disk Cache :

disk cache 也叫 HTTP cache,顧名思義是存儲(chǔ)在硬盤(pán)上的緩存褥符,因此它是持久存儲(chǔ)的龙誊,是實(shí)際存在于文件系統(tǒng)中的。而且它允許相同的資源在跨會(huì)話喷楣,甚至跨站點(diǎn)的情況下使用趟大,例如兩個(gè)站點(diǎn)都使用了同一張圖片

Disk Cache 也就是存儲(chǔ)在硬盤(pán)中的緩存,讀取速度慢點(diǎn)铣焊,但是什么都能存儲(chǔ)到磁盤(pán)中逊朽,比之 Memory Cache 勝在容量和存儲(chǔ)時(shí)效性上。
它會(huì)根據(jù) HTTP Herder 中的字段判斷哪些資源需要緩存曲伊,哪些資源可以不請(qǐng)求直接使用叽讳,哪些資源已經(jīng)過(guò)期需要重新請(qǐng)求。并且即使在跨站點(diǎn)的情況下坟募,相同地址的資源一旦被硬盤(pán)緩存下來(lái)岛蚤,就不會(huì)再次去請(qǐng)求數(shù)據(jù)

4.Push Cache:
Push Cache(推送緩存)是 HTTP/2 中的內(nèi)容,當(dāng)以上三種緩存都沒(méi)有命中時(shí)懈糯,它才會(huì)被使用涤妒。

  • 網(wǎng)絡(luò)請(qǐng)求:
    1、根據(jù) Service Worker 中的 handler 決定是否存入 Cache Storage (額外的緩存位置)
    2赚哗、根據(jù) HTTP 頭部的相關(guān)字段(Cache-control, Pragma 等)決定是否存入 disk cache
    3她紫、memory cache 保存一份資源 的引用硅堆,以備下次使用

http 緩存機(jī)制:

Web緩存器(Web cache)也叫代理服務(wù)器(proxy server),它能夠代表初始web服務(wù)器來(lái)滿足http請(qǐng)求的網(wǎng)絡(luò)實(shí)體

緩存策略.png

強(qiáng)制緩存:

Cache-Control && Expires

Expires用時(shí)刻來(lái)標(biāo)識(shí)失效時(shí)間贿讹,不免收到時(shí)間同步的影響渐逃,而Cache-Control使用時(shí)間間隔很好的解決了這個(gè)問(wèn)題.
Cache-Control 是 HTTP1.1 才有的,不適用于 HTTP1.0围详,而 Expires 既適用于 HTTP1.0朴乖,也適用于 HTTP1.1。
當(dāng)客戶端兩種頭都能解析的時(shí)候助赞,會(huì)優(yōu)先使用 Cache-Control

  • Cache-Control:
    • private 客戶端可以緩存
    • public 客戶端和代理服務(wù)器都可以緩存
    • max-age=60 緩存內(nèi)容將在60s后失效
    • no-cache 需要使用對(duì)比緩存驗(yàn)證數(shù)據(jù)买羞,強(qiáng)制向源服務(wù)器再次驗(yàn)證(沒(méi)有強(qiáng)制緩存)
    • no-store 所有內(nèi)容都不會(huì)緩存,強(qiáng)制緩存和對(duì)比緩存都不會(huì)觸發(fā)(不緩存)

cache-control 的
no-cache :強(qiáng)制每次請(qǐng)求直接發(fā)送給源服務(wù)器雹食,而不經(jīng)過(guò)本地緩存版本的校驗(yàn)畜普。
max-age<=0 時(shí) 向server 發(fā)送http 請(qǐng)求確認(rèn) ,該資源是否有修改,在重新獲取資源之前,先檢驗(yàn)ETag/Last-Modified
no-store: 那瀏覽器不會(huì)存儲(chǔ)這次相應(yīng)的數(shù)據(jù)群叶,當(dāng)下次請(qǐng)求時(shí)吃挑,瀏覽器會(huì)在請(qǐng)求一次,就是說(shuō)不會(huì)對(duì)比Etag街立,不論什么情況都不會(huì)緩存舶衬。
不管是max-age=0還是no-cache,都會(huì)返回304(資源無(wú)修改的情況下)赎离,no-store才是真正的不進(jìn)行緩存逛犹。

請(qǐng)求中cache-control 中的它可選的值:

20180921155944100.png

在響應(yīng)中使用Cache-Control 時(shí),它可選的值有:


2018092116013247.png

對(duì)比緩存:

  • 1梁剔、 Last-Modified & If-Modified-Since

服務(wù)端再返回資源的時(shí)候虽画,會(huì)將該資源修改的時(shí)間 Last-Modified 返回給客戶端,然后客戶端下次再請(qǐng)求的時(shí)候荣病,通過(guò)If-Modified-Since或者If-Unmodified-Since帶上Last-Modified码撰,服務(wù)端檢查該時(shí)間是否與服務(wù)器的最后修改時(shí)間一致:
如果一致,則返回304狀態(tài)碼个盆,不返回資源脖岛;
如果不一致則返回200和修改后的資源,并帶上新的時(shí)間

  • 2颊亮、 ETag & If-None-Match

Etag : 服務(wù)器響應(yīng)請(qǐng)求時(shí)鸡岗,告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器決定)

If-None-Match:
再次請(qǐng)求服務(wù)器時(shí)魏宽,通過(guò)此字段通知服務(wù)器客戶段緩存數(shù)據(jù)的唯一標(biāo)識(shí)稍途。
服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-None-Match 則與被請(qǐng)求資源的唯一標(biāo)識(shí)進(jìn)行比對(duì),
不同格遭,說(shuō)明資源又被改動(dòng)過(guò),則響應(yīng)整片資源內(nèi)容揣苏,返回狀態(tài)碼200悯嗓;
相同,說(shuō)明資源無(wú)新修改卸察,則響應(yīng)HTTP 304脯厨,告知瀏覽器繼續(xù)使用所保存的cache

如果 文件的最后修改時(shí)間變了,但內(nèi)容沒(méi)變坑质。對(duì)于這樣的情況合武,我們可以使用etag來(lái)處理。
服務(wù)器通過(guò)某個(gè)算法對(duì)資源進(jìn)行計(jì)算涡扼,取得一串值(類似于文件的md5值)稼跳,之后將該值通過(guò)etag返回給客戶端,客戶端下次請(qǐng)求時(shí)通過(guò)If-None-Match或If-Match帶上該值吃沪,服務(wù)器對(duì)該值進(jìn)行對(duì)比校驗(yàn):如果一致則不要返回資源汤善。

請(qǐng)求報(bào)文中有條件請(qǐng)求頭字段。if-Modified-Since 的值是第一次報(bào)文中 last-modified 的值票彪; if-None-Match 的值是第一次報(bào)文中 etag 的值红淡。

既生Last-Modified 何生Etag?

HTTP1.1中Etag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問(wèn)題:

1、Last-Modified標(biāo)注的最后修改只能精確到秒級(jí)降铸,如果某些文件在1秒鐘以內(nèi)在旱,被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的修改時(shí)間
2推掸、如果某些文件會(huì)被定期生成桶蝎,當(dāng)有時(shí)內(nèi)容并沒(méi)有任何變化,但Last-Modified卻改變了终佛,導(dǎo)致文件沒(méi)法使用緩存
3、Etag是服務(wù)器自動(dòng)生成或者由開(kāi)發(fā)者生成的對(duì)應(yīng)資源在服務(wù)器端的唯一標(biāo)識(shí)符雾家,能夠更加準(zhǔn)確的控制緩存铃彰。Last-Modified與ETag是可以一起使用的,服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag芯咧,一致的情況下牙捉,才會(huì)繼續(xù)比對(duì)Last-Modified,最后才決定是否返回304

20180306185346314583481.png

1敬飒、當(dāng)?shù)谝淮握?qǐng)求某一個(gè)文件的時(shí)候邪铲,就會(huì)傳遞回來(lái)一個(gè)Last-Modified 字段,其內(nèi)容是這個(gè)文件的修改時(shí)間无拗。
2带到、當(dāng)這個(gè)文件緩存過(guò)期,瀏覽器又向服務(wù)器請(qǐng)求這個(gè)文件的時(shí)候英染,會(huì)自動(dòng)帶一個(gè)請(qǐng)求頭字段If-Modified-Since揽惹,其值是上一次傳遞過(guò)來(lái)的Last-Modified的值被饿,
3、拿這個(gè)值去和服務(wù)器中現(xiàn)在這個(gè)文件的最后修改時(shí)間做對(duì)比搪搏,如果相等狭握,那么就不會(huì)重新拉取這個(gè)文件了,返回304讓瀏覽器讀過(guò)期緩存疯溺。如果不相等就重新拉取论颅。

首部字段.png

用戶行為對(duì)緩存影響:

所謂瀏覽器的行為,指的就是用戶在瀏覽器如何操作時(shí)囱嫩,會(huì)觸發(fā)怎樣的緩存策略恃疯。主要有 3 種:

  • 打開(kāi)網(wǎng)頁(yè),地址欄輸入地址: 查找 disk cache 中是否有匹配挠说。如有則使用澡谭;如沒(méi)有則發(fā)送網(wǎng)絡(luò)請(qǐng)求。

  • 普通刷新 (F5):因?yàn)?TAB 并沒(méi)有關(guān)閉损俭,因此 memory cache 是可用的蛙奖,會(huì)被優(yōu)先使用(如果匹配的話)。其次才是 disk cache杆兵。

  • 強(qiáng)制刷新 (Ctrl + F5):瀏覽器不使用緩存雁仲,因此發(fā)送的請(qǐng)求頭部均帶有 Cache-control: no-cache(為了兼容,還帶了 Pragma: no-cache)琐脏。服務(wù)器直接返回 200 和最新內(nèi)容攒砖。

用戶行為.png

DNS

DNS是域名解析系統(tǒng) Domain Name System:

就像 IP 地址必須轉(zhuǎn)換成 MAC 地址才能訪問(wèn)主機(jī)一樣,域名也必須要轉(zhuǎn)換成 IP 地址日裙,這個(gè)過(guò)程就是“域名解析”吹艇。

https://www.baidu.com/ 中‘www’ 表示萬(wàn)維網(wǎng)服務(wù);‘baidu’ 是主機(jī)名昂拂;
極客時(shí)間的域名“time.geekbang.org”受神,這里的“org”就是頂級(jí)域名,“geekbang”是二級(jí)域名格侯,“time”則是主機(jī)名

DNS 的核心系統(tǒng)是一個(gè)三層的樹(shù)狀鼻听、分布式服務(wù),基本對(duì)應(yīng)域名的結(jié)構(gòu):

1联四、根域名服務(wù)器(Root DNS Server):管理頂級(jí)域名服務(wù)器撑碴,返回“com”“net”“cn”等頂級(jí)域名服務(wù)器的 IP 地址;
2朝墩、頂級(jí)域名服務(wù)器(Top-level DNS Server):管理各自域名下的權(quán)威域名服務(wù)器醉拓,比如 com 頂級(jí)域名服務(wù)器可以返回 apple.com 域名服務(wù)器的 IP 地址;
3、權(quán)威域名服務(wù)器(Authoritative DNS Server):管理自己域名下主機(jī)的 IP 地址廉嚼,比如 apple.com 權(quán)威域名服務(wù)器可以返回 www.apple.com 的 IP 地址玫镐。

DNS工作原理

  • 分布式層次數(shù)據(jù)庫(kù)
    • 根DNS服務(wù)器
    • TLD頂級(jí)域(DNS)服務(wù)器 com org edu
    • 權(quán)威DNS服務(wù)器
    • 本地DNS服務(wù)器與三個(gè)服務(wù)器的查詢關(guān)系 從請(qǐng)求主機(jī)向本地DNS服務(wù)器發(fā)出
      的查詢是遞歸查詢,從本地DNS服務(wù)器向其他三種服務(wù)器查詢?yōu)榈樵?/li>

比如: 你訪問(wèn)你要訪問(wèn)“www.apple.com”怠噪,
1恐似、問(wèn)根域名服務(wù)器,它會(huì)告訴你“com”頂級(jí)域名服務(wù)器的地址傍念;
2矫夷、訪問(wèn)“com”頂級(jí)域名服務(wù)器,它再告訴你“apple.com”域名服務(wù)器的地址憋槐;
3双藕、最后訪問(wèn)“apple.com”域名服務(wù)器,就得到了“www.apple.com”的地址阳仔。

DNS.png

DNS 緩存:

1忧陪、 瀏覽器先檢查自身緩存中有沒(méi)有被解析過(guò)的這個(gè)域名對(duì)應(yīng)的ip地址,如果有近范,解析結(jié)束嘶摊。

2、操作系統(tǒng)里也會(huì)對(duì) DNS 解析結(jié)果做緩存评矩,如果你之前訪問(wèn)過(guò)“www.apple.com”叶堆,那么下一次在瀏覽器里再輸入這個(gè)網(wǎng)址的時(shí)候就不會(huì)再跑到 DNS 那里去問(wèn)了,直接在操作系統(tǒng)里就可以拿到 IP 地址斥杜。

3虱颗、操作系統(tǒng)里還有一個(gè)特殊的“主機(jī)映射”文件,通常是一個(gè)可編輯的文本蔗喂,在 Linux 里是“/etc/hosts”忘渔,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”,如果操作系統(tǒng)在緩存里找不到 DNS 記錄缰儿,就會(huì)找這個(gè)文件畦粮。

4、如果至此還沒(méi)有命中域名返弹,才會(huì)真正的請(qǐng)求本地域名服務(wù)器(LDNS)來(lái)解析這個(gè)域名锈玉,這臺(tái)服務(wù)器一般在你的城市的某個(gè)角落爪飘。

5义起、如果LDNS仍然沒(méi)有命中,就直接跳到Root Server 域名服務(wù)器請(qǐng)求解析

6师崎、根域名服務(wù)器返回給本地域服務(wù)器 一個(gè)所查詢域的主域名服務(wù)器(gTLD Server默终,國(guó)際頂尖域名服務(wù)器,如.com .cn .org等)地址;

7齐蔽、此時(shí)LDNS再發(fā)送請(qǐng)求給上一步返回的gTLD

8两疚、接受請(qǐng)求的gTLD查找并返回這個(gè)域名對(duì)應(yīng)的Name Server的地址,這個(gè)Name Server就是網(wǎng)站注冊(cè)的域名服務(wù)器

9含滴、Name Server根據(jù)映射關(guān)系表找到目標(biāo)ip诱渤,返回給LDNS

10、 LDNS緩存這個(gè)域名和對(duì)應(yīng)的ip

DNS 域名解析.jpeg
WechatIMG591.png

域名解析可以返回多個(gè) IP 地址谈况,所以一個(gè)域名可以對(duì)應(yīng)多臺(tái)主機(jī)勺美,客戶端收到多個(gè) IP 地址后,就可以自己使用輪詢算法依次向服務(wù)器發(fā)起請(qǐng)求碑韵,實(shí)現(xiàn)負(fù)載均衡.

如果輸入 一個(gè)不存在的域名:
1赡茸、首先查詢?yōu)g覽器緩存:一段時(shí)間內(nèi)訪問(wèn)過(guò)的一些網(wǎng)址的DNS信息,不同瀏覽器保存的時(shí)常不同
2祝闻、如果沒(méi)有找到對(duì)應(yīng)的記錄占卧,這個(gè)時(shí)候?yàn)g覽器會(huì)嘗試調(diào)用操作系統(tǒng)緩存來(lái)繼續(xù)查找這個(gè)網(wǎng)址的對(duì)應(yīng)DNS信息
3、host文件
4联喘、根域名 頂級(jí)域名
5华蜒、 返回失敗

TCP連接

TCP報(bào)文段結(jié)構(gòu)

  • 源端口號(hào)+目的端口號(hào)
  • 序號(hào)
  • 確認(rèn)號(hào)
  • 首部長(zhǎng)度+保留未用+URG+ACK+PSH+RST+SYN+FIN+接收窗口
  • 因特網(wǎng)校驗(yàn)和+緊急數(shù)據(jù)指針
  • 選項(xiàng)
  • 數(shù)據(jù)

總結(jié)

http請(qǐng)求.png

Http 緩存
HTTP 緩存控制小結(jié)
徹底弄懂HTTP緩存機(jī)制及原理
瀏覽器緩存機(jī)制剖析
前端緩存
瀏覽器緩存機(jī)制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者耸袜。
  • 序言:七十年代末友多,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子堤框,更是在濱河造成了極大的恐慌域滥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜈抓,死亡現(xiàn)場(chǎng)離奇詭異启绰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)沟使,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門委可,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人腊嗡,你說(shuō)我怎么就攤上這事着倾。” “怎么了燕少?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵卡者,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我客们,道長(zhǎng)崇决,這世上最難降的妖魔是什么材诽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮恒傻,結(jié)果婚禮上脸侥,老公的妹妹穿的比我還像新娘。我一直安慰自己盈厘,他們只是感情好睁枕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沸手,像睡著了一般譬重。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罐氨,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天臀规,我揣著相機(jī)與錄音,去河邊找鬼栅隐。 笑死塔嬉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的租悄。 我是一名探鬼主播谨究,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泣棋!你這毒婦竟也來(lái)了胶哲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潭辈,失蹤者是張志新(化名)和其女友劉穎鸯屿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體把敢,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寄摆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了修赞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婶恼。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖柏副,靈堂內(nèi)的尸體忽然破棺而出勾邦,到底是詐尸還是另有隱情,我是刑警寧澤割择,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布眷篇,位于F島的核電站,受9級(jí)特大地震影響锨推,放射性物質(zhì)發(fā)生泄漏铅歼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一换可、第九天 我趴在偏房一處隱蔽的房頂上張望椎椰。 院中可真熱鬧,春花似錦沾鳄、人聲如沸慨飘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓤的。三九已至,卻和暖如春吞歼,著一層夾襖步出監(jiān)牢的瞬間圈膏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工篙骡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稽坤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓糯俗,卻偏偏與公主長(zhǎng)得像尿褪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子得湘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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