從輸入U(xiǎn)RL到頁面加載發(fā)生了什么

總體來說分為以下幾個(gè)過程:

  1. DNS解析

  2. TCP連接

  3. 發(fā)送HTTP請求

  4. 服務(wù)器處理請求并返回HTTP報(bào)文

  5. 瀏覽器解析渲染頁面

  6. 連接結(jié)束

具體過程

DNS解析

DNS解析的過程就是尋找哪臺(tái)機(jī)器上有你需要資源的過程吊说。當(dāng)你在瀏覽器中輸入一個(gè)地址時(shí)酥艳,例如www.baidu.com,其實(shí)不是百度網(wǎng)站真正意義上的地址仪搔。互聯(lián)網(wǎng)上每一臺(tái)計(jì)算機(jī)的唯一標(biāo)識(shí)是它的IP地址欣舵,但是IP地址并不方便記憶止剖。用戶更喜歡用方便記憶的網(wǎng)址去尋找互聯(lián)網(wǎng)上的其它計(jì)算機(jī),也就是上面提到的百度的網(wǎng)址馍盟。所以互聯(lián)網(wǎng)設(shè)計(jì)者需要在用戶的方便性與可用性方面做一個(gè)權(quán)衡于置,這個(gè)權(quán)衡就是一個(gè)網(wǎng)址到IP地址的轉(zhuǎn)換,這個(gè)過程就是DNS解析。它實(shí)際上充當(dāng)了一個(gè)翻譯的角色八毯,實(shí)現(xiàn)了網(wǎng)址到IP地址的轉(zhuǎn)換搓侄。網(wǎng)址到IP地址轉(zhuǎn)換的過程是如何進(jìn)行的?

解析過程

DNS解析是一個(gè)遞歸查詢的過程。

image

上述圖片是查找www.google.com的IP地址過程话速。首先在本地域名服務(wù)器中查詢IP地址讶踪,如果沒有找到的情況下,本地域名服務(wù)器會(huì)向根域名服務(wù)器發(fā)送一個(gè)請求泊交,如果根域名服務(wù)器也不存在該域名時(shí)乳讥,本地域名會(huì)向com頂級(jí)域名服務(wù)器發(fā)送一個(gè)請求,依次類推下去廓俭。直到最后本地域名服務(wù)器得到google的IP地址并把它緩存到本地云石,供下次查詢使用。從上述過程中研乒,可以看出網(wǎng)址的解析是一個(gè)從右向左的過程: com -> google.com -> www.google.com汹忠。但是你是否發(fā)現(xiàn)少了點(diǎn)什么,根域名服務(wù)器的解析過程呢雹熬?事實(shí)上宽菜,真正的網(wǎng)址是www.google.com.,并不是我多打了一個(gè).竿报,這個(gè).對(duì)應(yīng)的就是根域名服務(wù)器赋焕,默認(rèn)情況下所有的網(wǎng)址的最后一位都是.,既然是默認(rèn)情況下仰楚,為了方便用戶隆判,通常都會(huì)省略,瀏覽器在請求DNS的時(shí)候會(huì)自動(dòng)加上僧界,所有網(wǎng)址真正的解析過程為: . -> .com -> google.com. -> www.google.com.侨嘀。

DNS優(yōu)化

了解了DNS的過程,可以為我們帶來哪些捂襟?上文中請求到google的IP地址時(shí)咬腕,經(jīng)歷了8個(gè)步驟,這個(gè)過程中存在多個(gè)請求(同時(shí)存在UDP和TCP請求葬荷,為什么有兩種請求方式涨共,請自行查找)。如果每次都經(jīng)過這么多步驟宠漩,是否太耗時(shí)間举反?如何減少該過程的步驟呢?那就是DNS緩存扒吁。

DNS緩存

