HTTP鹅很,請求消息,響應(yīng)消息罪帖,Cookie(詳細(xì)總結(jié))

一促煮、What is HTTP ?

1. 協(xié)議概述

HTTP (HyperText Transfer Protocol,超文本傳輸協(xié)議) 是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議整袁,設(shè)計(jì) HTTP 最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法

HTTP 協(xié)議中現(xiàn)今廣泛使用的一個(gè)版本是1999年6月公布的 HTTP1.1 菠齿,而2015年5月發(fā)表的HTTP/2 取代 HTTP1.1 成為 HTTP 新的實(shí)現(xiàn)標(biāo)準(zhǔn)

通常,由 HTTP 客戶端發(fā)起一個(gè)請求坐昙,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口 )的 TCP 連接绳匀。HTTP 服務(wù)器則在那個(gè)端口監(jiān)聽客戶端的請求。一旦收到請求,服務(wù)器會(huì)向客戶端返回一個(gè)狀態(tài)疾棵,比如 HTTP/1.1 200 OK 盗飒,以及返回的內(nèi)容,如請求的文件陋桂、錯(cuò)誤消息逆趣、或者其它信息

二、請求信息 (Request Message)

發(fā)出的請求信息包括以下幾個(gè):

  • 請求行
    例如 GET /images/logo.gif HTTP/1.1嗜历,表示從 /images 目錄下請求 logo.gif 這個(gè)文件
  • 請求頭
    例如 Accept-Language: en
  • 空行
  • 其他消息體

請求行和標(biāo)題必須以<CR><LF>作為結(jié)尾
空行內(nèi)必須只有<CR><LF>而無其他空格
在HTTP/1.1協(xié)議中宣渗,所有的請求頭,除Host外梨州,都是可選的

1. 請求方法

HTTP/1.1 中共定義了8種方法(動(dòng)作)來以不同方式操作指定的資源

  • GET:向指定的資源發(fā)出“顯示”請求痕囱,使用 GET 方法應(yīng)該只用在讀取數(shù)據(jù)
  • POST:向指定資源提交數(shù)據(jù),請求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)
    數(shù)據(jù)被包含在請求本文中暴匠。這個(gè)請求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源鞍恢,或二者皆有
  • HEAD:與 GET 方法一樣,都是向服務(wù)器發(fā)出指定資源的請求
    只不過服務(wù)器將不傳回資源的本文部分每窖。它的好處在于帮掉,使用這個(gè)方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中“關(guān)于該資源的信息”(元信息或稱元數(shù)據(jù))
  • OPTIONS:這個(gè)方法可使服務(wù)器傳回該資源所支持的所有 HTTP 請求方法窒典。
    用'*'來代替資源名稱蟆炊,向Web服務(wù)器發(fā)送 OPTIONS 請求,可以測試服務(wù)器功能是否正常運(yùn)作
  • PUT:向指定資源位置上傳其最新內(nèi)容
  • DELETE:請求服務(wù)器刪除Request-URI 所標(biāo)識(shí)的資源
  • TRACE:回顯服務(wù)器收到的請求瀑志,主要用于測試或診斷
  • CONNECTHTTP/1.1 協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器涩搓。
    通常用于 SSL 加密服務(wù)器的鏈接(經(jīng)由非加密的 HTTP 代理服務(wù)器)

** 方法名稱是區(qū)分大小寫的 **:

  • 當(dāng)某個(gè)請求所針對的資源不支持對應(yīng)的請求方法的時(shí)候,服務(wù)器應(yīng)當(dāng)返回狀態(tài)碼 405(Method Not Allowed)
  • 當(dāng)服務(wù)器不認(rèn)識(shí)或者不支持對應(yīng)的請求方法的時(shí)候劈猪,應(yīng)當(dāng)返回狀態(tài)碼 501(Not Implemented)
  1. HTTP服務(wù)器至少應(yīng)該實(shí)現(xiàn) GETHEAD 方法昧甘,其他方法都是可選的
  2. 安全超文本連接協(xié)議使用 https:// 代替 http://

