http協議大家都是比較熟悉的,但是通常我們只是了解和知道它是做什麼的,但並不是每個人都去詳細了解了其具體的規則。比如說我一直都是認為這個不需要了解,或者說了解到之前的程度就可以了,因為一提到協議就有一些退縮感,覺的離我很遠,測試工作也不用了解太多,所以一直對http的認識還是處於最基本的。比如它是應用層協議,是基於tcp/ip協議的,用於web通訊,可以get、post,可以通過指令碼或者telnet的方法 來傳送乙個http請求並得到返回的內容,預設埠是80等。
最近在看一本叫模糊測試的書籍,裡面說的都是如何構造協議模糊器,然後通過這個來進行模糊測試。在閱讀過程中發現還是比較吃了的,因為在這方面的知識根本不夠,如果連http協議都沒有很好的理解和操作性,那麼對其它更底層的協議就沒法學習了。所以稍稍去收集了一下資料,現整理並記錄之,個人覺得這個對於web測試來說還是比較好測試基礎知識,理解了測試web程式時很多隱含的問題都可以考慮到。
1、http的發展歷史:
http0.9已過時。只接受 get 一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援 post 方法,所以客戶端無法向伺服器傳遞太多資訊。
http1.0是第乙個在通訊中指定版本號的 http 協議版本,至今仍被廣泛採用。相對於0.9增加了如下內容:
1、新增請求的型別,如 head、post等。
2、新增請求和響應訊息的協議版本,響應訊息第一行以「http/1.0」開始
3、使用 server響應碼來表示請求響應訊息的成功與否,如200表示成功
4、使用mime的訊息標題(header)和訊息體(body)格式來描述訪問物件的資料型別和附加在後面的元資訊,如mime的header為「content-type:text/html」表明響應的訊息實體是html檔案
5、增加了mime支援之後,使http協議擴大了處理的資料型別,支援對多**流資訊的處理
6、用 challenge/response實現認證,這樣可以在使用者訪問某些頁面時要求輸入使用者名稱和密碼,進行身份認證
7、增加了**(proxy)支援功能,在http0.9中,規定了client和server只能直接互動,而1.0版可以通過**等中間實體實現間接連線
http1.1當前版本。持久連線被預設採用,並能很好地配合**伺服器工作。還支援以管道方式在同時傳送多個請求,以便降低線路負載,提高傳輸速度。 相較於 http/1.0 協議的區別主要體現在:
1 快取處理
2 頻寬優化及網路連線的使用
3 錯誤通知的管理
4 訊息在網路中的傳送
5 網際網路位址的維護
6 安全性及完整性
由上述可以得出乙個結論,那就是get和post唯一的聯絡是他們都是應運而生的;唯一的區別是get能做的post都能做,psot能做的get不一定能做。至於網上的那些分析出來的區別其實更確切的理解應該是它們各自的屬性,因為設計時的目的是公升級而不是互補,所以要是知道get有什麼好處,設計post時肯定會帶上的,而之所以喜歡把它們聯絡到一起恐怕還是因為它們的基本功能。
2、http的實現機制:
因為是高層協議,所以肯定有依託的底層協議,大部分情況下http使用的都是tcp/ip協議,但有時也可以基於其他底層協議,其唯一的要求就是像tcp一樣具有可靠的傳輸。我們先假定其實現是基於tcp/ip實現的,那麼http的通訊過程也就是必然要包括3次互動,互動成功後表示已建立了鏈結,而後採用請求/響應的模式來進行內容獲取:客戶端向伺服器傳送乙個請求,請求頭包含請求的方法、url、協議版本、以及包含請求修飾符、客戶資訊和內容的類似於mime的訊息結構。伺服器以乙個狀態行作為響應,相應的內容包括訊息協議的版本,成功或者錯誤編碼加上包含伺服器資訊、實體元資訊以及可能的實體內容。具體步驟如下:
a、輸入url回車
b、請求建立(tcp)傳輸連線【通過host:port】
c、連線成功後請求頁面【通過網頁路徑】
d、請求成功後返回200狀態和所請求的頁面
e、請求失敗則返回相應狀態【瀏覽器根據狀態顯示相應錯誤頁】
3、http的結構分析:
http完整請求和響應的結構如下所示:
請求行*header
crlf
[body]
狀態行*header
crlf
[body]
注:上面的crlf是header 的結束符,其實就是/r/n
header部分呢有可以分為:general-header ,request-header,response-header ,entity-header。其實就是對頭部內容進行了分類,具體的可以查一下http協議頭的詳解,還挺多的但是記的話只要記長用到的就夠了。
另外body部分是用來傳輸一些內容資訊的,可以存放任意內容【最好是編碼後】,任意長度【除瀏覽器限制外】,而且通常都是name:value對,常用到的就是post資料的內容。
【注:get方法不支援body,但post方法可以支援帶引數請求;所以由此可以看出get可以做的post也可以,但反之則不亦然】
在分析http時需要用到的工具如:httpanalysis,wireshark
你需要知道的http協議
web互連 通訊 的基礎 tcp ip協議族,http屬於它內部的子集 web www 的三項構建技術 tcp ip協議族分層包括 資料鏈路層,網路層,傳輸層 應用層 tcp ip協議族分層作用 各層各司其職,模組劃分清晰,便於維護,解耦 區別 聯絡uri 統一資源識別符號,用字串標識某一網際網路資...
Sybase IQ,你需要知道的基礎
sybase iq,你需要知道的基礎 第一,知道iq跟其它的關係型資料庫相比,它的主要特徵是什麼?包括查詢快 資料壓縮比高 load快,但是插入更新慢,不太適合資料老是變化,它是按列儲存的。這時候你就知道它適做dss 決策支援系統 資料集市,資料倉儲,它不適合oltp。適合olap。第二,知道iq自...
Sybase IQ,你需要知道的基礎
sybase iq,你需要知道的基礎 第一,知道iq跟其它的關係型資料庫相比,它的主要特徵是什麼?包括查詢快 資料壓縮比高 load快,但是插入更新慢,不太適合資料老是變化,它是按列儲存的。這時候你就知道它適做dss 決策支援系統 資料集市,資料倉儲,它不適合oltp。適合olap。第二,知道iq自...