2018-09-17

http協(xié)議

五層模型介紹

  • 物理層:主要作用是定義物理設(shè)備如何傳輸數(shù)據(jù)夹供,網(wǎng)線,光纖
  • 數(shù)據(jù)鏈路層:在通信實體間建立數(shù)據(jù)鏈路鏈接
  • 網(wǎng)絡(luò)層:為數(shù)據(jù)在節(jié)點之間傳輸創(chuàng)建邏輯鏈路
  • 傳輸層:主要有兩個協(xié)議 TCPIP 和 UDP 哀军,它向用戶提供了可靠的端到端的服務(wù)沉眶。
  • 建立起了自己電腦到百度服務(wù)器的鏈接,它們兩端如何去傳輸數(shù)據(jù)杉适,它的傳輸數(shù)據(jù)的方式 谎倔,都是在這層定義,傳輸層向高層屏蔽了下層數(shù)據(jù)通信的細節(jié)
  • 應(yīng)用層: 為應(yīng)用軟件提供了服務(wù) http / ftp 是構(gòu)建于TCP 協(xié)議之上猿推,屏蔽了網(wǎng)絡(luò)傳輸相關(guān)細節(jié)

解析:

  • 經(jīng)典五層模型:
  • 1.物理層:一些硬件之類
  • 2.數(shù)據(jù)鏈路層:0101之類的
  • 3.網(wǎng)絡(luò)層:
  • 4.傳輸層:為用戶提供end-to-end服務(wù),向高層屏蔽了下層數(shù)據(jù)通信的細節(jié)
  • 5.應(yīng)用層(http):構(gòu)建于TCP之上

HTTP協(xié)議的發(fā)展歷史

第一個版本 HTTP / 0.9

  • 只有一個命令 GET
  • 沒有HEADER 等描述數(shù)據(jù)的信息
  • 服務(wù)器發(fā)送完畢就關(guān)閉

第二個版本 HTTP / 1.0

  • 增加了很多命令
  • 增加了status code 和 header
  • 多字符集支持片习、多部分發(fā)送、權(quán)限蹬叭、緩存 等等
    • 1藕咏,增加命令比如POST、PUT秽五、Header
    • 2孽查,增加status code和header內(nèi)容,
      • (1)status code用來描述服務(wù)端處理某一個請求之后筝蚕,它的一個狀態(tài)卦碾,
      • (2)header铺坞,對應(yīng)的是起宽,不管是發(fā)送還是請求的相關(guān)的一些數(shù)據(jù)洲胖,它的描述以及我們對這部分數(shù)據(jù)如何進行操作的一個方法。

第三個版本 HTTP / 1.1

  • 持久鏈接
  • pipleine
  • 增加了 host 和其他一些命令 (在同一個物理服務(wù)器可以同時跑很多服務(wù))

第四個版本 HTTP / 2.0

  • 所以數(shù)據(jù)都是以二進制傳輸
  • 同一個鏈接里面發(fā)送多個請求不在需要按照順序來
  • 頭信息壓縮以及推送等提高效率的功能

  • 1坯沪,弄清楚一個概念绿映,HTTP請求與TCP請求不是一個概念,在同一個TCP請求可以發(fā)送多個HTTP請求腐晾,以前的協(xié)議版本不能這么做叉弦,但是現(xiàn)在HTTP1.1.1里面可以這么做,而且在HTTP2里面是會更大的去優(yōu)化相關(guān)的一些東西藻糖,來提高HTTP傳輸效率以及服務(wù)器的性能淹冰。
  • 2,這邊TCP連接對應(yīng)多個HTTP請求巨柒,而一個HTTP請求肯定在某一個TCP連接里面去定義發(fā)送的樱拴。