2. 狀態(tài)碼

所有HTTP響應(yīng)的第一行都是狀態(tài)行,依次是當(dāng)前 HTTP 版本號(hào)战得,3位數(shù)字組成的狀態(tài)代碼充边,以及描述狀態(tài)的短語,彼此由空格分隔贡避。
狀態(tài)代碼的第一個(gè)數(shù)字代表當(dāng)前響應(yīng)的類型:

  • 1xx 消息 —— 請求已被服務(wù)器接收痛黎,繼續(xù)處理
  • 2xx 成功 —— 請求已成功被服務(wù)器接收、理解刮吧、并接受
  • 3xx 重定向 —— 需要后續(xù)操作才能完成這一請求
  • 4xx 請求錯(cuò)誤 —— 請求含有詞法錯(cuò)誤或者無法被執(zhí)行
  • 5xx 服務(wù)器錯(cuò)誤 —— 服務(wù)器在處理某個(gè)正確請求時(shí)發(fā)生錯(cuò)誤

3. 舉個(gè)栗子

下面是一個(gè)HTTP客戶端與服務(wù)器之間會(huì)話的例子湖饱,運(yùn)行于 www.google.com,端口 80

客戶端請求:

GET / HTTP/1.1
Host: www.google.com

末尾有一個(gè)空行
第一行:指定方法杀捻、資源路徑井厌、協(xié)議版本
第二行:在1.1版里必帶的一個(gè)header作用指定主機(jī)

服務(wù)器響應(yīng):

HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive

(緊跟著一個(gè)空行,并且由HTML格式的文本組成了Google的主頁)

  • HTTP1.0 ,單一 TCP 連接內(nèi)僅執(zhí)行一個(gè)“客戶端發(fā)送請求—服務(wù)器發(fā)送應(yīng)答”周期仅仆,之后釋放 TCP 連接器赞。
  • HTTP1.1 優(yōu)化支持持續(xù)活躍連接:客戶端連續(xù)多次發(fā)送請求、接收應(yīng)答墓拜;批量多請求時(shí)港柜,同一 TCP 連接在活躍 Keep-Live 間期內(nèi)復(fù)用,避免重復(fù) TCP 初始握手活動(dòng)咳榜,減少網(wǎng)絡(luò)負(fù)荷和響應(yīng)周期夏醉。此外支持應(yīng)答到達(dá)前繼續(xù)發(fā)送請求(通常是兩個(gè)),稱為“流線化”(stream)涌韩。

4. 通用頭域

通用頭域包含請求和響應(yīng)消息都支持的頭域畔柔,通用頭域包含:

  • Cache-Control 頭域:指定請求和響應(yīng)遵循的緩存機(jī)制
    在請求消息或響應(yīng)消息中設(shè)置 Cache-Control 并不會(huì)修改另一個(gè)消息處理過程中的緩存處理過程

  • 請求時(shí)的緩存指令包括:

    • no-cache:指示響應(yīng)可被任何緩存區(qū)緩存
    • no-store:在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存,可防止重要的信息被無意的發(fā)布
    • max-age:指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)
    • max-stale:指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息臣樱。
      如果指定max-stale消息的值靶擦,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息
    • min-fresh:指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)
    • only-if-cached
  • 響應(yīng)消息中的指令包括:

    • public:指示響應(yīng)可被任何緩存區(qū)緩存
    • private
    • no-cache
    • no-store
    • no-transform
    • must-revalidate
    • proxy-revalidate
    • max-age
  • Connection

  • DateDate 頭域:頭域表示消息發(fā)送的時(shí)間,時(shí)間的描述格式由rfc822定義

  • 例如雇毫,Date:Mon,31Dec200104:25:57GMT

  • Date 描述的時(shí)間表示世界標(biāo)準(zhǔn)時(shí)玄捕,換算成本地時(shí)間,需要知道用戶所在的時(shí)區(qū)嘴拢。

  • Pragma頭域:用來包含實(shí)現(xiàn)特定的指令

  • 最常用的是 Pragma:no-cache

  • 在 HTTP/1.1 協(xié)議中桩盲,它的含義和 Cache- Control:no-cache 相同

  • Transfer-Encoding 頭域

  • Upgrade 頭域

  • Via 頭域

