HTTP基礎(chǔ)知識整理

1. HTTP請求報(bào)文格式

HTTP請求報(bào)文分為三部分:請求行碍现、請求頭請求體

注:部分文章也將HTTP請求報(bào)文分為兩部分:請求頭請求體

1.1 請求行

請求行(Request Line)分為三個部分:請求方法士嚎、請求地址協(xié)議版本,以CRLF(rn)結(jié)束师倔。

HTTP/1.1 定義的請求方法有8種:GET构韵、POST、PUT趋艘、DELETE贞绳、PATCH、HEAD致稀、OPTIONS冈闭、TRACE,最常的兩種GET和POST,如果是RESTful接口的話一般會用到GET抖单、POST萎攒、DELETE、PUT矛绘。(GET方法是默認(rèn)的請求方法耍休,用來請求訪問URI所指定的資源,并不對服務(wù)器上的內(nèi)容產(chǎn)生熱喝作用結(jié)果货矮;POST方法用來傳輸實(shí)體主體羊精,目的并不是獲取響應(yīng)的主體內(nèi)容,POST方法是把內(nèi)容放在報(bào)文內(nèi)容中囚玫,只要報(bào)文內(nèi)容沒有限制喧锦,它的大小就沒有限制。)

請求地址由四部分組成:protocol[協(xié)議]抓督、host[主機(jī)]燃少、path[路徑]、Query String[參數(shù)]铃在,例如:

http[protocol]://localhost[host]/index.html[path]?key1=value1&key2=value2[Query String]

1.2 請求頭 Request Headers

請求頭可用于傳遞一些附加信息阵具,格式: 鍵: 值碍遍,注意冒號后面有一個空格!例如:

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

詳見3. Header

1.3 請求體

請求頭和請求正文之間是一個空行阳液,這個行非常重要怕敬,它表示請求頭已經(jīng)結(jié)束,接下來的是請求正文帘皿。請求正文中可以包含客戶提交的查詢字符串信息:

username=Bill&password=KillBill

在以上的例子的HTTP請求中赖捌,請求的正文只有一行內(nèi)容。當(dāng)然矮烹,在實(shí)際應(yīng)用中越庇,HTTP請求正文可以包含更多的內(nèi)容。

根據(jù)應(yīng)用場景的不同奉狈,HTTP請求的請求體有三種不同的形式:

第一種:移動開發(fā)者常見的卤唉,請求體是任意類型,服務(wù)器不會解析請求體仁期,請求體的處理需要自己解析桑驱,如Post Json時候。

第二種:第二種和第三種都有固定格式的跛蛋,屬于形式二熬的,是服務(wù)器端開發(fā)人員最先了解到的兩種。這里的格式要求就是URL中Query String的格式要求:多個鍵值對之間用&連接赊级,鍵與值之前用=連接押框,且只能用ASCII字符,非ASCII字符需使用UrlEncode編碼理逊。

第三種:第三種請求體的請求體被分成為多個部分橡伞,文件上傳時會被使用,這種格式最先應(yīng)該是被用于郵件傳輸中晋被,每個字段/文件都被boundary(Content-Type中指定)分成單獨(dú)的段兑徘,每段以-- 加 boundary開頭,然后是該段的描述頭羡洛,描述頭之后空一行接內(nèi)容挂脑,請求結(jié)束的標(biāo)制為boundary后面加--,結(jié)構(gòu)見下圖:

第四種:區(qū)分是否被當(dāng)成文件的關(guān)鍵是Content-Disposition是否包含filename欲侮,因?yàn)槲募胁煌念愋驼赶校赃€要使用Content-Type指示文件的類型,如果不知道是什么類型取值可以為application/octet-stream表示該文件是個二進(jìn)制文件锈麸,如果不是文件則Content-Type可以省略镀脂。下圖為一個帶有文件的上傳的請求體原文:

注:第二牺蹄、三種請求體需求配合特定的Content-Type請求頭忘伞,如:第二種配合Content-Type:application/x-www-form-urlencoded;第三種配合Content-Type: multipart/form-data; boundary={boundary} ,*上面的form-data也可以是mixed氓奈、alternative翘魄、digest、parallel舀奶,但我只用到了form-data暑竟;如果兩者沒有相配合,那么服務(wù)器不會解析請求體育勺,也就是說只會當(dāng)成第一種情況但荤!表單或者模擬表單 指的就是第二種和第三種(multipart/form-data)

