HTTP協議作為web服務的基礎,理所應當受到重視,但是周圍的同事能夠講清楚HTTP協議的鳳毛麟角。既然是基礎,就應該早一點掌握,所以近半年(2016-2月——2016年6月),不准備學習新技術了。首要的是將2015年看過的書,重新溫習一遍,做到查漏補缺溫故知新。看完之后,然后重點看以下的書單。

分別是:
1、《算法導論》
2、《HTTP權威指南》
3、《TCP/IP詳解 卷一:協議》
4、《TCP/IP詳解 卷二:實現》
5、《TCP/IP詳解 卷三:TCP事務協議.HTTP和UNIX域協議》
6、《數據結構與算法分析(C語言描述)》
我想這些書已經夠我半年啃的了。過年后的這些天基本上在看《圖解HTTP》,這本書講解的通俗易懂,一些難以理解的概念,語言本身已經描述的比較清晰了,但是還是畫了漫畫來表示,就更加的清晰了,如果想對HTTP協議有所了解的話,建議購買此書。但是作為深入研究的話,還是推薦《HTTP權威指南》。其實更好的方法是,徐徐漸進,先讀《圖解HTTP》,不至於被晦澀難懂的概念嚇跑,等了解的差不多了,就可以深入學習《HTTP權威指南》了。

基本的書籍已經介紹到這里了,下面來簡單介紹下HTTP的狀態碼。
在介紹狀態碼之前,要簡單講一下為什么要有狀態碼這個東西。計算機之間的通信以協議為共同基礎,客戶端和服務端都按照協議的約定進行通信。HTTP的狀態碼就在HTTP的協議內,規定了很多的狀態。客戶端請求服務端后,服務端就返回結果,同時返回狀態碼。告訴客戶端,本次請求是成功了還是失敗了,還是要客戶端做什么操作。那為什么不使用文本狀態碼呢?不是更加清晰直觀嗎?這是因為這些狀態協議里面已經規定了,提到狀態碼,就是表示本條狀態。想到一個小笑話,有助於理解這個狀態碼:
在某個外星球家庭,人們講笑話通常不講出笑話的內容,而是直接說編號,一個編號就代表一個笑話。有一天從地球來了一個年輕的帥小伙,愛上了這個家的女孩,就到他家里去做客。吃完飯,這個星球流行講笑話消食,跟地球飯后喝茶是一個道理的。
外祖父說:404;
所有的人都捧腹大笑。
外祖母說:200;
大家都忍俊不禁。
他女朋友說:502;
大家更是笑的流出了眼淚。
等輪到了他,他恍然不知所措,於是胡亂編了一個數字,那就500吧。所有的人都笑的前仰后合不能自己。
他完全搞不懂了,問大家,為什么好笑。女朋友講:我們星球上只有一本笑話書,大家都背的很熟,所以提到某個編號,就代表一個笑話,我們都知道。但是我們的笑話里,沒有500這個號碼呀。
說的就是這個道理,所以用狀態碼表示。
常用的狀態碼不多,約有14種。
1** 類狀態碼稱之為Information 狀態嗎,表示信息正在處理。
2** 類狀態碼稱為為Success狀態碼,表示請求正常完成。
3**類狀態碼稱之為Redirection 狀態碼,表示需要客戶端進行附加操作(如跳轉。重定向)
4**類狀態碼稱之為Error狀態碼,通常是由於客戶端的錯誤導致的。
5**類狀態嗎稱為Server Error狀態碼,通常是服務端的錯誤導致的。
小結下:狀態碼分為客戶端錯誤狀態碼、服務端錯誤狀態碼、成功狀態碼,重定向狀態碼等。
一 、 2** 類型狀態碼
1、200 ok 表示從客戶端發送的請求被服務端正確的處理並且已經發回了請求。
2、204 No Content 請求已經成功了,但是卻沒有返回任何結果(實體)。通常使用php die() exit()函數會引發204狀態碼。
3、206 Partial Content 范圍請求狀態碼。
范圍請求是個什么東西。看下圖就知道了.

上圖的美女圖的一些部分沒有加載完成,實際上互聯網加載圖片就是用的范圍請求。一個圖片可能有1024k,一次加載的話,頁面的渲染速度就會非常緩慢,體現會比較差。執行異步的范圍請求之后,每次加載256k的圖片,然后依次渲染出來拼接出來,加載速度就會明顯快很多。
上面的206 值得就是http請求執行了范圍請求,只獲取了一部分資源。
二、3**狀態碼
1、301 狀態碼 Moved Permanently 表示你請求的頁面資源現在已經轉移位置了,你需要到新的地方去需找該頁面。這個即重定向,服務器的response首部里會有location字段值來提示。
2、302 狀態碼(Found)和301差不過。表示你請求的頁面資源現在已經轉移位置了,你要到新的地方去尋找。但是新的地方也不是固定的,說不定過幾天還要換。不提示用戶保存書簽,提示用戶跳轉。
3、303 狀態碼。See other .表示你請求的頁面中包含着你想要拿到資源的地址。比如你到門衛處去取快遞,到了門衛處,大爺說快遞已經交給前台了。這個過程會返回303狀態碼。
4、304 Not Modified 表示資源已經找到了,但是和上次相比沒有更新。瀏覽器讀取緩存。
5、307 Temporary Redirect 臨時重定向。
三:4** 客戶端錯誤。
1、400 Bad Request 報文語法錯誤。
2、401 Unauthorized 需要通過HTTP認證(BASIC 或者DIGEST).
3、403 Forbidden 目錄、文件權限錯誤都會報此狀態碼。
4、404 服務器上無此資源,一般情況為路徑錯誤。
四:5** 服務端錯誤。
1、500 Internal Server Error 服務端錯誤,有可能是WEB應用存在錯誤。
2、503 Serveice Unavailable 服務器超負荷運行。
這些東西,沒必要死記硬背。使用的時候去查下文檔就好了。這也是我寫此篇博客的原因:留此存證,以備不時之需。
