09http初識_HTTP協(xié)議結構_關于HTTP請求GET和POST的區(qū)別_報文講解_telnet命令

一、http初識
(一)HTTP協(xié)議簡介
超文本傳輸協(xié)議(英文:Hyper Text Transfer Protocol驾荣,縮寫:HTTP)是互聯(lián)網上應用最為廣泛的一種網絡協(xié)議外构。設計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。通過HTTP協(xié)議請求的資源由統(tǒng)一資源標識符(Uniform Resource Identifiers播掷,URI)來標識审编。

(二)HTTP協(xié)議的主要特點可概括如下:
簡單:客戶向服務器請求服務時,只需傳送請求方法和路徑歧匈。請求方法常用的有GET垒酬、POST、PUT。每種方法規(guī)定了客戶與服務器聯(lián)系的不同類型伤溉。由于HTTP協(xié)議簡單般码,使得HTTP服務器的程序規(guī)模小,因而通信速度很快乱顾。
靈活:HTTP允許傳輸任意類型的數據對象板祝。正在傳輸的類型由Content-Type加以標記。
請求-響應模式:客戶端每次向服務器發(fā)起一個請求時都建立一個連接走净, 服務器處理完客戶端的請求即斷開連接券时。

(三)HTTP工作流程
HTTP,是符合C/S模型的伏伯,總是Client端來發(fā)起請求橘洞。
1、客戶機(瀏覽器)主動向服務器(web server)發(fā)出連接請求说搅。
2炸枣、服務器接受連接請求并建立起連接。 (1,2步即TCP三次握手)
3弄唧、客戶機通過此連接向服務器發(fā)出GET等http命令适肠,(“HTTP請求報文”)。
4候引、服務器接到命令并根據命令向客戶機傳送相應的數據侯养,(“HTTP響應報文”)。
5澄干、客戶機接收從服務器送過來的數據逛揩。
6、服務器發(fā)送完數據后麸俘,主動關閉此次連接辩稽。 (”TCP四次分手“)。
概況起來就是 客戶/服務器傳輸過程可分為四個基本步驟:

  1. 瀏覽器與服務器建立連接疾掰; (TCP三次握手)
  2. 瀏覽器向服務器請求文檔搂誉;
  3. 服務器響應瀏覽器請求徐紧;
  4. 斷開連接静檬。(”TCP四次分手“)

(四)HTTP協(xié)議的URL,URI介紹
HTTP協(xié)議中的URL(URL是一種特殊類型的URI(Uniform Resource Identifier),包含了用于查找某個資源的足夠的信息)
主要是用于定位服務器端資源的位置并级。我們來看下它的語法定義:
http://host[:port][path]
http://localhost:8080/LoginAndRegister/login
其中:
http:// 表示我們要使用HTTP協(xié)議拂檩;
host 表示一個可用的域名或IP地址踱侣;
port 為可選槽奕,表示要請求的端口號,缺省情況下為80
path 為可選覆致,表示要請求的資源所在的路徑(也叫URI),缺省情況下為/ ,如果URL中沒有給出path望抽,那么當它作為請求URI時加矛,必須以“/”的形式給出,比如瀏覽器中輸入: www.abc.edu.cn 則瀏覽器自動換成 www.abc.edu.cn/ 煤篙。

二斟览、HTTP協(xié)議結構
(一)HTTP協(xié)議格式比較簡單,格式如下:

由上圖也可以看出來 HTTP 有兩類報文:
請求報文——從客戶向服務器發(fā)送請求報文辑奈。
響應報文——從服務器到客戶的回答苛茂。

(二)HTTP 請求方法概述:
方法(操作) 意義
GET: 請求讀取由URL所標識的信息 參數是放在URL里面的
POST: 給服務器發(fā)送數據 參數是放在請求體里面
HEAD: 請求讀取由URL所有標識的信息的首部
PUT: 在指明的URL下存儲一個文檔
OPTION: 請求一些選項的信息
DELETE: 刪除指明的URL所標識的資源
TRACE: 用來進行環(huán)回測試的請求報文
CONNECT: 用于代理服務器

