HTTP協議讀書筆記 一

2021-09-11 03:54:40 字數 3750 閱讀 4563

http協議介紹

http協議,即超文字傳輸協議,是一組規範,用來規範web的請求,傳送和獲取,web是建立在http協議上的通訊。

對於網路的體系結構,主要有國際標準化的osi和tcp/ip協議簇,而現在被廣泛使用的是tcp/ip協議,tcp/ip協議分析4層,即應用層,傳輸層,網路層,鏈路層。在應用層支援的協議有:ftp,arp,http等。傳輸層的協議有tcp,udp,網路層的協議有ip,對於資訊在不同的節點上傳輸,為了高效且方便,則大家都統一遵守tcp/ip協議,資料的傳輸是從發起請求的應用層-傳輸層-網路層-鏈路層,到接收資料的鏈路層-網路層-傳輸層-應用層。因此可知,http協議是建立在tcp協議之上,當使用http協議進行請求時,都會先建立tcp連線,進行三次握手,之所以使用tcp,是因為tcp是乙個安全,可靠的傳輸層協議,它可以保證資料完整的傳輸到接收方。

http協議是乙個無狀態協議,即不會儲存每次請求和響應之間的通訊狀態,每次請求都是乙個新的請求,都需要建立乙個新的連線(後期有所改進),這樣做是為了可以快速處理大量的事務。當然因為後期的需求,需要儲存連線之間的資訊,引入了cookie技術。

http方法

⑴get方法,用於獲取uri指定的資源,即經過伺服器解析後返回的資源。

⑵post方法,用來傳輸實體的主體,get和post的功能相似,但post的主要目的並不是獲取響應的主體內容。

⑶put方法,用來傳輸檔案,需要在請求報文的主體中包含檔案內容,然後儲存到請求uri指定的位置,但是由於http/1.1 put方法自身不帶驗證機制,任何人都可以上傳檔案,存在安全問題,所以一般在**不適用該方法; 

⑷head方法:用於獲取uri指定的資源,和get方法相似,只不過不返回報文主體部分;

⑸delete方法:用於刪除檔案,按請求的uri刪除指定的資源;

⑹options方法:用來查詢針對請求uri指定的資源支援的方法;

⑺trace方法:用來確認連線過程中發生的一系列操作,即讓web伺服器將之前的請求通訊返回給客戶端的方法;

⑻connect方法:用來在與**伺服器通訊時建立隧道,實現用隧道協議進行tcp通訊,主要使用ssl和tls協議。

http協議變動

在http協議的初始版本中,沒進行一次http通訊都要斷開tcp連線,當請求的資源中含有多個資源時,則需要建立多個tcp連線,會增加伺服器的負擔,因此,在http/1.1和部分http/1.0中,想出了持久連線(http keep-alive),即不會在每次請求相應後立即斷開tcp連線,而是存在一段時間,http/1.1中所有的連線預設是持久連線,在http/1.0中並沒有標準化。

持久連線使得多數請求以管線化方法傳送,即可以並行傳送多個請求,而不需要乙個接乙個地等待相應。

cookie

因為http協議是無狀態的協議,它不會去儲存請求和響應之間的資訊,如有需要記錄客戶端的資訊,則沒有辦吧,因此引入cookie。cookie技術通過在請求和響應報文中寫入cookie資訊來控制客戶端的狀態。當第一次傳送請求給伺服器的時候,是沒有cookie資訊的,伺服器端傳送的響應報文內有乙個set-cookie的首字段資訊,會通知客戶端儲存cookie,在下次客戶端訪問伺服器的時候,客戶端會自動在請求報文中加入cookie值傳送出去,伺服器端然後發現cookie,和伺服器上的記錄進行對比,最後得到之前的狀態資訊。注意cookie資訊儲存在客戶端,可以通過瀏覽器設定來進行清除。

http報文

http報文根據請求和傳送分為,請求報文和響應報文。報文的構成有報文首部和報文主體,通常,不一定有報文主體。報文首部包括請求行/狀態行,首部字段。http有內部編碼功能,即對實體內容進行編碼,並保持實體資訊原樣壓縮,可以保證高效的傳輸,同時客戶端對內容實體進行解碼。

http報文中可以包含多個物件,傳送的報文主體內可含有多型別實體,eg:multipart/form-data,multipart/byteranges。注意在報文中使用多部分物件集合時,需要再首部欄位裡加上content-type。

http狀態碼

狀態碼是客戶端傳送請求給伺服器時,伺服器處理請求的結果的描述。常見狀態碼:

200:表示客戶端傳送的請求被伺服器端正常的處理了;

204:表示客戶端傳送的請求已經被伺服器端成功處理,但在返回的響應報文中不含實體的主體部分;