上面總結(jié)的是“通用頭域”,我們先來看下一個(gè)典型的請求信息:

GET / HTTP/1.1
Host: baidu.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: BDUSS=aaaaa; BAIDUID=bbbbb:FG=1; PSTM=1459694957; BDRCVFR[loys_9vxHFf]=mk3SLVN4HKm; BIDUPSID=ccccc; pgv_pvi=9192257536; pgv_si=s6465831936; H_PS_PSSID=ddddd

上面的第一行表示HTTP客戶端(可能是瀏覽器席吴、下載程序)通過GET方法獲得指定URL下的文件。接下來捞蛋,我們來分析下“ 請求頭域 ”

5. 請求頭域

  • Host 頭域:指定請求資源的Intenet主機(jī)和端口號(hào)
  • 必須表示請求url的原始服務(wù)器或網(wǎng)關(guān)的位置
  • HTTP/1.1請求必須包含主機(jī)頭域孝冒,否則系統(tǒng)會(huì)以400狀態(tài)碼返回
  • Referer 頭域:允許客戶端指定請求uri的源資源地址
  • 這可以允許服務(wù)器生成回退鏈表,可用來登陸拟杉、優(yōu)化cache等
  • 也允許廢除的或錯(cuò)誤的連接由于維護(hù)的目的被追蹤
  • 如果請求的uri沒有自己的uri地址庄涡,Referer不能被發(fā)送
  • 如果指定的是部分uri地址,則此地址應(yīng)該是一個(gè)相對地址
  • Range 頭域:請求實(shí)體的一個(gè)或者多個(gè)子范圍
  • 例如
    • 表示頭500個(gè)字節(jié):bytes=0-499
    • 表示第二個(gè)500字節(jié):bytes=500-999
    • 表示500字節(jié)以后的范圍:bytes=500-
    • 第一個(gè)和最后一個(gè)字節(jié):bytes=0-0,-1
    • 同時(shí)指定幾個(gè)范圍:bytes=500-600,601-999
  • 但是服務(wù)器可以忽略此請求頭搬设,如果無條件 GET 包含 Range 請求頭穴店,響應(yīng)會(huì)以狀態(tài)碼206(PartialContent) 返回而不是以 200 (OK)
  • User-Agent 頭域:內(nèi)容包含發(fā)出請求的用戶信息

三、響應(yīng)消息(Response Message)

1. 響應(yīng)頭

我們先來看一個(gè)“請求百度首頁”的響應(yīng)頭:

HTTP/1.1 200 OK
Date: Sun, 03 Apr 2016 15:44:32 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
Cache-Control: private
Expires: Sun, 03 Apr 2016 15:44:32 GMT
Content-Encoding: gzip
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 2
BDQID: 0xb2584dee0005f8ac
BDUSERID: 801624962
Set-Cookie: BDSVRTM=147; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=aaaaa; path=/; domain=.baidu.com
  • 響應(yīng)頭的第一行為右邊的格式:HTTP-Version Status-Code Reason-Phrase

  • HTTP- Version:表示支持的HTTP版本
    例如為HTTP/1.1

  • Status- Code:是一個(gè)三個(gè)數(shù)字的結(jié)果代碼(可參考前面總結(jié)的“狀態(tài)碼”部分)
    主要用于機(jī)器自動(dòng)識(shí)別拿穴,第一個(gè)數(shù)字定義響應(yīng)的類別

  • Reason-Phrase:給 Status-Code 提供一個(gè)簡單的文本描述
    主要用于幫助用戶理解

  • Location 響應(yīng)頭:用于重定向接收者到一個(gè)新URI地址

  • Server 響應(yīng)頭:包含處理請求的原始服務(wù)器的軟件信息泣洞。
    此域能包含多個(gè)產(chǎn)品標(biāo)識(shí)和注釋,產(chǎn)品標(biāo)識(shí)一般按照重要性排序