DNS存在著多級(jí)緩存火鼻,從離瀏覽器的距離排序的話,有以下幾種: 瀏覽器緩存,系統(tǒng)緩存魁索,路由器緩存融撞,IPS服務(wù)器緩存,根域名服務(wù)器緩存粗蔚,頂級(jí)域名服務(wù)器緩存尝偎,主域名服務(wù)器緩存。

  • 在你的chrome瀏覽器中輸入:chrome://dns/鹏控,你可以看到chrome瀏覽器的DNS緩存冬念。

  • 系統(tǒng)緩存主要存在/etc/hosts(Linux系統(tǒng))中:

image
  • ...
DNS負(fù)載均衡

不知道大家有沒有思考過一個(gè)問題: DNS返回的IP地址是否每次都一樣?如果每次都一樣是否說明你請求的資源都位于同一臺(tái)機(jī)器上面牧挣,那么這臺(tái)機(jī)器需要多高的性能和儲(chǔ)存才能滿足億萬請求呢急前?其實(shí)真實(shí)的互聯(lián)網(wǎng)世界背后存在成千上百臺(tái)服務(wù)器,大型的網(wǎng)站甚至更多瀑构。但是在用戶的眼中裆针,它需要的只是處理他的請求,哪臺(tái)機(jī)器處理請求并不重要寺晌。DNS可以返回一個(gè)合適的機(jī)器的IP給用戶世吨,例如可以根據(jù)每臺(tái)機(jī)器的負(fù)載量,該機(jī)器離用戶地理位置的距離等等呻征,這種過程就是DNS負(fù)載均衡耘婚,又叫做DNS重定向。大家耳熟能詳?shù)腃DN(Content Delivery Network)就是利用DNS的重定向技術(shù)陆赋,DNS服務(wù)器會(huì)返回一個(gè)跟用戶最接近的點(diǎn)的IP地址給用戶沐祷,CDN節(jié)點(diǎn)的服務(wù)器負(fù)責(zé)響應(yīng)用戶的請求,提供所需的內(nèi)容攒岛。在這里打個(gè)免費(fèi)的廣告赖临,我平時(shí)使用的比較多的是七牛云的CDN(免費(fèi))儲(chǔ)存圖片,作為我個(gè)人博客的圖床使用灾锯。

TCP連接

HTTP協(xié)議是使用TCP作為其傳輸層協(xié)議的兢榨,當(dāng)TCP出現(xiàn)瓶頸時(shí),HTTP也會(huì)受到影響顺饮。但由于TCP優(yōu)化這一塊我平常接觸的并不是很多吵聪,再加上大學(xué)時(shí)的計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)基本上忘完,所以這一部分我也就不在這里分析了兼雄。

HTTPS協(xié)議

我不知道把HTTPS放在這個(gè)部分是否合適吟逝,但是放在這里好像又說的過去。HTTP報(bào)文是包裹在TCP報(bào)文中發(fā)送的君旦,服務(wù)器端收到TCP報(bào)文時(shí)會(huì)解包提取出HTTP報(bào)文澎办。但是這個(gè)過程中存在一定的風(fēng)險(xiǎn)嘲碱,HTTP報(bào)文是明文金砍,如果中間被截取的話會(huì)存在一些信息泄露的風(fēng)險(xiǎn)局蚀。那么在進(jìn)入TCP報(bào)文之前對(duì)HTTP做一次加密就可以解決這個(gè)問題了。HTTPS協(xié)議的本質(zhì)就是HTTP + SSL(or TLS)恕稠。在HTTP報(bào)文進(jìn)入TCP報(bào)文之前琅绅,先使用SSL對(duì)HTTP報(bào)文進(jìn)行加密。從網(wǎng)絡(luò)的層級(jí)結(jié)構(gòu)看它位于HTTP協(xié)議與TCP協(xié)議之間鹅巍。

image

HTTPS過程

