怎樣學習 HTTP 協議?
想學 Node.js , 發現需要足夠 http 的基礎:
http://weibo.com/1651843872/xxzdihHzy 網上給出的資料似乎與此關聯不是非常緊密: http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html 為了實用, 應該怎樣深入 http 協議? 具體什麼方面?相關問題: 怎麼樣才算熟悉HTTP協議? http://www.zhihu.com/question/19910495
去看rfc嘛,那是標準。
http1.1是rfc2616,在這 http://www.ietf.org/rfc/rfc2616.txt rfc是有些抽象晦澀的,學究氣比較重。 不過或許你需要看的不是rfc這麼正式的東西,假設你熟悉socket的話,裝個抓包工具玩玩,寫寫腳本(shell,python,php),玩玩可以查看http協議頭的瀏覽器插件,配置配置apache或nginx,先跟那些名詞混個臉熟,再上網多看看博客,在用中學可能比較實際。寫個基於 gae 的翻X軟體,邊寫邊把《HTTP權威指南》翻一翻。
注意,不要搞 socket 轉發那一套。其實也沒法搞 socket 轉發那一套,因為 gae 不允許。所以基於 gae 的話,就需要把傳來的 http 包解開,解開之後,再通過 gae 的 http_fetch 介面,帶上解開得到的 http 屬性去目標站獲取數據。這個解包的過程,應該很有助於理解 http 的。
了解一下HTTP協議的處理流程吧,沒壞處的http://t.cn/RZlABkl
HTTP權威指南 http://book.douban.com/subject/10746113/
如果是希望學習本質上的知識以及背後的原理,可以去看rfc(當然這還是不夠的);如果是為了面試或者普通的工作需要。這裡假設題主是為了後者,那麼建議先看看以下的幾篇博文:
我覺得學習任何一門知識,都需要系統化,而不是碎片。但是現如今互聯網上的信息過於碎片化,感覺很多都是泛泛而談,或者寫得很好但是卻不全面。於是我有如下的總結。供你參考:
一、閱讀好的博客
比如阮一峰老師的
- 互聯網協議入門(一) - 阮一峰的網路日誌(這個還有第二篇)、
- 以及http協議入門、
- HTTPS 升級指南 - 阮一峰的網路日誌。
二、看書
看一本好書永遠是高效的學習方法,這裡推薦幾本經典的作品。
這幾本書可以在這裡下載到電子版本:http學習資料 | http知識積累以及相關的實踐 深度筆記
- HTTP權威指南
- 圖解HTTP
- 圖解TCP IP
- TCP-IP詳解
電子書下載傳送門
三、別人的筆記
看別人總結好的知識,有利於自己快速學習,快速吸收。省去了去網上大海撈針,這裡看一點、那裡看一點的成本。零零散散的知識,碎片化的學習需要改變。我們需要的是系統的學習,而且可以定期複習的模式。那麼,看別人的筆記就是一個不錯的方法。
這裡我在gayhub上發現了一個比較好的,
《HTTP權威指南》每章的知識點總結! 在gayhub上有將進400顆星
以及深度筆記上的一篇比較好的筆記:
http知識積累以及相關的實踐 深度筆記
四、實踐出真知
開發工作過程中,多使用F12,查看chrome自帶的控制台。 分析每次請求和響應,每一行請求頭,每一行響應頭,每一個響應體、請求體。它們的具體意義是什麼,如果能做到知其然,我認為對於普通的工作就已經足夠了。
我只是一枚小白,所以沒有上面的回答那麼高大上。
以上..
&
最近我在我們團隊還分享http.如下:
Http協議.swf_免費高速下載如果你要開發瀏覽器開發webserver,那就看RFC吧。其他情況看看《HTTP權威指南》然後再打開chrome F12看看基本就搞定了。
自己總結的一篇最基本的HTTP協議
開發之前應該了解的HTTP - CSDN博客blog.csdn.net這樣學習就夠了
如果你對TCP、IP等底層協議有了一些了解,那麼看《HTTP權威指南》把,介紹了HTTP的方方面面,很詳細,但需要慢慢理解。
裝一個firebug,多寫一些小測試程序,很快就熟悉了。
打開chrome F12 控制台點擊Network,自己用node的http模塊寫個簡單的程序監聽AJAX請求,解析報文,處理POST或者GET請求,配合一些抓包工具如fiddler,基本上可以熟悉http啥回事怎麼操作的,然後一步步往更加底層的協議如TCP/IP啊等等深入去學習,感覺這種學習曲線會容易接受一點。一開始直接看權威指南,有點難啃
推薦閱讀:
※大家在工作中那些地方用到了http協議的細節?
※golang net/http的小問題?
※想寫個web伺服器,用Go語言實現,需要有哪些前提知識呢?
※怎麼在Linux操作系統搭建HTTP伺服器?
※這種情況下,304還是200更好?