2. 實(shí)體

請求消息響應(yīng)消息 都可以包含實(shí)體信息默色,實(shí)體信息一般由 實(shí)體頭域實(shí)體 組成
實(shí)體頭包括:

Allow Content- Base Content-Encoding
Content-Language Content-Length Content-Location
Content-MD5 Content-Range Content-Type
Etag Expires Last-Modified
extension-header
  • Content-Type 實(shí)體頭:向接收方指示實(shí)體的介質(zhì)類型
  • 指定 HEAD 方法送到接收方的實(shí)體介質(zhì)類型
  • GET 方法發(fā)送的請求介質(zhì)類型
  • Content-Range 實(shí)體頭:指定整個(gè)實(shí)體中的一部分的插入位置球凰,也指示了整個(gè)實(shí)體的長度
  • 在服務(wù)器向客戶返回一個(gè)部分響應(yīng),它必須描述響應(yīng)覆蓋的范圍和整個(gè)實(shí)體長度
  • 一般格式:Content-Range:bytes-unit first-byte-pos-last-byte-pos/entity-legth
  • 例如,傳送頭500個(gè)字節(jié)次字段的形式:Content-Range:bytes0- 499/1234
  • Content-Range 表示傳送的范圍呕诉,Content-Length 表示實(shí)際傳送的字節(jié)數(shù)
  • Last-modified 實(shí)體頭:指定服務(wù)器上保存內(nèi)容的最后修訂時(shí)間

3. 響應(yīng)頭

  • Allow:服務(wù)器支持哪些請求方法(如 GET 缘厢、POST 等)

  • Content-Encoding:文檔的編碼(Encode)方法

  • 只有在解碼之后才可以得到 Content-Type 頭指定的內(nèi)容類型

  • 利用 gzip 壓縮文檔能夠顯著地減少 HTML 文檔的下載時(shí)間

  • Java的 GZIPOutputStream 可以很方便地進(jìn)行 gzip 壓縮,但只有Unix上的 NetscapeWindows 上的IE 4甩挫、IE 5才支持它贴硫。

  • 因此,Servlet 應(yīng)該通過查看 Accept-Encoding 頭(即 request.getHeader("Accept- Encoding") )檢查瀏覽器是否支持 gzip 伊者,為支持 gzip 的瀏覽器返回經(jīng) gzip 壓縮的 HTML 頁面英遭,為其他瀏覽器返回普通頁面。

  • Content-Length:表示內(nèi)容長度

  • 只有當(dāng)瀏覽器使用持久HTTP連接時(shí)才需要這個(gè)數(shù)據(jù)

  • Content-Type:表示后面的文檔屬于什么MIME類型

  • Servlet 默認(rèn)為 text/plain 删壮,但通常需要顯式地指定為 text/html

  • 由于經(jīng)常要設(shè)置 Content-Type 贪绘,因此 HttpServletResponse 提供了一個(gè)專用的方法 setContentTyep

  • Date:當(dāng)前的GMT時(shí)間

  • 你可以用 setDateHeader 來設(shè)置這個(gè)頭以避免轉(zhuǎn)換時(shí)間格式的麻煩。

  • Expires:應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過期央碟,從而不再緩存它税灌?

  • Last-Modified:文檔的最后改動(dòng)時(shí)間。

  • 客戶可以通過 If-Modified-Since 請求頭提供一個(gè)日期亿虽,該請求將被視為一個(gè)條件 GET菱涤,只有改動(dòng)時(shí)間遲于指定時(shí)間的文檔才會(huì)返回,否則返回一個(gè) 304(Not Modified)狀態(tài)洛勉。

  • Last-Modified 也可用setDateHeader方法來設(shè)置粘秆。

  • Location:表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n

  • Location 通常不是直接設(shè)置的,而是通過 HttpServletResponsesendRedirect 方法收毫,該方法同時(shí)設(shè)置狀態(tài)代碼為 302 攻走。

  • Refresh:表示瀏覽器應(yīng)該在多少時(shí)間之后刷新文檔,以秒計(jì)

  • 除了刷新當(dāng)前文檔之外此再,你還可以通過 setHeader("Refresh", "5; URL=http://host/path") 讓瀏覽器讀取指定的頁面昔搂。 注意這種功能通常是通過設(shè)置 HTML 頁面 HEAD 區(qū)的 <META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path"> 實(shí)現(xiàn),這是因?yàn)槭淠矗詣?dòng)刷新或重定向?qū)τ谀切┎荒苁褂?CGIServlet 的 HTML編寫者十分重要

  • 但是摘符,對于 Servlet 來說,直接設(shè)置 Refresh 頭更加方便

  • 注意 Refresh 的意義是“N秒之后刷新本頁面或訪問指定頁面”策吠,而不是“每隔N秒刷新本頁面或訪問指定頁面”逛裤。

  • 因此,連續(xù)刷新要求每次都發(fā)送一個(gè) Refresh頭猴抹,而發(fā)送 204 狀態(tài)代碼則可以阻止瀏覽器繼續(xù)刷新带族,不管是使用 Refresh 頭還是 <META HTTP-EQUIV="Refresh" ...>

  • 注意:Refresh 頭不屬于 HTTP 1.1 正式規(guī)范的一部分,而是一個(gè)擴(kuò)展洽糟,但 NetscapeIE 都支持它

  • Server:服務(wù)器名

  • Servlet 一般不設(shè)置這個(gè)值炉菲,而是由 Web 服務(wù)器自己設(shè)置

  • Set-Cookie:設(shè)置和頁面關(guān)聯(lián)的Cookie

  • Servlet 不應(yīng)使用 response.setHeader("Set-Cookie", ...)堕战,而是應(yīng)使用HttpServletResponse 提供的專用方法 addCookie