HTTPS在傳輸數(shù)據(jù)之前需要客戶端與服務(wù)器進(jìn)行一個(gè)握手(TLS/SSL握手)千扶,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。TLS/SSL使用了非對(duì)稱加密骆捧,對(duì)稱加密以及hash等澎羞。具體過程請參考經(jīng)典的阮一峰先生的博客TLS/SSL握手過程
HTTPS相比于HTTP敛苇,雖然提供了安全保證妆绞,但是勢必會(huì)帶來一些時(shí)間上的損耗,如握手和加密等過程枫攀,是否使用HTTPS需要根據(jù)具體情況在安全和性能方面做出權(quán)衡括饶。

HTTP請求

其實(shí)這部分又可以稱為前端工程師眼中的HTTP,它主要發(fā)生在客戶端来涨。發(fā)送HTTP請求的過程就是構(gòu)建HTTP請求報(bào)文并通過TCP協(xié)議中發(fā)送到服務(wù)器指定端口(HTTP協(xié)議80/8080, HTTPS協(xié)議443)图焰。HTTP請求報(bào)文是由三部分組成:

請求行,

請求報(bào)頭請求正文

請求行

格式如下:
Method Request-URL HTTP-Version CRLF

eg: GET index.html HTTP/1.1

常用的方法有: GET, POST, PUT, DELETE, OPTIONS, HEAD蹦掐。

TODO:

  • GET和POST有什么區(qū)別技羔?
    傳送門

請求報(bào)頭

請求報(bào)頭允許客戶端向服務(wù)器傳遞請求的附加信息和客戶端自身的信息。
PS: 客戶端不一定特指瀏覽器卧抗,有時(shí)候也可使用Linux下的CURL命令以及HTTP客戶端測試工具等堕阔。
常見的請求報(bào)頭有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。

image

上圖是使用Chrome開發(fā)者工具截取的對(duì)百度的HTTP請求以及響應(yīng)報(bào)文颗味,從圖中可以看出超陆,請求報(bào)頭中使用了Accept, Accept-Encoding, Accept-Language, Cache-Control, Connection, Cookie等字段。Accept用于指定客戶端用于接受哪些類型的信息浦马,Accept-Encoding與Accept類似时呀,它用于指定接受的編碼方式。Connection設(shè)置為Keep-alive用于告訴客戶端本次HTTP請求結(jié)束之后并不需要關(guān)閉TCP連接晶默,這樣可以使下次HTTP請求使用相同的TCP通道谨娜,節(jié)省TCP連接建立的時(shí)間。

請求正文

當(dāng)使用POST, PUT等方法時(shí)磺陡,通常需要客戶端向服務(wù)器傳遞數(shù)據(jù)趴梢。這些數(shù)據(jù)就儲(chǔ)存在請求正文中漠畜。在請求包頭中有一些與請求正文相關(guān)的信息,例如: 現(xiàn)在的Web應(yīng)用通常采用Rest架構(gòu)坞靶,請求的數(shù)據(jù)格式一般為json憔狞。這時(shí)就需要設(shè)置Content-Type: application/json。

服務(wù)器處理請求并返回HTTP報(bào)文

自然而然這部分對(duì)應(yīng)的就是后端工程師眼中的HTTP彰阴。后端從在固定的端口接收到TCP報(bào)文開始瘾敢,這一部分對(duì)應(yīng)于編程語言中的socket。它會(huì)對(duì)TCP連接進(jìn)行處理尿这,對(duì)HTTP協(xié)議進(jìn)行解析簇抵,并按照報(bào)文格式進(jìn)一步封裝成HTTP Request對(duì)象,供上層使用射众。這一部分工作一般是由Web服務(wù)器去進(jìn)行碟摆,我使用過的Web服務(wù)器有Tomcat, Jetty和Netty等等。

HTTP響應(yīng)報(bào)文也是由三部分組成:

狀態(tài)碼,

響應(yīng)報(bào)頭響應(yīng)報(bào)文叨橱。

狀態(tài)碼