HTTP三次握手

  • 為了防止服務(wù)端開始無用的鏈接,網(wǎng)絡(luò)傳輸是有延時的洋满,傳輸過程中防止丟包晶乔,造成重復(fù)創(chuàng)建鏈接,資源浪費牺勾,所以設(shè)置三次握手正罢。為了規(guī)避網(wǎng)絡(luò)傳輸延時。

  • 1.客戶端發(fā)起一個我要連接的數(shù)據(jù)包請求給服務(wù)器驻民,里面會有一個SYN的標志位翻具,標志這是一個創(chuàng)建請求的數(shù)據(jù)包

  • 2.服務(wù)端接收到數(shù)據(jù)包后知道有一個客戶要和它建立鏈接了,然后會開啟一個TCP socket 端口回还,開啟之后返回數(shù)據(jù)給客戶端裆泳,數(shù)據(jù)包含 SYN標志位,ACK= X+1懦趋,Seq=Y

  • 3.客戶端拿到數(shù)據(jù)包后意味著服務(wù)器端允許創(chuàng)建TCP連接晾虑,然后發(fā)送數(shù)據(jù)包 ACK = Y+1,Seq=Z

  • http只有請求和響應(yīng)這個概念仅叫,沒有鏈接這個概念

  • 在http1.0的時候帜篇,在http request的時候,在里面發(fā)起三次握手诫咱,創(chuàng)建TCP鏈接笙隙,然后再發(fā)起請求,請求結(jié)束后則關(guān)閉TCP鏈接

  • 在http1.1的時候坎缭,可以通過申明這個鏈接竟痰,可以保持在那里签钩,后面就不需要三次握手開銷

  • 在http2.0可以請求并發(fā),只需要一個TCP鏈接

  • 第一次握手坏快,用戶向服務(wù)端發(fā)送請求铅檩,SYN=標志位=創(chuàng)建請求的數(shù)據(jù)包,Seq=X為數(shù)字,一般為1莽鸿。

  • 第二次握手昧旨,服務(wù)端返回請求

  • 第三次握手,客戶端再次傳回服務(wù)端

URI,URL和URN

  • URI:統(tǒng)一資源標志符,用來標識互聯(lián)網(wǎng)上的信息資源祥得,包括URL和URN
  • URL:統(tǒng)一資源定位器
  • URN:永久統(tǒng)一資源定位符兔沃,在資源移動后還能被找到

urn作用在于搬動了資源后仍然可以直接找到,相當于面向?qū)ο竺?br> 框架一般都會出現(xiàn)這個概念级及,方便多次調(diào)用的東西都可以理解為urn乒疏,-。
個人理解

完整的URL地址:http://user:pass@host.com:80/path?query=string#hash

  • http:// 協(xié)議
  • user:pass@ 代表訪問資源的身份使用用戶名和密碼
  • host.com 用來定位資源的服務(wù)器在互聯(lián)網(wǎng)中的位置(可以是IP 也可以是 域名)
  • :80 端口饮焦,每臺物理服務(wù)器可以跑很多軟件的web服務(wù)怕吴,端口就是監(jiān)聽物理服務(wù)器上面某個具體的web服務(wù)
  • /path 路由,web 服務(wù)器里面的內(nèi)容可以通過路由進行定位
  • ?query=string 搜索參數(shù)
  • hash 查找文檔的某個片段

HTTP報文格式

HTTP方法

 用來定義對于資源的操作
 常用有GET追驴、POST
 從定義上講有各自的語義

HTTP CODE

定義服務(wù)器對請求的處理結(jié)果
各個區(qū)間的CODE有各自的語義 
好的HTTP服務(wù)可以通過CODE判斷結(jié)果

method :

GET:獲取數(shù)據(jù)
POST:創(chuàng)建數(shù)據(jù)
PUT:更新數(shù)據(jù)
DELETE : 刪除數(shù)據(jù)
  • http方法:用來定義對于資源的操作
  • http code :定義服務(wù)器對請求的處理結(jié)果
  • 100-199代表操作要持續(xù)進行
  • 200-299代表成功
  • 300-399需要重定向
  • 400-499代表請求有問題
  • 500-599服務(wù)器錯誤