四、Cookie

某些網(wǎng)站為了辨別用戶身份而儲(chǔ)存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)

1. 分類

Cookie 總是保存在客戶端中拍霜,按在客戶端中的存儲(chǔ)位置可分為

  • 內(nèi)存Cookie
  • 內(nèi)存Cookie 由瀏覽器維護(hù)嘱丢,保存在內(nèi)存中,瀏覽器關(guān)閉后就消失了祠饺,其存在時(shí)間是短暫的
  • 硬盤Cookie
  • 硬盤Cookie 保存在硬盤里越驻,有一個(gè)過期時(shí)間,除非用戶手工清理或到了過期時(shí)間道偷,硬盤Cookie 不會(huì)被刪除缀旁,其存在時(shí)間是長期的

所以,按存在時(shí)間勺鸦,可分為 非持久Cookie持久Cookie

2. 用途

因?yàn)?HTTP 協(xié)議是無狀態(tài)的并巍,即服務(wù)器不知道用戶上一次做了什么,這嚴(yán)重阻礙了交互式 Web 應(yīng)用程序的實(shí)現(xiàn)换途。Cookie就是用來繞開 HTTP 的無狀態(tài)性的“額外手段”之一懊渡。服務(wù)器可以設(shè)置或讀取 Cookies 中包含信息,借此維護(hù)用戶跟服務(wù)器會(huì)話中的狀態(tài)

3. 應(yīng)用場景:

  • 當(dāng)?shù)卿浺粋€(gè)網(wǎng)站時(shí)军拟,網(wǎng)站往往會(huì)請求用戶輸入用戶名和密碼剃执,并且用戶可以勾選“下次自動(dòng)登錄”
  • 如果勾選了,那么下次訪問同一網(wǎng)站時(shí)懈息,用戶會(huì)發(fā)現(xiàn)沒輸入用戶名和密碼就已經(jīng)登錄了
  • 這正是因?yàn)榍耙淮蔚卿洉r(shí)肾档,服務(wù)器發(fā)送了包含登錄憑據(jù)(用戶名加密碼的某種加密形式)的 Cookie 到用戶的硬盤上
  • 第二次登錄時(shí),(如果該 Cookie 尚未到期)瀏覽器會(huì)發(fā)送該 Cookie 辫继,服務(wù)器驗(yàn)證憑據(jù)怒见,于是不必輸入用戶名和密碼就讓用戶登錄了