狀態(tài)碼是由3位數(shù)組成典蜕,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值:

  • 1xx:指示信息–表示請求已接收雏逾,繼續(xù)處理嘉裤。

  • 2xx:成功–表示請求已被成功接收、理解栖博、接受屑宠。

  • 3xx:重定向–要完成請求必須進(jìn)行更進(jìn)一步的操作。

  • 4xx:客戶端錯(cuò)誤–請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)仇让。

  • 5xx:服務(wù)器端錯(cuò)誤–服務(wù)器未能實(shí)現(xiàn)合法的請求典奉。
    平時(shí)遇到比較常見的狀態(tài)碼有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500(分別表示什么請自行查找)。
    狀態(tài)碼傳送門

TODO:

  • 301和302有什么區(qū)別丧叽?
    301重定向是永久的重定向卫玖,搜索引擎在抓取新內(nèi)容的同時(shí)也將舊的網(wǎng)址替換為重定向之后的網(wǎng)址。
    302重定向是臨時(shí)的重定向踊淳,搜索引擎會(huì)抓取新的內(nèi)容而保留舊的網(wǎng)址假瞬。因?yàn)榉?wù)器返回302代碼,搜索引擎認(rèn)為新的網(wǎng)址只是暫時(shí)的迂尝。

  • HTTP緩存

image

該圖是本公司對(duì)狀態(tài)碼的一個(gè)總結(jié)脱茉,繪制而成的status code map,請大家參考垄开。

響應(yīng)報(bào)頭

常見的響應(yīng)報(bào)頭字段有: Server, Connection...琴许。

響應(yīng)報(bào)文

服務(wù)器返回給瀏覽器的文本信息,通常HTML, CSS, JS, 圖片等文件就放在這一部分溉躲。

瀏覽器解析渲染頁面

瀏覽器在收到HTML,CSS,JS文件后榜田,它是如何把頁面呈現(xiàn)到屏幕上的益兄?下圖對(duì)應(yīng)的就是WebKit渲染的過程。

image

瀏覽器是一個(gè)邊解析邊渲染的過程箭券。首先瀏覽器解析HTML文件構(gòu)建DOM樹净捅,然后解析CSS文件構(gòu)建渲染樹,等到渲染樹構(gòu)建完成后邦鲫,瀏覽器開始布局渲染樹并將其繪制到屏幕上灸叼。這個(gè)過程比較復(fù)雜神汹,涉及到兩個(gè)概念: reflow(回流)和repain(重繪)庆捺。DOM節(jié)點(diǎn)中的各個(gè)元素都是以盒模型的形式存在,這些都需要瀏覽器去計(jì)算其位置和大小等屁魏,這個(gè)過程稱為relow;當(dāng)盒模型的位置,大小以及其他屬性滔以,如顏色,字體,等確定下來之后,瀏覽器便開始繪制內(nèi)容氓拼,這個(gè)過程稱為repain你画。頁面在首次加載時(shí)必然會(huì)經(jīng)歷reflow和repain。reflow和repain過程是非常消耗性能的桃漾,尤其是在移動(dòng)設(shè)備上坏匪,它會(huì)破壞用戶體驗(yàn),有時(shí)會(huì)造成頁面卡頓撬统。所以我們應(yīng)該盡可能少的減少reflow和repain适滓。

image