CORS跨域請求的限制和解決

  • jsonp實現(xiàn)的原理:瀏覽器允許在某些標簽里面寫路徑加載械哟,是允許跨域的。
  • JSONP是服務(wù)器與客戶端跨源通信的常用方法殿雪,它的基本思想是暇咆,網(wǎng)頁通過添加一個<script>元素,向服務(wù)器請求數(shù)據(jù)丙曙,這種做法不受同源政策限制(亦或者img/src等其他類似訪問link的標簽)爸业。
  • 跨域概念:一般的,只要網(wǎng)站的 協(xié)議名protocol亏镰、 主機host扯旷、 端口號port 這三個中的任意一個不同,網(wǎng)站間的數(shù)據(jù)請求與傳輸便構(gòu)成了跨域調(diào)用索抓。而這是不允許的钧忽,想象一下假如允許的話,那么你登陸銀行網(wǎng)站逼肯,又不小心登陸了一個黑客網(wǎng)站耸黑,黑客網(wǎng)站就可以讀取銀行的cookie進而冒充客戶為所欲為。
  • 跨域原理:請求發(fā)送成功篮幢,服務(wù)器也接受到了大刊,內(nèi)容也已經(jīng)返回了,但瀏覽器在解析了返回的內(nèi)容之后三椿,發(fā)現(xiàn)這是不允許的缺菌,所以攔截掉了內(nèi)容葫辐。
  • 瀏覽器如果接收到的服務(wù)器返回的響應(yīng)頭中包含 Access-Control-Allow-Origin 則視為允許跨域,該屬性設(shè)置為 * 則允許所有網(wǎng)站跨域伴郁,但是并不安全耿战,所以我們往往設(shè)置為我們允許的網(wǎng)站(類似白名單的作用),如截圖中僅允許 http://127.0.0.1:8888 的請求跨域訪問蛾绎。但該值僅允許設(shè)置為一個昆箕,如果需要設(shè)置多個鸦列,常用做法是在代碼中進行判斷租冠,動態(tài)設(shè)置該值即可。
  • 跨域原理:請求發(fā)送成功薯嗤,服務(wù)器也接受到了顽爹,內(nèi)容也已經(jīng)返回了,瀏覽器在解析了返回的內(nèi)容之后骆姐,發(fā)現(xiàn)這是不允許的镜粤,所以攔截掉了內(nèi)容,并在命令行報錯玻褪,其實是瀏覽器提供的功能,如果在curl里面是沒有跨域概念的肉渴。
  • 1,通過 Access-Control-Allow-Origin 響應(yīng)頭 來實現(xiàn)跨域請求
  • 2带射,通過JSONP來實現(xiàn)跨域請求

CORS跨域請求的限制及預(yù)請求限制

在跨域的時候

1.默認允許的方法只有GET同规、HEAD、POST 窟社,其余 PUT 券勺、DELETE 都是默認不允許的,瀏覽器會預(yù)請求去驗證的灿里。
2.默認允許的 Content-Type 有 text/plain关炼、multipart/form-data、application/x-www-form-urlencoded 其余Content-Type 都需要 預(yù)請求驗證
3.其他限制:請求頭限制匣吊、XMLHttpRequestUpload 對象均沒有注冊任何事件監(jiān)聽器儒拂、請求中沒有使用 ReadableStream 對象

Cache-Control的含義和使用

客戶端從服務(wù)器請求數(shù)據(jù)經(jīng)歷如下基本步驟:
1、如果請求命中本地緩存則從本地緩存中獲取一個對應(yīng)資源的"copy"色鸳;
2社痛、檢查這個"copy"是否fresh,是則直接返回,否則繼續(xù)向服務(wù)器轉(zhuǎn)發(fā)請求缕碎。
3褥影、服務(wù)器接收到請求,然后判斷資源是否變更咏雌,是則返回新內(nèi)容凡怎,否則返回304校焦,未變更。
4统倒、客戶端更新本地緩存寨典。

no-cache的作用是:強制客戶端跳過步驟2,直接向服務(wù)器發(fā)送請求房匆。也就是說每次請求都必須向服務(wù)器發(fā)送耸成。

