Http協議常用知識

Doto丶發表於2018-03-27

HTTP(Hypertext Transfer Protocol),超文字傳輸協議,他是現代網際網路最基本也是最重要的協議。Http協議是無狀態的,應用層協議,是web開發的基礎。

Http基礎

http協議,簡單的說就是客戶端用固定格式向伺服器傳送一條資訊,伺服器收到此請求之後經過處理返回一個固定格式的資料。

URL

如果我們想訪問一個網站,並不需要熟悉http協議,只需要在瀏覽器中輸入對應網站的URL即可。

URL用於描述一個網路上的資源。就像門牌號之於房子一樣的作用。

http://www.google.com:80/search?name=huyanshi#top
在上面這個url中:
http:指定所用的協議,原先為http,最近大部分網站都已經使用更加安全的https。
www.google.com:host地址,經過解析可以得到網站的ip地址。
80:埠號。Http伺服器的預設埠是80,這種情況下埠號可以省略。
/search:訪問的資源在伺服器上的路徑。
?name=huyanshi:傳送給伺服器的資料。
#top:錨。

請求Method

我們通過url告訴了瀏覽器我們要訪問的資源路徑,那麼我們對這個資源想做什麼呢?這個操作就是通過method定義的,http1.1定義了8種標準的操作。

GET:GET方法應該僅被用在向伺服器請求檢視一個資料時。

POST:POST請求會向指定的自願提交資料,請求伺服器進行處理。

HEAD:HEAD方法只會獲取伺服器響應的響應頭資訊,常用於客戶端檢視伺服器端的效能。

PUT:PUT方法向指定的資源位置上傳其最新內容,通常用於上傳檔案。

DELETE:刪除對應資源。

CONNECT:Http1.1預留。

OPTIONS:返回對應資源支援的Http請求方法。

TRACE:回顯伺服器收到的資訊。

其中,PUT,DELETE,POST,GET對應資料操作的增刪改查,其中又以GET和POST最為常用。

GET和POST的區別和聯絡

這個問題也是面試問題裡的常客了,但是其實很難說的清楚,網上的答案也是各抒己見,並無統一答案。 我的理解是,GET和POST最大的區別是語義區別,GET用於請求資料,POst用於提交資料。(http規範裡規定,但是具體實現的時候有沒有遵守就不一定了,**後面所說的很多區別都是規範,而不是強行要求的實現。**)

區別有:GET是安全的,冪等的,可快取的,POST是不安全的,不冪等的,不可快取的。

安全性:

對於伺服器的安全性:GET請求只用於獲取資料,不會修改伺服器資源,因此對於伺服器而言GET方法是安全的,而POst會提交一部分資料,伺服器根據資料對資源進行修改,因此對於伺服器而言Post方法不安全。

對於使用者的安全性:GET方法將請求引數放在URL裡進行明文傳輸,如果引數中包含密碼,手機號碼等內容會直接顯示並且所有人可見,並且Url會及誰來瀏覽器中。POST方法對請求資料寫在請求體中,也是明文傳輸,但是比起GET是安全了一點點的,,,,,。

冪等的:
GET:規範中的GET方法連續執行多次,得到的結果應該是一樣的。 POST:POST執行每一次可能都會對伺服器端的資源進行改變,因此執行多次結果會不同。
這也就是為什麼當你在瀏覽器中點選返回按鈕,有時候會提醒你,當前頁面提交表單,如果返回或者重新整理會造成表單重複提交,請你確認操作的原因。

可快取的:顧名思義就是一個方法是否可以被快取,此RFC裡GET,HEAD和某些情況下的POST都是可快取的,但是絕大多數的瀏覽器的實現裡僅僅支援GET和HEAD。

大多數的區別都是“語義”區別而不是“語法”區別
就像你也可以用GET來提交一個引數,而用POST方法查詢一個資料,但是這樣會造成語義混亂!千萬不要!

關於GET和POST的區別,我看到一個講的很好的小栗子,分享給大家:

微博場景中:

www.weibo.com?id=222 使用這個URL檢視一條微博,應該用GET請求,這樣你分享給別人,別人訪問這個URL就可以看到這條微博。而如果使用POST,別人拿到這條URL是“www.weibo.com”,毫無意義。

www.weibo.com?user=huyanshi&content=xixixi 而發微博,點贊,評論這樣的操作就應該使用POST請求。使用上面這條URL為huyanshi使用者發一條內容為xixixi的微博,那麼別人複製一下這條URL也可以替你發一條微博了。

HTTP狀態碼

客戶端通過METHOD定義請求型別,服務端通過返回的狀態碼告訴客戶端相應型別。

http1.1定義了5類狀態碼。狀態碼由三位數字組成,第一個數字定義了響應的類別。

1XX:表示q請求已經成功接收,可以繼續傳送請求,如果已經傳送完成可以忽略此狀態碼。
2XX:成功。 3XX:重定向。要想完成請求需要進行下一步的處理。
4XX:客戶端錯誤。請求有語法錯誤或者請求無法實現。
5XX:伺服器錯誤。伺服器對於合法的請求處理過程出現錯誤。

常見狀態碼:

200 				//成功
400 Bad Request  //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden  //伺服器收到請求,但是拒絕提供服務
404 Not Found  //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable  //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常
複製程式碼




ChangeLog

2018-03-27 完成

以上皆為個人所思所得,如有錯誤歡迎評論區指正。

歡迎轉載,煩請署名並保留原文連結。

聯絡郵箱:huyanshi2580@gmail.com

更多學習筆記見個人部落格------>呼延十

相關文章