JS的解析是由瀏覽器中的JS解析引擎完成的。JS是單線程運(yùn)行恋追,也就是說凭迹,在同一個(gè)時(shí)間內(nèi)只能做一件事,所有的任務(wù)都需要排隊(duì)苦囱,前一個(gè)任務(wù)結(jié)束嗅绸,后一個(gè)任務(wù)才能開始。但是又存在某些任務(wù)比較耗時(shí)撕彤,如IO讀寫等鱼鸠,所以需要一種機(jī)制可以先執(zhí)行排在后面的任務(wù),這就是:同步任務(wù)(synchronous)和異步任務(wù)(asynchronous)羹铅。JS的執(zhí)行機(jī)制就可以看做是一個(gè)主線程加上一個(gè)任務(wù)隊(duì)列(task queue)蚀狰。同步任務(wù)就是放在主線程上執(zhí)行的任務(wù),異步任務(wù)是放在任務(wù)隊(duì)列中的任務(wù)睦裳。所有的同步任務(wù)在主線程上執(zhí)行造锅,形成一個(gè)執(zhí)行棧;異步任務(wù)有了運(yùn)行結(jié)果就會(huì)在任務(wù)隊(duì)列中放置一個(gè)事件;腳本運(yùn)行時(shí)先依次運(yùn)行執(zhí)行棧廉邑,然后會(huì)從任務(wù)隊(duì)列里提取事件哥蔚,運(yùn)行任務(wù)隊(duì)列中的任務(wù)倒谷,這個(gè)過程是不斷重復(fù)的,所以又叫做事件循環(huán)(Event loop)糙箍。

瀏覽器在解析過程中渤愁,如果遇到請求外部資源時(shí),如圖像,iconfont,JS等深夯。瀏覽器將重復(fù)1-6過程下載該資源抖格。請求過程是異步的,并不會(huì)影響HTML文檔進(jìn)行加載咕晋,但是當(dāng)文檔加載過程中遇到JS文件雹拄,HTML文檔會(huì)掛起渲染過程,不僅要等到文檔中JS文件加載完畢還要等待解析執(zhí)行完畢掌呜,才會(huì)繼續(xù)HTML的渲染過程滓玖。原因是因?yàn)镴S有可能修改DOM結(jié)構(gòu),這就意味著JS執(zhí)行完成前质蕉,后續(xù)所有資源的下載是沒有必要的势篡,這就是JS阻塞后續(xù)資源下載的根本原因。CSS文件的加載不影響JS文件的加載模暗,但是卻影響JS文件的執(zhí)行禁悠。JS代碼執(zhí)行前瀏覽器必須保證CSS文件已經(jīng)下載并加載完畢。

Web優(yōu)化

上面部分主要介紹了一次完整的請求對(duì)應(yīng)的過程兑宇,了解該過程的目的無非就是為了Web優(yōu)化碍侦。在談到Web優(yōu)化之前,我們回到一個(gè)更原始的問題顾孽,Web前端的本質(zhì)是什么祝钢。我的理解是: 將信息快速并友好的展示給用戶并能夠與用戶進(jìn)行交互∪艉瘢快速的意思就是在盡可能短的時(shí)間內(nèi)完成頁面的加載拦英,試想一下當(dāng)你在淘寶購買東西的時(shí)候,淘寶頁面加載了10幾秒才顯示出物品测秸,這個(gè)時(shí)候你還有心情去購買嗎疤估?怎么快速的完成頁面的加載呢?優(yōu)雅的學(xué)院派雅虎給出了常用的一些手段霎冯,也就是我們熟悉的雅虎34條軍規(guī)铃拇。這34軍規(guī)實(shí)際上就是圍繞請求過程進(jìn)行的一些優(yōu)化方式。

如何盡快的加載資源沈撞?答案就是能不從網(wǎng)絡(luò)中加載的資源就不從網(wǎng)絡(luò)中加載慷荔,當(dāng)我們合理使用緩存,將資源放在瀏覽器端缠俺,這是最快的方式显晶。如果資源必須從網(wǎng)絡(luò)中加載贷岸,則要考慮縮短連接時(shí)間,即DNS優(yōu)化部分;減少響應(yīng)內(nèi)容大小磷雇,即對(duì)內(nèi)容進(jìn)行壓縮偿警。另一方面,如果加載的資源數(shù)比較少的話唯笙,也可以快速的響應(yīng)用戶螟蒸。當(dāng)資源到達(dá)瀏覽器之后,瀏覽器開始進(jìn)行解析渲染崩掘,瀏覽器中最耗時(shí)的部分就是reflow七嫌,所以圍繞這一部分就是考慮如何減少reflow的次數(shù)。