must-revalidate:作用與no-cache相同,但更嚴格浴鸿,強制意味更明顯井氢。但這只是理論上的描述,根據(jù)我在ff6上的測試岳链,它幾乎不起作用:只要請求的頻率加快到一定程度花竞,服務(wù)器就接收不到請求。

no-store:緩存將不存儲response,包括header和body掸哑。測試結(jié)果表明约急,除每次請求都必發(fā)送到服務(wù)器外,響應(yīng)代碼均是200苗分,且request并沒有發(fā)送"If-Modified-Since"和"If-None-Match"頭厌蔽,這意味著緩存的確沒有存儲response。

以上三者都是要求客戶端每次請求都必須到服務(wù)器進行revalidate摔癣,此功能還可以通過max-age實現(xiàn): Cache-Control:max-age=100

有max-age奴饮,服務(wù)端內(nèi)容更新后,希望客戶端能獲取新的靜態(tài)資源

解決:加上hash碼供填,內(nèi)容不變拐云,hash碼不變,內(nèi)容變了近她,hash碼變了叉瘩,請求的url變化,就可以獲取更新的文件

重新驗證:

must-revalidate:緩存過期后粘捎,必須去原服務(wù)端發(fā)送這個請求薇缅,重新獲取這部分數(shù)據(jù),驗證是否真的過期
procy-revalidate:和上面的差不多攒磨,用在緩存服務(wù)器
其他:
no-store: 不能緩存泳桦,只能每次從服務(wù)器拿
no-transform:不壓縮、轉(zhuǎn)換返回內(nèi)容
這些聲明都沒有強制效應(yīng)

可緩存性:

public:http返回的內(nèi)容經(jīng)過的任何路徑都可以對返回內(nèi)容進行緩存
private:發(fā)起請求的瀏覽器才可以緩存
no-cache:可以在發(fā)起端進行緩存娩缰,要服務(wù)器驗證才可以使用緩存
到期:
max-age=seconds 到期多少秒灸撰,再次請求
s-maxage=seconds 代替max-age 在代理服務(wù)器內(nèi)生效
max-stale=seconds 返回的資源有這個屬性,即便緩存已經(jīng)過期,在這個時間內(nèi)還可以繼續(xù)使用已經(jīng)過期的緩存

靜態(tài)資源解決方案:把實際打包完成的js文件上的文件名上加上一串hash碼浮毯,如果內(nèi)容沒有變化完疫,hash碼不會變化,如果內(nèi)容有變化,則hash碼也會變化。這樣可以達到更新緩存的目的

no-cache:本地可以用使用緩存说搅,但需要服務(wù)器驗證后才能使用
no-store:本地和代理服務(wù)器都不能存儲緩存,都需要從服務(wù)器端重新請求
no-transform:告訴代理服務(wù)器不能隨便改變返回的內(nèi)容
must-revalidate:當緩存到期后串述,不能直接使用本地緩存數(shù)據(jù)而需要重新驗證
proxy-revalidate:緩存服務(wù)器上,必須去原服務(wù)器重新請求一遍,不能使用本地緩存

到期:

max-age=<seconds> 服務(wù)器緩存到期時間
s-maxage=<seconds> 代理服務(wù)器緩存的到期時間
max-stale=<seconds> 到期后,即便緩存過期锹淌,只要在max-stale時間內(nèi),依然有緩存

其他

1莉掂,no-store 本地和代理服務(wù)器都不可以存緩存
2葛圃,no-transform 代理服務(wù)器不要去改動返回內(nèi)容
no-store(本地和代理服務(wù)器都不可以緩存),no-transform(主要用在代理服務(wù)器憎妙,不允許改動服務(wù)器返回的內(nèi)容)
  • 可緩存性,因為數(shù)據(jù)傳輸過程中可能存在多個代理服務(wù)器曲楚,則數(shù)據(jù)緩存中的public表示路徑上所有(包括代理服務(wù)器)都可以對數(shù)據(jù)進行緩存厘唾;而private則代表只有發(fā)起請求的瀏覽器才能進行緩存;no-cache表任何不能緩存

  • Cache-Control是客戶端的緩存龙誊。雖然服務(wù)端的文件變了但是url沒有變抚垃,所以客戶端依舊使用緩存的文件。前端常見的解決策略是趟大,生成文件的hash碼鹤树。

