信安學習之路

來哇,咬我呀。發表於2020-11-13

web(world wide web)即全球廣域網,也稱為全球資訊網,它是一種基於超文字和HTTP的,全球性的,動態互動式的,跨平臺的分散式圖形資訊系統。是建立在internet上的一種網路服務,為瀏覽者在internet上查詢和瀏覽資訊提供了圖形化的,易於訪問的直觀介面,其中的文件及超級連結internet上的資訊節點組織成一個互為關聯的網狀結構。簡單來說,web是web頁面的載體,我們通過瀏覽器上網都是web。
http請求型別
HTTP協議中共定義了八種方法或者叫“動作”來表明對Request—URI 指定的資源的不同操作方式,以下為常用的6種:
.OPTIONS: 返回伺服器所支援的HTTP請求方法。
.HEAD: 與GET請求相一致的響應,但只返回頭部資訊,響應體將不會被返回。
.GET: 向特定的資源發出請求。 (url回車)
.POST: 向指定資源位置上傳其最新內容。
.PUT: 向指定資源位置上傳其最新內容。
.DELETE: 請求伺服器刪除指定資源。
Get 與 Post 區別
url可見性
.Get傳參方式是通過位址列URL傳遞,是可以直接看到get傳遞的引數,get把請求的資料在URL後通過?連線,通過&進行引數分割。
.Post傳參方式引數URL不可見,post將從引數存放在HTTP的包體內。
傳輸資料大小
.Get傳遞資料是通過URL進行傳遞,對傳遞的資料長度是受到URL大小的限制,URL最大長度是2048個位元組。
.Post沒有長度限制。
後退頁面
.Get後退不會有影響,Post後退會重新進行提交
Get與 Post 的區別
快取
. Get請求可以被快取,請求的記錄會留在歷史記錄中。
.post不可以被快取,請求不會留在歷史記錄。
編碼方式
.Get請求只URL編碼。
.Post支援多種編碼方式。
字元型別
.Get只支援ASCII字元。
.Post沒有字元型別限制。
三、http 請求/響應包介紹
1.域名解析
瀏覽器會解析域名(主機名)得到對應的IP地址,那怎麼解析到對應的IP地址?

瀏覽器自身的DNS快取(時間短,一分鐘,1000條快取)如果有該域名對應的條目且沒有過期則解析到此結束;
沒有找到對應的條目,瀏覽器會搜尋作業系統自身的DNS快取,如果有該域名對應的條目且沒有過期則解析到此結束;
沒有找到對應的條目,嘗試讀取hosts檔案(位於C:\Windows\System32\drivers\etc),如果有該域名對應的條目且沒有過期則解析成功;
在hosts檔案中沒有找到對應的條目,瀏覽器發起一個DNS的系統呼叫,就會向本地配置的首選DNS伺服器(運營商提供,也可以使用像Google提供的DNS伺服器)發起域名解析請求(通過的是UDP協議向DNS的53埠發起請求,遞迴請求,運營商的DNS伺服器必須得提供給我們該域名的IP地址),運營商的DNS伺服器首先查詢自身的快取,找到對應的條目,且沒有過期,則解析成功。沒有找到對應的條目,則有運營商的DNS代我們瀏覽器發起迭代DNS解析請求,它首先是會找根域的DNS的IP地址(這個DNS伺服器都內建13臺根域的DNS的IP地址),然後進一步請求;
正常情況下通過這四步基本就能解析域名獲得IP了。
2.發起TCP3次握手
拿到域名對應的IP地址之後,User-Agent(指瀏覽器)會以一個隨機的埠(1024<埠<65535)向伺服器的WEB程式的80埠發起TCP連線請求。連線請求(原始的http請求經過TCP/IP4層模型的層層封包)到達伺服器端後(通過各種路由裝置,區域網內除外),進入到網路卡,然後進入核心的TCP/IP協議(用於識別該連線請求,解封包,一層一層的剝開),還有可能要經過Netfilter防火牆(屬於核心的模組)的過濾,最終到達WEB層