2. HTTP響應(yīng)報(bào)文格式

HTTP響應(yīng)報(bào)文分為三部分:響應(yīng)行(狀態(tài)行)響應(yīng)頭涧至、響應(yīng)體

2.1 狀態(tài)行

狀態(tài)行由四部分組成:協(xié)議版本腹躁、狀態(tài)碼狀態(tài)碼描述,以CRLF(rn)結(jié)束南蓬。

狀態(tài)碼詳細(xì)可以查看HTTP狀態(tài)碼詳解

2.2 Response Headers和Request Headers相同纺非,見下文

2.3 響應(yīng)體

3. Header

Header可用于傳遞一些附加信息,格式: 鍵: 值赘方,注意冒號后面有一個空格烧颖!

3.1 請求和響應(yīng)常見通用Header

Content-Type:請求體/響應(yīng)體的類型,如:text/plain窄陡、application/json

Accept:說明接收的類型炕淮,可以多個值,用,(半角逗號)分開

Content-Length:請求體/響應(yīng)體的長度跳夭,單位字節(jié)

Content-Encoding:請求體/響應(yīng)體的編碼格式鳖悠,如gzip,deflate

Accept-Encoding:告知對方我方接受的Content-Encoding

ETag:給當(dāng)前資源的標(biāo)識,和Last-Modified优妙、If-None-Match乘综、If-Modified-Since配合,用于緩存控制

Cache-Control:取值為一般為no-cache或max-age=XX套硼,XX為個整數(shù)卡辰,表示該資源緩存有效期(秒)

3.2 常見請求Header

Authorization:用于設(shè)置身份認(rèn)證信息

User-Agent:用戶標(biāo)識,如:OS和瀏覽器的類型和版本

If-Modified-Since:值為上一次服務(wù)器返回的 Last-Modified 值邪意,用于確認(rèn)某個資源是否被更改過九妈,沒有更改過(304)就從緩存中讀取

If-None-Match:值為上一次服務(wù)器返回的 ETag 值,一般會和If-Modified-Since一起出現(xiàn)

Cookie:已有的Cookie

Referer:表示請求引用自哪個地址雾鬼,比如你從頁面A跳轉(zhuǎn)到頁面B時萌朱,值為頁面A的地址

Host:請求的主機(jī)和端口號

3.3 常見響應(yīng)Header

Date:服務(wù)器的日期

Last-Modified:該資源最后被修改時間

Transfer-Encoding:取值為一般為chunked,出現(xiàn)在Content-Length不能確定的情況下策菜,表示服務(wù)器不知道響應(yīng)版體的數(shù)據(jù)大小晶疼,一般同時還會出現(xiàn)Content-Encoding響應(yīng)頭

Set-Cookie:設(shè)置Cookie

Location:重定向到另一個URL酒贬,如輸入瀏覽器就輸入baidu.com回車,會自動跳到 https://www.baidu.com 翠霍,就是通過這個響應(yīng)頭控制的

Server:后臺服務(wù)器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锭吨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寒匙,更是在濱河造成了極大的恐慌零如,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锄弱,死亡現(xiàn)場離奇詭異考蕾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)会宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門辕翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狈谊,你說我怎么就攤上這事喜命。” “怎么了河劝?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵壁榕,是天一觀的道長。 經(jīng)常有香客問我赎瞎,道長牌里,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任务甥,我火速辦了婚禮牡辽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敞临。我一直安慰自己态辛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布挺尿。 她就那樣靜靜地躺著奏黑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪编矾。 梳的紋絲不亂的頭發(fā)上熟史,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音窄俏,去河邊找鬼。 笑死凹蜈,一個胖子當(dāng)著我的面吹牛昆烁,可吹牛的內(nèi)容都是我干的静尼。 我是一名探鬼主播鼠渺,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼普舆!你這毒婦竟也來了沼侣?” 一聲冷哼從身側(cè)響起蛾洛,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谎碍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扳碍,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喷兼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片季惯。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡候学,死狀恐怖梳码,靈堂內(nèi)的尸體忽然破棺而出掰茶,到底是詐尸還是另有隱情符匾,我是刑警寧澤甸各,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布趣倾,位于F島的核電站儒恋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炬守。R本人自食惡果不足惜酣藻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一送淆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧环凿,春花似錦羽杰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽干跛。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扬舒,已是汗流浹背泽腮。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工碘箍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲸郊,地道東北人丰榴。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像秆撮,于是被迫代替她去往敵國和親四濒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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