http學習筆記 章節02 初步了解http

2021-10-05 02:40:24 字數 2644 閱讀 9539

知識點:

兩台計算機使用http進行通訊時吧,在一條通訊路上必定有一端為客戶端,另一端為伺服器端

通訊方式為:客戶端發出請求資訊,伺服器接收請求並返回響應資訊

綜上: 請求報文是由請求方法、 請求 uri、協議版本、可選的請求首部欄位和內容實體構成的

綜上:響應報文基本上由協議版本、 狀態碼(表示請求成功或失敗的數字**)、用以解釋狀態碼的原因短語、 可選的響應首部字段以及實體主體構成

http是乙個不儲存狀態的協議,即它不會對請求和響應之間的通訊狀態進行儲存。也就是說都是轉眼不認人的那種。

為什麼這麼設計?

要儲存相應的狀態資訊,就肯定需要cpu和記憶體空間。為了使它能夠更快速的處理大量事務,確保協議的可伸縮性。特意把它設計成這麼簡單的。

http使用uri進行資源的定位,使得客戶端可以通過它獲取或訪問資源

客戶端因請求訪問資源而傳送請求資訊時,要將uri放到請求報文中。來看幾種指定請求uri的方式

如果不是對某個特定的資源進行請求或訪問,而是本事就是想對這個伺服器本身發起請求,可以使用*來替代請求uri

栗子:options * http/1.1

3.1 get

get 方法用來請求訪問資源,指定的資源經過伺服器端解析之後返回響應內容。即如果是文字就原樣返回;如果是程式,則返回執行結果

3.2 post

post用來傳輸實體的主體,雖然get也能傳輸實體(如位址列傳參)但是一般實體的傳輸都是用post,get的主要目的是獲取資源post則不然

3.3 put

put方法用來傳輸檔案,如同ftp協議的檔案上傳。要求在請求報文的主體中包含檔案內容資訊,然後根據uri儲存到它其指定的位置上

但是http/1.1 的 put 方法自身不帶驗證機制,即任何人都可以向該服務端上傳檔案存在安全問題,故一般的web**不會使用這個方法。若是配合web應用程式的驗證機制,或者架構設計採用rest標準的同類web**,就可能會開發put方法

3.4 head

與get方法一樣,只不過它所返回的響應報文不包含主體部分。只是為了確認uri的有效性及資源更新的日期

3.5 delete

delete用來刪除上傳的檔案與put正好相反

3.6 options

這個方法用來查詢要請求uri資源所支援的方法,比如對方資源可能只支援get、post等

3.7 trace

路徑追蹤,這個辦法是讓web伺服器端將之前的請求通訊環回返給客戶端

如:在客戶端傳送乙個請求時,會在請求報文首部字段乙個叫max-forwards的屬性中填入乙個數值,這個請求每經過乙個中轉伺服器max-forwards裡面的值便會減一,當它數值減到0時便會停止繼續傳輸此時便正好到達了uri所定位的資源伺服器端

這個方法容易引起xst(跨站追蹤攻擊)一般不會使用

3.8 connect

這個方法要求在與**伺服器通訊時建立隧道,實現用隧道協議進行tcp通訊。主要使用ssl和tls協議把通訊內容加密之後經過網路隧道傳輸

為什麼會用持久連線?

在http的初始版本中每進行一次http通訊便要斷開一次tcp連線,這種設計可能適合當時的web環境。可是到如今乙個好點頁面幾十張上百張大小。還有各種靜態資源,如果還是每通訊一次斷開一次連線那不說cpu和記憶體的消耗。但使用者體驗便差到極點了吧(每次重複上百次三次握手四次揮手瘋了)

為了解除這個問題,便出現了持久連線。持久連線的特點是只要任意一端沒有明確提出斷開連線,則保持tcp連線的狀態

管線化是繼持久連線的進一步優化,持久連線的實現使多數請求以管線化方式傳送成為可能。

以前客戶端傳送了乙個請求,只有收到了伺服器端給額響應才能進行傳送下乙個請求,管線化的出現打破了這一規律。使得客戶端不用等到響應資訊直接可傳送下乙個請求

我們已經知道為了盡可能的減少cpu和記憶體的消耗,http是無狀態的。但是現實應用中我們又需要它儲存狀態。於是引進了cookie技術

cookie是通過在請求和響應報文中寫入cookie資訊的方式來控制它們狀態的

流程

首先客戶端向伺服器端傳送請求,伺服器端在會響應報文中加乙個set-cookie的首部字段資訊來通知客戶端儲存cookie。並做下記錄

當下次客戶端再向該伺服器傳送請求時會自動給自己的請求報文加入儲存的cookie

伺服器端收到此cookie時會對比伺服器端的記錄檢查它是哪個客戶端(畢竟伺服器端授予cookie的客戶端不止),從而得到之前的狀態資訊

chapter two學習筆記 章節回憶

2.1基本內建型別 整型 int short,long,char,wchar t,bool 浮點型 long double double,float,void型別 2.2字面值常量 整型字面值常量,如 1,字元字面值常量如 a 浮點型字面值常量,如 3.12f,1e 3f 0.001f 字串字面值常...

《Qt學習系列筆記》 章節索引

qt初始化 基本說明 qt訊號與槽的使用 qt記憶體 機制 qt qmainwindow的使用 qt工具欄的使用 qt ui簡單使用 1 qt ui的簡單使用,常用控制項 2 qt布局的簡單介紹 qt自定義控制項 qt新增資源檔案 qt樣式表 qt事件 qt繪圖 qt繪圖裝置 qt不規則視窗 qt檔...

Linux初步學習筆記

安裝軟體 ip位址 windows下檢視ip和dns win r輸入cmd 輸入ipconfig all 有線網口 本地連線 無線網口 無線網路連線 win r執行 win e開啟電腦 win d顯示桌面 win tab高階顯示桌面 win l鎖屏 windows管理員賬號名administrato...