總結(jié)

寫這篇文章真的非常糾結(jié)呢堰,前前后后斷斷續(xù)續(xù)寫了兩個(gè)星期抄瑟,因?yàn)樯婕暗降臇|西比較多凡泣,再加上有些東西記憶的沒有那么清晰了枉疼,所以不好下筆。所涉及到的大部分內(nèi)容鞋拟,也基本上是一筆帶過骂维,只是給讀者一個(gè)淺顯的認(rèn)知,當(dāng)遇到相關(guān)的問題時(shí)贺纲,知道如何去查詢航闺。大家可以當(dāng)成一篇Web開發(fā)的科普類文章去閱讀。

另外在這里為公司的產(chǎn)品打個(gè)廣告猴誊,在Chrome store中搜索DHC潦刃,這是一款超級(jí)好用的Web客戶端工具,囊括了很多的功能: 報(bào)文分析懈叹,API測試等等乖杠,可謂說是WEB工程師必備工具。

HTTP狀態(tài)碼

100  Continue  繼續(xù)澄成,一般在發(fā)送post請求時(shí)胧洒,已發(fā)送了http header之后服務(wù)端將返回此信息,表示確認(rèn)墨状,之后發(fā)送具體參數(shù)信息

200  OK   正常返回信息

201  Created  請求成功并且服務(wù)器創(chuàng)建了新的資源

202  Accepted  服務(wù)器已接受請求卫漫,但尚未處理

301  Moved Permanently  請求的網(wǎng)頁已永久移動(dòng)到新位置。

302 Found  臨時(shí)性重定向肾砂。

303 See Other  臨時(shí)性重定向列赎,且總是使用 GET 請求新的 URI。

304  Not Modified  自從上次請求后镐确,請求的網(wǎng)頁未修改過包吝。

400 Bad Request  服務(wù)器無法理解請求的格式肛根,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請求。

401 Unauthorized  請求未授權(quán)漏策。

403 Forbidden  禁止訪問派哲。

404 Not Found  找不到如何與 URI 相匹配的資源。

500 Internal Server Error  最常見的服務(wù)器端錯(cuò)誤掺喻。

503 Service Unavailable 服務(wù)器端暫時(shí)無法處理請求(可能是過載或維護(hù))芭届。

鏈接:http://www.reibang.com/p/a877684a4cdd

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市感耙,隨后出現(xiàn)的幾起案子褂乍,更是在濱河造成了極大的恐慌,老刑警劉巖即硼,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逃片,死亡現(xiàn)場離奇詭異,居然都是意外死亡只酥,警方通過查閱死者的電腦和手機(jī)褥实,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裂允,“玉大人损离,你說我怎么就攤上這事【啵” “怎么了僻澎?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長十饥。 經(jīng)常有香客問我窟勃,道長,這世上最難降的妖魔是什么逗堵? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任秉氧,我火速辦了婚禮,結(jié)果婚禮上砸捏,老公的妹妹穿的比我還像新娘谬运。我一直安慰自己,他們只是感情好垦藏,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布梆暖。 她就那樣靜靜地躺著,像睡著了一般掂骏。 火紅的嫁衣襯著肌膚如雪轰驳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音级解,去河邊找鬼冒黑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勤哗,可吹牛的內(nèi)容都是我干的抡爹。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼芒划,長吁一口氣:“原來是場噩夢啊……” “哼冬竟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起民逼,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤泵殴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拼苍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笑诅,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年疮鲫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吆你。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棚点,死狀恐怖早处,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘫析,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布默责,位于F島的核電站贬循,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桃序。R本人自食惡果不足惜杖虾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媒熊。 院中可真熱鬧奇适,春花似錦、人聲如沸芦鳍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柠衅。三九已至皮仁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贷祈。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工趋急, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人势誊。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓呜达,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粟耻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闻丑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361