緩存頭Cache-Control:

一、可緩存性(哪些地方可以緩存):public(任何地方都可以)逊朽, private(發(fā)起請求的瀏覽器可以進行緩存),  no-cache(任何地方都不可以)
二:時間限制:max-age = <seconds>, s-max-age = <seconds>(專用在代理服務(wù)器中)罕伯,max-stale = <seconds>(發(fā)起請求端設(shè)置的)
三:重新驗證:must-revalidate(時間過期必須去原服務(wù)端重新獲取數(shù)據(jù)),proxy-revalidate(和must-revalidate類似,用于緩存服務(wù)器中)

緩存驗證Last-Modified和Etag的使用

  • 設(shè)置了etag叽讳、last-modified后追他,瀏覽器在第二次發(fā)起請求后就會把if-none-match和if-modified-since帶上

HTTP驗證頭:

1,Last-Modified 上次修改時間
配合If-Modified-Since使用
對比上次修改時間以驗證資源是否需要更新
2岛蚤,Etag
數(shù)據(jù)簽名邑狸,對響應(yīng)內(nèi)容產(chǎn)生一個唯一的字符串。
配合If-Non-Match使用
對比資源的簽名判斷是否使用緩存
  • 304 :
    如果客戶端發(fā)送了一個帶條件的GET 請求且該請求已被允許涤妒,而文檔的內(nèi)容(自上次訪問以來或者根據(jù)請求的條件)并沒有改變单雾,則服務(wù)器應(yīng)當返回這個304狀態(tài)碼。簡單的表達就是:客戶端已經(jīng)執(zhí)行了GET,但文件未變化硅堆。
    [站外圖片上傳中...(image-69e60e-1537155939039)]

  • etag,數(shù)據(jù)簽名.數(shù)據(jù)修改蜂奸,資源的數(shù)據(jù)簽名就會修改.例如hash兩個屬性:if-match,if-non-match里面放的etag值,對比服務(wù)端和客戶端判斷是否使用緩存

  • Cache-control:nocache 可以在發(fā)起端緩存但要在服務(wù)端進行驗證是否可以緩存;last-modified:上次修改時間;if-modified-since,in-unmodified-since:服務(wù)器讀取這兩個值硬萍,看資源是否重新修改扩所,服務(wù)器告訴客戶端是否可以用緩存的資源

  • Cache-Control: nocache,每次瀏覽器發(fā)起對一個已經(jīng)設(shè)置了Cache-Control資源的請求時,都會要到服務(wù)器端進行資源的驗證朴乖。驗證之后確定資源可以使用緩存祖屏,確定該資源可以使用緩存,才會讀取本地緩存

cookie

domain
訪問域設(shè)定
cookie只能一個域訪問
a.com的cookie b.com不能訪問
domain讓a.test.com能訪問test.com的cookie
不能跨域設(shè)置cookie买羞,只能一級通過domain設(shè)置二級等

max-age:有效期多長
expires:到期的具體時間
服務(wù)端返回數(shù)據(jù)時通過set-Cookie設(shè)置到瀏覽器內(nèi)袁勺,瀏覽器保存cookie后,在同域的訪問內(nèi)下次請求會自動帶上

max-age 和 expires 設(shè)置過期時間
Secure 只在https的時候發(fā)送
httpOnly無法通過js訪問,瀏覽器中還是有的畜普。
cookie時效
如果沒有設(shè)置時間期丰,瀏覽器關(guān)閉失效。
'Set-cookie': ['id=123; max-age=30', 'name=lin'] : id=123->30s后失效