3.建立TCP連線後發起HTTP請求
經過TCP3次握手之後,瀏覽器發起了http的請求

4.伺服器端響應http請求,瀏覽器得到html程式碼
伺服器端WEB程式接收到http請求以後,就開始處理該請求,處理之後就返回給瀏覽器html檔案

5.瀏覽器解析html程式碼,並請求html程式碼中的資源
解析html程式碼,遇到 js/css/image 等靜態資源,就向伺服器端去請求下載(多執行緒下載,瀏覽器的執行緒數不一樣),利用 keep—alive特性,建立一次HTTP連線,可以請求多個資源,所以請求成功顯示的順序並不一定是程式碼裡面的順序。
瀏覽器在請求靜態資源的時(未過期情況下),向伺服器端發起一個http請求(詢問自從上一次修改時間到現在有沒有對資源進行修改),如果伺服器端返回304狀態碼(告訴瀏覽器伺服器端沒有修改),瀏覽器會直接讀取本地的該資源的快取檔案。

6.瀏覽器對以頁面進行渲染呈現給使用者
瀏覽器利用自己內部的工作機制,把請求到的靜態資源和html程式碼進行渲染,渲染之後呈現給使用者
請求/響應正文

  1. 組成
    一個HTTP請求報文由四個部分組成:請求行,請求頭部,空行,請求資料。

  2. 伺服器端響應http請求,瀏覽器得到html程式碼
    請求行由請求方法欄位,URL欄位和HTTP協議版本欄位3個欄位組成,它們用空格分隔。比如GET/data/info.html HTTP/1.1
    方法欄位就是HTTP使用的請求方法,比如常見的GET/POST
    其中HTTP協議版本有兩種:HTTP1.0/HTTP1.1 可以這樣區別:
    HTTP1.0對於每一個連線都只能傳送一個請求和響應,請求就會關閉,HTTP1.0沒有Host欄位;而HTTP1.1在同一個連線中可以傳送多個請求和響應,多個請求可以重疊和同時進行,HTTP1.1必須有Host欄位。

  3. 空行
    它的作用是通過一個空行,告訴伺服器請求頭部到此為止。

  4. 請求資料
    若方法欄位是GET,則此項為空,沒有資料
    若方法欄位是POST,則通常來說此處放置的就是要提交的資料
    比如要使用的POST方面提交一個表單,其中有user欄位中資料為“admin”,passwor欄位為123456,那嗎這裡的請求資料就是 user=admin&password=123456,使用&來連線各個欄位。

5.HTTP響應報文
響應行
響應行一般由協議版本,狀態碼及其描述組成 比如 HTTP/1.1 200 OK
其中協議版本HTTP/1.1或者HTTP/1.0,200就是它的狀態碼,ok則是它的描述
響應頭
響應頭用於描述伺服器的基本資訊,以及資料的描述,伺服器通過這些資料的描述資訊,可以通知客戶端如何處理等一會兒它回送的資料。
設定HTTP響應頭往往和狀態碼結合起來。例如,有好幾個表示“文件位置已經改變”的狀態程式碼都伴隨著一個Location頭,而401(Unauthorized)狀態程式碼則必須伴隨一個WWW-Authenticate頭。然而,即使在沒有設定特殊含義的狀態程式碼時,指定應答頭也是很有用的。應答頭可以用來完成:設定Cookie,指定修改日期,指示瀏覽器按照指定的間隔重新整理頁面,宣告文件的長度以便利用持久HTTP連線,…等等許多其他任務
響應體
響應體就是響應的訊息體,如果是純資料就是返回純資料,如果請求的是HTML頁面,那麼返回的就是HTML程式碼,如果是JS就是JS程式碼,如此之類。
響應報文格式在這裡插入圖片描述