Http協議淺析

Http協議是超文本傳輸協議,是應用層的協議,其協議本身是無連接、無狀態,是基於TCP/IP層之上的。上面這些話是《計算機網絡》上的原話,可能對我們實際工作和學習中沒有太大的幫助。各位博友們注意了,下面這些話可對我們實際工作和學習中幫助是大大得。
Http協議是請求/響應協議,客戶端發送一個請求給服務器,這一個請求(簡稱 Http請求)包括哪些內容呢?有請求行(Request Line)、請求報頭(Request Header)、請求正文(message-body),服務器並做出響應。這響應(簡稱Http響應)包括哪些內容呢?有狀態行(Response Line)、響應報頭(Response Header)、響應正文(Entity)。這也就完成了客戶端與服務器的一次通信過程。
各位看客們注意了,下面我就詳細講解一下上面這段話的含義。
工慾善其事必先利其器,想要深刻的Http通信過程,就少不了實踐。首先亮出利器(原料):一個抓包工具HTTPWATCH軟件和IE瀏覽器。
HttpWatch工具的地址是:
http://download.csdn.net/detail/u012811078/9670418
先安裝HttpWatch工具,打開IE瀏覽器單擊鼠標右鍵,裏面有一選項HttpWatch Professional就可以使用這個抓包工具了。其次還需要搭建一個本地的Tomcat服務器,這個需要博友們自己在網上找資源。

1. Http請求

a.請求行(Request Line)
格式:這裏寫圖片描述
先來解釋簡單的,字母SP表示反斜槓,CRLF表示回車和換行
Method 符號指出Request-URI標識的資源上所執行的方法。Method包括 ‘GET’;’POST’;’HEAD’;’PUT’;’DELETE’;’TRACE’;’CONNECT’;
Request-URI是統一資源定位符,標識應用到請求上的資源。
b.請求報文(Request Header)
這些 request header fields 允許客戶端傳輸額外的關於請求和客戶端本身的信息給服務器,這些Fields扮演着請求修飾符,與編程語言方法符號上的參數有相同的語義。
這裏先寫兩個簡單的html格式的文件,對這些概念有一個具體的認識。
001.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>001</title>
</head>
<body>
<form action="http://localhost:8080/002.html" method="get">
名字:
<input type="text" name="name">
<input type="submit" name="button" value="submit">
</body>
</html>

002.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>002</title>
</head>
<body>
<h1>Hello HTML5! </h1>
</body>
</html>

把這兩個文件放在webapps文件夾下,啓動Tomcat服務器,並打開IE瀏覽器輸入

http://localhost:8080/001.html

然後打開HttpWatch工具,點擊Record按鈕,並刷新該網頁,就會出現如下的結果:這裏寫圖片描述

2.Http響應

a.狀態行(status line)
格式:
這裏寫圖片描述

b.響應報頭(response-header)
response-header域允許服務器傳遞一些不能放置在status-line裏的額外信息,域裏的字段給出了關於服務器和由Request-URI所標識的資源信息。
c.實體(Entity)
由request和response消息傳輸的內容即是Entity,實體由entity-header和entity-body組成。
這裏寫圖片描述

工作和學習中最常用的就是GET請求和POST請求,但我在網上和書上看了很多資料[ps :也許我沒有看到更好的資料],好像沒有把這兩種請求方法的區別給講清楚,感覺自己在雲裏霧裏。
GET請求和POST請求的相同點是都可以向服務器發送數據。關鍵是不同點,需要我們格外的關注。就以上面代碼的爲例,在001.html文件中的method=”get”,其運行結果爲:
這裏寫圖片描述
從瀏覽器的地址欄看:
這裏寫圖片描述

將001.html文件中的method字段改爲method=“post”,其運行結果爲:
這裏寫圖片描述
從瀏覽器的地址欄看:
這裏寫圖片描述
不知各位小夥伴們看出其中的端倪了沒有?

Get請求時,是將請求的內容放置在請求行裏面的,而Post請求時,是將請求的內容放在message-body中的。

下表是Get請求和Post請求的區別
這裏寫圖片描述

下面簡單說說狀態碼的事,Status-Code都是三位數字,分爲5大類,eg:
1xx表示通知信息的,如請求收到了或正在處理
2xx表示成功,如接受或知道了。
3xx表示重定向,如要完成請求還需採取進一步的行動
4xx表示客戶端的差錯,如請求中有錯誤的語法或不能完成。
5xx表示服務器的差錯,如服務器失效無法完成請求。

目前就把Http協議介紹這裏,然後再有什麼不明白的可以參考RFC2616文檔,其網址是
https://datatracker.ietf.org/doc/rfc2616/?include_text=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章