http的簡單學(xué)習(xí)

今天中午學(xué)習(xí)了下http犀忱,之前沒有系統(tǒng)性的學(xué)過得院,只知道它是超文本傳輸協(xié)議左电,但對其的一些基本知識還是感覺還是很陌生的牌废。當(dāng)我中午看見http這個詞的時候祖灰,首先就想到的一個問題的就是,這是個協(xié)議是用來做什么的畔规?
帶著這個問題局扶,我們查找了資料,http設(shè)計之初是為了將超文本標(biāo)記語言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器∪ǎ現(xiàn)在http的作用已不局限于HTML的傳輸,圖片文件三妈,查詢結(jié)果等數(shù)據(jù)也是可以傳輸?shù)摹K耐ㄐ胚^程是這樣的:

http協(xié)議通信圖

那么莫绣,問題來了畴蒲,我在web 瀏覽器中輸入了網(wǎng)址之后到底發(fā)生了什么?它是如何到server的对室?server又是如何響應(yīng)瀏覽器的請求的模燥?我們來探究下這個過程咖祭。

一.http的請求響應(yīng)流程

我們先輸入網(wǎng)址以www.google.com為例,瀏覽器將顯示google的首頁蔫骂。在這個過程中么翰,通過Network的記錄,我們就可以知道辽旋。在Network中浩嫌,定位到第一條記錄,點擊补胚,右側(cè)將顯示Request Headers码耐,我們就可以看到瀏覽器發(fā)給google服務(wù)器的請求:

http發(fā)送圖

scheme:指定低層使用的協(xié)議(例如:http, https, ftp)
host:HTTP服務(wù)器的IP地址或者域名
port#:HTTP服務(wù)器的默認(rèn)端口是80,這種情況下端口號可以省略溶其。如果使用了別的端口骚腥,必須指明,例如http://www.mywebsite.com:8080/
path:訪問資源的路徑
Accept:我能接受這些類型的文件
User-Agent: 我使用的是何種操作系統(tǒng)上的哪個類型那個版本的瀏覽器
Accept-Encoding:承認(rèn)接受何種方式的壓縮文件
Cookie:發(fā)送存儲在本機(jī)的cookies信息給服務(wù)器

服務(wù)器又返回給瀏覽器了什么內(nèi)容?

服務(wù)器返回的頭部信息

200:表示一個響應(yīng)的狀態(tài)碼
Content-Type:指示響應(yīng)的內(nèi)容瓶逃,這里是text/html束铭,表示HTML網(wǎng)頁。

_ 請注意_:瀏覽器就是依靠Content-Type來判斷響應(yīng)的內(nèi)容是網(wǎng)頁還是圖片金闽,是視頻還是音樂纯露。瀏覽器并不靠URL來判斷響應(yīng)的內(nèi)容,所以代芜,即使URL是這樣的埠褪,如: http://example.com/abc.jpg, 它也不一定就是圖片挤庇。

服務(wù)器響應(yīng)的內(nèi)容信息

所以钞速,我們總結(jié)http的請求流程如下:

1.瀏覽器首先向服務(wù)器發(fā)送HTTP請求,請求包括:
  • 方法:GET還是POST嫡秕,GET僅請求資源渴语,POST會附帶用戶數(shù)據(jù);
  • 路徑:/full/url/path昆咽;
  • 域名:由Host頭指定:Host: www.google.com.cn驾凶;
    以及其他相關(guān)的Header;

如果是POST掷酗,那么請求還包括一個Body调违,包含用戶數(shù)據(jù)。

2.服務(wù)器向瀏覽器返回HTTP響應(yīng),
  • 響應(yīng)代碼:如200泻轰。
  • 響應(yīng)類型:由Content-Type指定技肩;
  • 以及其他相關(guān)的Header;

通常服務(wù)器的HTTP響應(yīng)會攜帶內(nèi)容浮声,也就是有一個Body虚婿,包含響應(yīng)的內(nèi)容旋奢,網(wǎng)頁的HTML源碼就在Body中。

3.如果瀏覽器還需要繼續(xù)向服務(wù)器請求其他資源然痊,比如圖片至朗,就再次發(fā)出HTTP請求,重復(fù)步驟1玷过、2爽丹。

搞清楚了http數(shù)據(jù)傳輸?shù)南嚓P(guān)流程筑煮,接下來我們看下和http相關(guān)的基本概念:

二.http的特點:

1.無連接

無連接的含義是限制每次連接只處理一個請求辛蚊。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后真仲,即斷開連接袋马。采用這種方式可以節(jié)省傳輸時間

2.媒體獨立

這意味著,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容秸应,任何類型的數(shù)據(jù)都可以通過HTTP發(fā)送虑凛。客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類型

3.無狀態(tài)

指的是協(xié)議對于事務(wù)處理沒有記憶能力软啼。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息桑谍,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大祸挪。另一方面锣披,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。

換而言之:無狀態(tài)也就是說在同一個連接中贿条,兩個成功執(zhí)行的請求之間是沒有關(guān)系的雹仿。這就帶來了一個問題,用戶沒辦法在一個網(wǎng)站進(jìn)行連續(xù)的交互整以,比如在一個電商網(wǎng)站里胧辽,用戶把某個商品加入了購物車中,換了一個頁面后再次添加商品公黑,兩次添加商品的請求沒有聯(lián)系邑商,瀏覽器無法知道最終用戶都選擇了哪些商品。兩種用于保持HTTP連接狀態(tài)的技術(shù)就應(yīng)運(yùn)而生了凡蚜,一個是Cookie人断,而另一個則是Session。

三.http的消息結(jié)構(gòu)

1.客戶端請求消息:三部分

第一部分叫Request line(請求行)番刊, 第二部分叫http header含鳞,第三部分是body。
(1)請求行:包括http請求的種類芹务,請求資源的路徑蝉绷,http協(xié)議版本;
(2)http header:http頭部信息;
(3)body:發(fā)送給服務(wù)器的query信息 當(dāng)使用的是"GET" 方法的時候鸭廷,body是為空的(GET只能讀取服務(wù)器上的信息,post能寫入)

請求報文格式

在上圖中熔吗,我們看見了URL ,那么問題問題來了辆床,URL 該如何理解?
URL:
(1) 概念:URL—Uniform Resource Location統(tǒng)一資源定位符桅狠,說白了就是我們常說的“網(wǎng)址”
(2) 組成:Protocol(協(xié)議)+Host(主機(jī))+Port(端口)+Query

示例URL:
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

Schema: http
host: www.mywebsite.com
path: /sj/test
URL params: id=8079
Query String: name=sviergn&x=true
Anchor: stuff
2.服務(wù)端響應(yīng)消息

也分為三部分讼载,第一部分叫request line, 第二部分叫request header,第三部分是body中跌。
(1)request line:協(xié)議版本咨堤、狀態(tài)碼、message
(2)request header:request頭信息
(3)body:返回的請求資源主體


http響應(yīng)結(jié)構(gòu)圖

四.HTTP請求方法

在客戶機(jī)和服務(wù)器之間進(jìn)行請求-響應(yīng)時漩符,兩種最常被用到的方法是:GET 和 POST,上面我們探究的過程中method告訴我們用到的是GET方法一喘。

 GET - 從指定的資源請求數(shù)據(jù)。
 POST - 向指定的資源提交要被處理的數(shù)據(jù)

其他的方法如下圖:

http的部分方法

既然說道了get和post,那么常見的問題就來了嗜暴,get和post 的區(qū)別是什么凸克?在這里,我總結(jié)了一下它們的區(qū)別:

GET一般用于獲取/查詢資源信息闷沥,而POST一般用于更新資源信息.

1. GET 提交的數(shù)據(jù)會放在URL之后萎战,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連舆逃,如EditPosts.aspx?name=test1&id=123456蚂维。POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中。
2. GET提交的數(shù)據(jù)大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數(shù)據(jù)沒有限制.
3. GET方式需要使用Request.QueryString來取得變量的值颖侄,而POST方式通過Request.Form來獲取變量的值鸟雏。
4. GET方式提交數(shù)據(jù),會帶來安全問題览祖,比如一個登錄頁面孝鹊,通過GET方式提交數(shù)據(jù)時,用戶名和密碼將出現(xiàn)在URL上展蒂,如果頁面可以被緩存或者其他人可以訪問這臺機(jī)器又活,就可以從歷史記錄獲得該用戶的賬號和密碼.

接下來是什么問題呢?在上面我們看見如瀏覽器若請求后锰悼,則返回了一個狀態(tài)碼200,那么200有何含義柳骄,還有其他的狀態(tài)碼?