4. Cookie的缺陷

  • Cookie 會(huì)被附加在每個(gè) HTTP 請求中,所以無形中增加了流量
  • 由于在HTTP請求中的 Cookie 是明文傳遞的姑宽,所以安全性成問題(除非用 HTTPS
  • Cookie 的大小限制在4KB左右速种。對于復(fù)雜的存儲(chǔ)需求來說是不夠用的

5. 識(shí)別功能

  • 如果在一臺(tái)計(jì)算機(jī)中安裝多個(gè)瀏覽器,每個(gè)瀏覽器都會(huì)以獨(dú)立的空間存放 Cookie
  • 因?yàn)?Cookie 中不但可以確認(rèn)用戶信息低千,還能包含計(jì)算機(jī)和瀏覽器的信息,所以一個(gè)用戶使用不同的瀏覽器登錄或者用不同的計(jì)算機(jī)登錄馏颂,都會(huì)得到不同的 Cookie 信息
  • 另一方面示血,對于在同一臺(tái)計(jì)算機(jī)上使用同一瀏覽器的多用戶群,Cookie 不會(huì)區(qū)分他們的身份救拉,除非他們使用不同的用戶名登錄难审。

參考文章:
[1] 維基百科:超文本傳輸協(xié)議
[2] 維基百科:Cookie
[2] madfrag:HTTP響應(yīng)頭信息和請求頭信息詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亿絮,隨后出現(xiàn)的幾起案子告喊,更是在濱河造成了極大的恐慌麸拄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黔姜,死亡現(xiàn)場離奇詭異拢切,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秆吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門淮椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纳寂,你說我怎么就攤上這事主穗。” “怎么了毙芜?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵忽媒,是天一觀的道長。 經(jīng)常有香客問我腋粥,道長晦雨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任灯抛,我火速辦了婚禮金赦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘对嚼。我一直安慰自己夹抗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布纵竖。 她就那樣靜靜地躺著漠烧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪靡砌。 梳的紋絲不亂的頭發(fā)上已脓,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音通殃,去河邊找鬼度液。 笑死,一個(gè)胖子當(dāng)著我的面吹牛画舌,可吹牛的內(nèi)容都是我干的堕担。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼曲聂,長吁一口氣:“原來是場噩夢啊……” “哼霹购!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起朋腋,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤齐疙,失蹤者是張志新(化名)和其女友劉穎膜楷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贞奋,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赌厅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忆矛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片察蹲。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖催训,靈堂內(nèi)的尸體忽然破棺而出蛋辈,到底是詐尸還是另有隱情泉孩,我是刑警寧澤旷痕,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布下翎,位于F島的核電站,受9級(jí)特大地震影響采驻,放射性物質(zhì)發(fā)生泄漏审胚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一礼旅、第九天 我趴在偏房一處隱蔽的房頂上張望膳叨。 院中可真熱鬧,春花似錦痘系、人聲如沸菲嘴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龄坪。三九已至,卻和暖如春复唤,著一層夾襖步出監(jiān)牢的瞬間健田,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工佛纫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妓局,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓呈宇,卻偏偏與公主長得像跟磨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子攒盈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)哎榴,斷路器型豁,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 一僵蛛、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,359評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,224評(píng)論 3 82
  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡稱cookie)是網(wǎng)...
    留七七閱讀 17,971評(píng)論 2 71
  • API定義規(guī)范 本規(guī)范設(shè)計(jì)基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高迎变,建議使用雙通...
    有涯逐無涯閱讀 2,548評(píng)論 0 6