(三)HTTP狀態(tài)碼
狀態(tài)碼都是三位數字,第一位表示狀態(tài)類別鸠窗,共分五種妓羊,如下:
1xx表示通知消息的,如請求收到了或正在進行處理
2xx表示成功稍计,如接受或知道了
3xx表示重定向躁绸,表示要完成請求還必須采取進一步的行動
4xx表示客戶端的差錯,如請求中有錯誤的語法或不能完成
5xx表示服務器的差錯臣嚣,如服務器失效無法完成請求

其實常用的狀態(tài)碼并不多涨颜,我們把常見的列舉在此: 200 OK:客戶端請求成功了,客戶端要的東西就在響應報文里了茧球;
301 Moved Permanently:客戶端啊庭瑰,你要請求的資源已經永久的搬家了,我把他的新地址放到了Location頭部域中了抢埋;
302 Moved Temporarily:客戶端啊弹灭,你要請求的資源臨時有事去別的地方了,我把他的位置放到了Location頭部域中了揪垄,你可以先去那里找他穷吮,不過他應該是會回到他自己的家的;
304 Not Modified:客戶端啊饥努,你要請求的資源自從上次你請求之后捡鱼,就再也沒有改動過,我想你是應該早就有這個資源了酷愧,所以在響應報文的數據部分我也沒有再放這個資源驾诈。
400 Bad Request:客戶端發(fā)來的請求報文里有語法錯誤,服務器端實在看不懂了溶浴;
401 Unauthorized:客戶端發(fā)來的請求不是合法來源的請求乍迄,也就是這個客戶端是沒有被授權的;
403 Forbidden:服務器端順利收到了客戶端的請求士败,但是因為某些理由闯两,服務器端拒絕為他提供服務
404 Not Found:客戶端要請求的資源不存在,八成是資源地址寫錯了;
500 Internal Server Error:很遺憾漾狼,服務器不能給你提供服務了重慢,服務器內部出現(xiàn)了不可預知的問題了;
502 Bad Gateway:客戶端你好逊躁,我是請求報文的代理服務器伤锚,持有資源的那個服務器在給我發(fā)送資源時出問題了;
503 Server Unavailable:服務器現(xiàn)在是太忙了志衣,暫時不能給你這個客戶端提供服務了屯援,或許稍后會恢復。

三念脯、關于HTTP請求GET和POST的區(qū)別

1.GET提交:請求的數據會附在URL之后(就是把數據放置在HTTP協(xié)議頭<request-line>中)狞洋,以?分割URL和傳輸數據,多個參數用&連接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD绿店。如果數據是英文字母/數字吉懊,原樣發(fā)送,如果是其他類型的則需要編碼后發(fā)送

POST提交:把提交的數據放置在HTTP包的包體<request-body>中假勿。上文示例中紅色字體標明的就是實際的傳輸數據
因此借嗽,GET提交的數據會在地址欄中顯示出來,而POST提交转培,地址欄不會顯示出數據

2.傳輸數據的大卸竦肌:
首先聲明,HTTP協(xié)議沒有對傳輸的數據大小進行限制,HTTP協(xié)議規(guī)范也沒有對URL長度進行限制浸须。 而在實際開發(fā)中存在的限制主要有:
GET:特定服務器對URL長度有限制惨寿,例如IE對URL長度的限制是2048字節(jié)。對于其他瀏覽器删窒,如Netscape裂垦、FireFox等,理論上沒有長度限制肌索,其限制取決于操作系統(tǒng)以及服務器的支持蕉拢。
因此對于GET提交時,傳輸數據就會受到URL長度的限制诚亚。
POST:由于不是通過URL傳值晕换,理論上數據不受限。但實際各個WEB服務器會規(guī)定對post提交數據大小進行限制亡电,Apache届巩、IIS6都有各自的配置硅瞧。