五.狀態(tài)碼

狀態(tài)碼由三位數(shù)字組成箕般,第一個數(shù)字定義了響應(yīng)的類別

1XX     提示信息 - 表示請求已被成功接收耐薯,繼續(xù)處理
2XX     成功 - 表示請求已被成功接收,理解,接受
3XX     重定向 - 要完成請求必須進(jìn)行更進(jìn)一步的處理
4XX     客戶端錯誤 - 請求有語法錯誤或請求無法實現(xiàn)
5XX     服務(wù)器端錯誤 - 服務(wù)器未能實現(xiàn)合法的請求

常見的狀態(tài)碼曲初,如下:

  • 200 OK 請求被成功地完成体谒,所請求的資源發(fā)送回客戶端
  • 302 Found 重定向,新的URL會在response中的Location中返回臼婆,瀏覽器將會使用新的URL發(fā)出新的Request
  • 304 Not Modified 文檔已經(jīng)被緩存抒痒,直接從緩存調(diào)用
  • 400 Bad Request 客戶端請求與語法錯誤,不能被服務(wù)器所理解
  • 403 Forbidden 服務(wù)器收到請求颁褂,但是拒絕提供服務(wù)
  • 404 Not Found 請求資源不存在
  • 500 Internal Server Error 服務(wù)器發(fā)生了不可預(yù)期的錯誤
  • 503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請求故响,一段時間后可能恢復(fù)正常

最后一個問題就是,就是網(wǎng)頁中存在的Content-Type了颁独。

六.Content-Type

內(nèi)容類型彩届,一般是指網(wǎng)頁中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁的編碼奖唯,決定瀏覽器將以什么形式惨缆、什么編碼讀取這個文件糜值,這就是經(jīng)撤峤荩看到一些Asp網(wǎng)頁點擊的結(jié)果卻是下載到的一個文件或一張圖片的原因。

若想了解詳細(xì)的HTTP content-type 寂汇,請戳這個菜鳥網(wǎng)址

參考網(wǎng)址:
1.https://www.zybuluo.com/yangfch3/note/167490
2.https://www.zybuluo.com/yangfch3/note/113028
3.http://www.runoob.com/http/http-tutorial.html
4.http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末病往,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骄瓣,更是在濱河造成了極大的恐慌停巷,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榕栏,死亡現(xiàn)場離奇詭異畔勤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扒磁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門庆揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妨托,你說我怎么就攤上這事缸榛。” “怎么了兰伤?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵内颗,是天一觀的道長。 經(jīng)常有香客問我敦腔,道長均澳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮找前,結(jié)果婚禮上筒捺,老公的妹妹穿的比我還像新娘。我一直安慰自己纸厉,他們只是感情好系吭,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颗品,像睡著了一般肯尺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躯枢,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天则吟,我揣著相機(jī)與錄音,去河邊找鬼锄蹂。 笑死氓仲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的得糜。 我是一名探鬼主播敬扛,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朝抖!你這毒婦竟也來了啥箭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤治宣,失蹤者是張志新(化名)和其女友劉穎急侥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侮邀,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡坏怪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绊茧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铝宵。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖按傅,靈堂內(nèi)的尸體忽然破棺而出捉超,到底是詐尸還是另有隱情,我是刑警寧澤唯绍,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布拼岳,位于F島的核電站,受9級特大地震影響况芒,放射性物質(zhì)發(fā)生泄漏惜纸。R本人自食惡果不足惜叶撒,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耐版。 院中可真熱鬧祠够,春花似錦、人聲如沸粪牲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腺阳。三九已至落君,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亭引,已是汗流浹背绎速。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留焙蚓,地道東北人纹冤。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像购公,于是被迫代替她去往敵國和親萌京。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理君丁,服務(wù)發(fā)現(xiàn)枫夺,斷路器,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 一绘闷、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,372評論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,226評論 3 82
  • http協(xié)議有http0.9较坛,http1.0印蔗,http1.1和http2三個版本,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,866評論 0 3
  • 每一次我們都會發(fā)現(xiàn)丑勤,放棄抵抗是一種選擇华嘹,而且并非不可避免。了解我們是如何給自己許可的法竞,能讓我們學(xué)會如何不離正軌耙厚。 ...
    易秒閱讀 150評論 0 0