206:表示客戶端傳送了範圍請求,伺服器已經成功的執行了這部分請求;

301:永久性重定向,表示請求的資源已經被分配了新的uri;

302:臨時性重定向,表示請求的資源已經被分配了新的uri,和301的區別是,這個變更是臨時的,有可能還會發生變化;

303:表示客戶端請求的資源存在著另乙個uri,應使用get方法定向獲取請求的資源;

304:表示客戶端傳送請求時,伺服器端允許請求訪問資源,但因發生請求未滿足條件的情況下;

400:表示客戶端傳送的請求報文中存在語法錯誤;

401:表示客戶端傳送的請求需有通過http認證的認證資訊,當瀏覽器初次接受到該狀態碼,會彈出認證用的對話視窗;

403:表示客戶端傳送的請求被伺服器拒絕了,伺服器端不一定給出拒絕的詳細理由,可以通過在實體的主體部分對原因進行描述,這樣客戶端就可以看到;

404:表示客戶端的傳送的請求資源不存在;

500:表示伺服器端處理傳送的請求時出錯;

503:表示伺服器暫時處於超負荷或者正在停機維護中,現在無法處理請求;

安全的https

為什麼引入https,主要是http協議使用時存在隱患,雖然http協議是建立在tcp協議上,tcp協議是乙個安全可靠的協議,它的安全可靠是連線的建立,以及保證資料流安全可靠的傳輸到接收方,並可以進行差錯檢驗和流量控制等,並不會保證資料不會被窺視。http協議有以下幾個缺點:

⑴http協議本身不具備加密功能,即不能對通訊整體進行加密,所以http使用明文的方式進行傳送。

⑵http協議不驗證通訊方的身份,因此有可能被第三方冒充。

⑶無法證明報文的完整性,報文有可能被篡改。

針對第一種情況:可以進行加密處理,有兩種方式:

一種是對通訊加密,http協議沒有加密機制,但可以通過和ssl(安全套接層)或tls(安全傳輸層協議)的組合使用,加密http的通訊內容,用ssl建立的安全通訊後,就可以在這條線路上進行http通訊了;

第二種是對通訊內容的加密,即對通訊的報文進行加密,但是仍然有可能被篡改。

針對第二種情況:可以使用證書處理:

因為http協議,不存在對方身份的確認步驟,因此,對於任何乙個請求,伺服器都會進行響應,因此會存在很多不安全的操作,例如冒名伺服器給客戶端傳送資訊。ssl不僅提供加密處理,還提供證書,可用於確認通訊雙方。證書是由值得信賴的第三方機構頒發的,用來證明通訊雙方式實際存在的,其次由於證書的偽造是異常困難。因此只要持有證書,就可以確定雙方的身份。

針對第三種情況:即無法保證資訊的準確性,可以使用特定的演算法

因為http協議無法保證資訊報文的完整性,因此傳輸的內容有可能被第三方篡改,即在傳輸的過程中,遭攻擊者攔擊並篡改內容的攻擊稱為中間人攻擊,可以使用md5,sha-1等演算法對傳輸內容進行檢驗,但是有可能md5也被修改,因此並會不會保證百分之百的安全。

因此https是在ssl協議外殼的http,https並非乙個新的協議,而是用ssl和tls協議替代而已。因此使用https時,會先和ssl通訊,ssl和tcp通訊。https採用對稱加密和費對稱加密的混合加密機制。https的缺點也有,即使用ssl時,會影響速度,其次ssl會消耗更多cpu以及記憶體的資源,正因為如此,因此有些web**一直使用http協議。

內容參考《**http》  如有問題,敬請指出,謝謝。

讀書筆記2 HTTP協議

http hypertext transfer protocol,超文字傳輸協議 是在全球資訊網上進行通訊時 所使用 的協議方案。了解http協議的地位之前首先簡單了解一下網路協議分層。http處於網路協議的應用層協議。定義http報文就是資料交換標準和文字資料的集合。好比物流裡的包裹。組成star...

Http讀書筆記1

http最初設想的理念是 借助多文件形成的超文字 hypertext 運用的是超連結 hyperlink 連成可相互參閱的全球資訊網 world wide web 簡稱www 現在提出了3項構建 www技術 作為文件傳遞協議 html hypertext markup language 超文字標記語...

http協議讀書筆記2 連線管理

一 http是如何使用tcp連線的?http連線本質就是tcp連線和一些使用連線的規則。所有的http通訊都是由tcp ip來承載的。tcp ip是全球計算機及網路裝置都在使用的一種常用的分組交換的網路分層協議集。客戶端程式開啟一條tcp ip連線。連線到可能執行在世界任何地方的伺服器應用程式。1....