3.安全性:
POST的安全性要比GET的安全性高份乒。通過GET提交數據,用戶名和密碼將明文出現(xiàn)在URL上,
因為:(1)登錄頁面有可能被瀏覽器緩存或辖,(2)其他人查看瀏覽器的歷史紀錄瘾英,那么別人就可以拿到你的賬號和密碼了。

四颂暇、報文講解
(一)請求報文
請求報文 報文格式如下:

空白行用CR LF對表示缺谴。CRLF對是回車(Carriage Return,CR)和換行(Line Feed耳鸯,LF)字符的ASCII碼湿蛔,它表示報頭組件的結束。

為了深入理解HTTP 協(xié)議請求報文县爬,下面直接來一個例子:

GET img.t.sinajs.cn/t5/style/css/module/base/home_frame.css?version=cc73de6cd25d6dbf HTTP/1.1
/* 第一行叫做請求行(request)阳啥,其他的各行都叫做頭部行(header)請求行包括三個字段:
方法字段、URI字段财喳、HTTP版本字段 這個例子的請求行察迟,是要做這樣一件事:用HTTP協(xié)議
1.1版本,使用GET方法耳高,向服務端申請/t5/style/css/module/base/home_frame.css?version=cc73de6cd25d6dbf資源 /
/
下面都屬于頭部行 /
Host: img.t.sinajs.cn
/
Host用來指定要請求的服務器端主機為img.t.sinajs.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0
/* User-agent域則是用來指定當前這個請求報文是由誰產生的扎瓶,通常來說,一般這里設置的是用戶所使用的瀏覽器類型泌枪。/
Accept: text/css,
/;q=0.1
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
/
Accept-language域概荷,客戶端所能識別的語言 如果沒有 則 采取默認語言 /
Accept-Encoding: gzip, deflate
/
客戶端所能識別的編碼壓縮格式 gzip*/
Referer: http://weibo.com/840450770/home=5&page=2&pre_page=1&end_id=3664048949921640&end_msign=-1
Connection: keep-alive

  1. /* 這里有一個空行,而且是必須有這個空行碌燕。這是HTTP協(xié)議的硬性規(guī)定乍赫。 */

請求報文段就是下面這樣,細細琢磨吧陆蟆。

GET /t5/style/css/module/base/home_frame.css?version=cc73de6cd25d6dbf HTTP/1.1Host: img.t.sinajs.cnUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0Accept: text/css,/;q=0.1Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateReferer: http://weibo.com/840450770/home?wvr=5&page=2&pre_page=1&end_id=3664048949921640&end_msign=-1Connection: keep-alive

(二)響應報文
響應報文格式如下:

一般情況下雷厂,服務器接收并處理客戶端發(fā)過來的請求后會返回一個HTTP的響應消息。HTTP的響應消息也是由三個部分組成叠殷,
分別是:響應行/狀態(tài)行改鲫、響應頭、空行林束、響應數據像棘。
舉例:

/* 第一行是狀態(tài)行,包括三個字段:版本字段壶冒、狀態(tài)碼字段缕题、原因短語字段 /
HTTP/1.1 200 OK
/
本例中,HTTP協(xié)議的響應報文想表達的意思是服務器使用的是HTTP協(xié)議1.1版本胖腾,
而且找到了客戶端所要的資源烟零,且會將響應報文發(fā)給客戶端瘪松,整個過程都很正常 /
Expires: Wed, 22 Jan 2014 02:51:09 GMT
/
給出響應過期的日期和時間。為了讓代理服務器或瀏覽器在一段時間以后更新緩存中的內容
(再次訪問曾訪問過的頁面時锨阿,直接從緩存中加載宵睦,縮短響應時間和降低服務器負載)
我們可以使用Expires指定頁面過期的時間)/
Date: Tue, 07 Jan 2014 02:51:09 GMT
/
這里記錄了這個響應報文被發(fā)送出去的時間點 /
Server: nginx/1.4.2 Apache 阿帕奇
/
Server域表明這個響應報文是nginx服務器發(fā)出的,且nginx的版本是1.4.2 /
Content-Type: text/css
/
指出所包含的數據是txt/css文本內容 /
Last-Modified: Mon, 06 Jan 2014 07:50:31 GMT
/
用于記錄本響應報文中所存的數據的最后修改時間 /
Transfer-Encoding: chunked
/
服務端向客戶端傳輸數據所采用的傳輸模式(僅在HTTP1.1中出現(xiàn))/
Cache-Control: max-age=1296000
/
服務端要求中間代理及客戶端如何緩存自己響應的數據/
Content-Encoding: gzip
/
用于記錄文檔的壓縮方法 gzip/
Age: 1
X-Via: 1.1 whjyw137:3 (Cdn Cache Server V2.0)
Connection: keep-alive
/
服務器端會保持住這個連接*/

/* 看這里墅诡,還得看這里壳嚎,和請求報文類似,這里也有一個空行 */

(實際數據 …………)

響應報文末早,原報文如下:

HTTP/1.1 200 OK Expires: Wed, 22 Jan 2014 02:51:09 GMTDate: Tue, 07 Jan 2014 02:51:09 GMTServer: nginx/1.4.2Content-Type: text/cssLast-Modified: Mon, 06 Jan 2014 07:50:31 GMTTransfer-Encoding: chunkedCache-Control: max-age=1296000Content-Encoding: gzipAge: 1X-Via: 1.1 whjyw137:3 (Cdn Cache Server V2.0)Connection: keep-alive
五烟馅、telnet命令
使用telnet命令 可以使本機與遠程服務器構建一個連接
使用telnet命令模擬http請求報文 然后服務器返回響應報文
telnet www.baidu.com 80

GET /index.html HTTP/1.1
Host:www.baidu.com
Connection:close
回車空行
回車空行

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市然磷,隨后出現(xiàn)的幾起案子焙糟,更是在濱河造成了極大的恐慌,老刑警劉巖样屠,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穿撮,死亡現(xiàn)場離奇詭異,居然都是意外死亡痪欲,警方通過查閱死者的電腦和手機悦穿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來业踢,“玉大人栗柒,你說我怎么就攤上這事≈伲” “怎么了瞬沦?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雇锡。 經常有香客問我逛钻,道長,這世上最難降的妖魔是什么锰提? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任曙痘,我火速辦了婚禮,結果婚禮上立肘,老公的妹妹穿的比我還像新娘边坤。我一直安慰自己,他們只是感情好谅年,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布茧痒。 她就那樣靜靜地躺著,像睡著了一般融蹂。 火紅的嫁衣襯著肌膚如雪旺订。 梳的紋絲不亂的頭發(fā)上弄企,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音耸峭,去河邊找鬼桩蓉。 笑死淋纲,一個胖子當著我的面吹牛劳闹,可吹牛的內容都是我干的。 我是一名探鬼主播洽瞬,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼本涕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伙窃?” 一聲冷哼從身側響起菩颖,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎为障,沒想到半個月后晦闰,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鳍怨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年呻右,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞋喇。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡声滥,死狀恐怖,靈堂內的尸體忽然破棺而出侦香,到底是詐尸還是另有隱情落塑,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布罐韩,位于F島的核電站憾赁,受9級特大地震影響,放射性物質發(fā)生泄漏散吵。R本人自食惡果不足惜缠沈,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望错蝴。 院中可真熱鬧洲愤,春花似錦、人聲如沸顷锰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官紫。三九已至肛宋,卻和暖如春州藕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酝陈。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工床玻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沉帮。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓锈死,卻偏偏與公主長得像,于是被迫代替她去往敵國和親穆壕。 傳聞我的和親對象是個殘疾皇子待牵,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容