設(shè)置test.com以及test.com的所有二級域名享受到cookie

HTTP長連接

Connection:keep-alive(長)吃挑、close(短)
http2:信道復(fù)用 tcp并發(fā)發(fā)送http請求
http請求是在tcp上發(fā)送的钝荡,一個tcp可以發(fā)送多個http,http1.1是阻塞的

現(xiàn)在保持長鏈接比較多
應(yīng)為多次建立tcp鏈接可能比長鏈接的開銷更大
長鏈接可以設(shè)置timeout
同個tcp內(nèi)是有先后順序的
瀏覽器可以并發(fā)6個tcp

session
用cookie保存sesion將用戶登陸key保存到cookie舶衬,每次用戶請求時讀取cookie值埠通,定位用戶信息
session:定位到用戶

數(shù)據(jù)協(xié)商

服務(wù)端返回
X-Content-Type-Options : nosniff
服務(wù)端不接受contnettype的數(shù)據(jù)類型或沒設(shè)置type,不主動預(yù)測類型

瀏覽器端會自動加上逛犹,也可以在ajax時設(shè)置
Accept:瀏覽器能展示的數(shù)據(jù)格式
Accept-Encoding:能接受的數(shù)據(jù)壓縮格式
Accept-Language:希望接受的語言
User-Agent:系統(tǒng)名 內(nèi)核 瀏覽器版本


數(shù)據(jù)協(xié)商:
根據(jù)客戶端發(fā)來的要求端辱,服務(wù)端返回對應(yīng)的數(shù)據(jù)
Accept 屬性
Accept(什么數(shù)據(jù)類型) Accept-Encoding(編碼方式,壓縮) Accept-Language(使用的語言) User-Agent(處于哪種系統(tǒng)環(huán)境)
Content屬性
Content-Type Content-Encoding Content-Language

redirect

通過url去訪問資源虽画,資源不在原來的位置舞蔽,服務(wù)器要告訴瀏覽器,請求的資源在哪里码撰,瀏覽器再重新請求
Lacation:新url
302:臨時跳轉(zhuǎn) 每一次都要通過服務(wù)器跳轉(zhuǎn)
301:永久跳轉(zhuǎn) 第二次訪問后渗柿,就不需要再通過服務(wù)器去跳轉(zhuǎn),是通過瀏覽器跳轉(zhuǎn)的灸拍,被緩存了新url

總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末做祝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸡岗,更是在濱河造成了極大的恐慌混槐,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轩性,死亡現(xiàn)場離奇詭異声登,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門悯嗓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來件舵,“玉大人,你說我怎么就攤上這事脯厨∏觯” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵合武,是天一觀的道長临梗。 經(jīng)常有香客問我,道長稼跳,這世上最難降的妖魔是什么盟庞? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮汤善,結(jié)果婚禮上什猖,老公的妹妹穿的比我還像新娘。我一直安慰自己红淡,他們只是感情好不狮,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锉屈,像睡著了一般荤傲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颈渊,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音终佛,去河邊找鬼俊嗽。 笑死,一個胖子當著我的面吹牛铃彰,可吹牛的內(nèi)容都是我干的绍豁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼牙捉,長吁一口氣:“原來是場噩夢啊……” “哼竹揍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邪铲,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤芬位,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后带到,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昧碉,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了被饿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片四康。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狭握,靈堂內(nèi)的尸體忽然破棺而出闪金,到底是詐尸還是另有隱情,我是刑警寧澤论颅,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布哎垦,位于F島的核電站,受9級特大地震影響嗅辣,放射性物質(zhì)發(fā)生泄漏撼泛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一澡谭、第九天 我趴在偏房一處隱蔽的房頂上張望愿题。 院中可真熱鬧,春花似錦蛙奖、人聲如沸潘酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仔夺。三九已至,卻和暖如春攒砖,著一層夾襖步出監(jiān)牢的瞬間缸兔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工吹艇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惰蜜,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓受神,卻偏偏與公主長得像抛猖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鼻听,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

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