国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一文吃透Http協(xié)議

這篇具有很好參考價值的文章主要介紹了一文吃透Http協(xié)議。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. 初始 Http

Http 協(xié)議 , 是應(yīng)用層最為廣泛使用的協(xié)議 , Http 就是瀏覽器和服務(wù)器之間的橋梁. Http 是基于 TCP 協(xié)議實(shí)現(xiàn)的 ,

一文吃透Http協(xié)議

通常我們輸入搜索框中的網(wǎng)址 (URL) , 瀏覽器就會根據(jù)這個 URL 構(gòu)造出一個 Http 請求 , 發(fā)送給服務(wù)器. 服務(wù)器就會返回一個 Http 響應(yīng)(包含 html, css , js) , 瀏覽器再把得到的 html 等數(shù)據(jù)顯示出來(渲染) , 這也就是為什么 http 被稱為超文本傳輸協(xié)議 , 因?yàn)閭鬏數(shù)牟粌H僅是文本.

一文吃透Http協(xié)議


2. fiddler 抓包

http 協(xié)議的詳細(xì)交互過程 , 可以借助第三方工具 fiddler , 來抓包.

fiddler 本質(zhì)是一個代理程序 , 使用時注意事項(xiàng):

  1. 可能和別的代理程序沖突 , 使用時要關(guān)閉其他的代理程序(包括一些瀏覽器插件)
  2. 想要正確抓包還需開啟 htpps 功能 , 當(dāng)前互聯(lián)網(wǎng)絕大多數(shù)服務(wù)器都是 https 的 , fiddler 默認(rèn)不能抓 https 的包 , 需要手動啟動 https 并安裝證書.

打開 csdn , fiddler 會抓取很多的請求 , 通常藍(lán)色是 html 主頁 , 綠色是 , 黑色是單純的返回數(shù)據(jù). 瀏覽器再解釋執(zhí)行 html 和 js 的時候 , 遇到一個請求就發(fā)送一個.

一文吃透Http協(xié)議

http 請求 , 有一定的格式. fiddler 會按照格式解析 , 會呈現(xiàn)出不同的效果 , 點(diǎn)擊raw就可以看到最原始的效果. view in Notepad 可以看到更詳細(xì)的頁面.
一文吃透Http協(xié)議

一文吃透Http協(xié)議

觀察抓包結(jié)果 , 可以看到 , 當(dāng)前 http 請求 , 其實(shí)是個行文本格式的數(shù)據(jù).

響應(yīng)數(shù)據(jù)本來也是文本 , 但有的服務(wù)器會對響應(yīng)進(jìn)行壓縮.( 為了節(jié)省帶寬)

一文吃透Http協(xié)議

手動解壓縮之后 , 我們就可以看到 csdn 主頁的文本數(shù)據(jù) , 也就是 html 的內(nèi)容.

一文吃透Http協(xié)議


3. Http 報文格式

學(xué)習(xí)一個協(xié)議 , 本質(zhì)上就是了解它的報文格式.

1. Http 請求

http 請求可以分為 4 部分:

  1. 首行
  2. 請求頭(header)
  3. 空行
  4. 正文(body)

首行

一文吃透Http協(xié)議

首行包含三個部分. 之間使用空格來區(qū)分.

  • GET: http 的方法(method)

  • URL: 也就是唯一資源定位符. 標(biāo)識互聯(lián)網(wǎng)上唯一資源的位置(在哪個服務(wù)器的哪個目錄下的哪個文件) , URI 唯一資源標(biāo)識符 , 為了和別的資源區(qū)分開. 實(shí)際上 URL 也可以視為是一個 URI. 開發(fā)中常常混用. URL 不是 http 專屬的. 很多協(xié)議都可以使用 URL.

  • 版本號: HTTP/1.1


認(rèn)識URL

一文吃透Http協(xié)議

舉個例子: 假設(shè)我在學(xué)校餐廳租了一個檔口賣重慶小面

一文吃透Http協(xié)議

一個 URL 有些部分是可以省略的:

例如:

  • 端口號可以省略 , 瀏覽器提供默認(rèn)端口. 對于 http 來說默認(rèn)端口是 80 , 對于 https 來說默認(rèn)端口是 443.

  • / 代表 http 服務(wù)器的根目錄 , http 服務(wù)器是系統(tǒng)上的一個進(jìn)程. 于是委托這個服務(wù)器管理系統(tǒng)上的一個特定目錄 , 這個目錄里的資源都可以讓外界進(jìn)行訪問.(服務(wù)器管理的根目錄 , 可以是系統(tǒng)上任意一個地方 , 具體根據(jù)服務(wù)器配置)

  • 查詢字符串也是可有可無 .

查詢字符串以 ? 開頭 , 以鍵值對的形式組織 , 鍵值之間用**&分割 , 鍵和值之間用=**分割. 有時 URL 有些字符是由特點(diǎn)含義的 , 就需要對內(nèi)容重新編碼 , 通常使用urlencode(轉(zhuǎn)義字符) , 如果不編碼直接寫中文 , 瀏覽器可能無法識別.


認(rèn)識方法(Method)

一文吃透Http協(xié)議

實(shí)際開發(fā)中 , 這里的方法 , 大部分都是用不到的. 最常見的就是 GET 和 POST.

GET 觸發(fā)場景:

  1. 在瀏覽器地址欄直接輸入 URL
  2. html 里的 link , script , img , a…等標(biāo)簽
  3. 通過 js 來構(gòu)造 get 請求.

GET 與 POST 的區(qū)別:

  1. 如果是 GET 請求 , 沒有 body. POST 請求, 有 body. POST 的 body 中是程序員自定義的內(nèi)容.
  2. GET 給服務(wù)器傳遞消息一般存放在 quert string , POST 傳遞消息則是通過 body.
  3. GET 請求一般從服務(wù)器獲取數(shù)據(jù) , POST 一般是用于給服務(wù)器提交數(shù)據(jù).
  4. GET 通常情況下是冪等的 , POST 則不做要求.(相同的輸入 , 結(jié)果也是確定的 )
  5. GET 可以被緩存 , POST 則一般不能被緩存.(緩存的前提是冪等)

實(shí)際上GET 與 POST 的區(qū)別只是一個習(xí)慣用法 , 很多場景下彼此都可以替換.


認(rèn)識 header

一文吃透Http協(xié)議

header 里的鍵值對都是 http 事先定義好的 , 有特定含義.

  • HOST: 描述了服務(wù)器所在的地址端口 , 用來描述你最終要訪問的目標(biāo) , 通常情況下內(nèi)容和 URL一樣.

  • Content-Length: 表示 body 中的數(shù)據(jù)長度.

一文吃透Http協(xié)議

  • Content-type: 表示請求的 body 中的數(shù)據(jù)格式. 常見的格式有 json 和 form等.

一文吃透Http協(xié)議

  • User-Agent (簡稱 UA)

一文吃透Http協(xié)議

描述了瀏覽器和操作系統(tǒng)的版本 , 早起瀏覽器只支持文本 , 后來支持各種圖片 , 音頻, js … 對于網(wǎng)站開發(fā)者來說 , 開發(fā)網(wǎng)頁時是否支持這些新功能是個問題 , 后來提出解決辦法 , 那就是發(fā)布不同的版本來適用各種瀏覽器 , 根據(jù) User-Agent 就可以解決這個問題 , 后來瀏覽器的差別小了 , User-Agent 主要用來區(qū)分是移動端還是PC 端.

  • Refer: 表示當(dāng)前頁面"來源" , 如果直接在地址欄搜索 , 收藏夾等 , 則沒有Refer.

一文吃透Http協(xié)議

廣告計費(fèi)服務(wù) , 廣告主的頁面會有許多其他網(wǎng)站轉(zhuǎn)過來 , 為了更好的結(jié)算計費(fèi) , 廣告主只需通過 refer 記錄日志即可. 但是 http 本身明文傳輸 , 會遭到運(yùn)營商劫持將refer篡改成其他的.

  • Cookie: 本質(zhì)上是瀏覽器給網(wǎng)頁提供的本地存儲數(shù)據(jù)機(jī)制 , 為了保證安全 , 網(wǎng)頁默認(rèn)是不允許訪問到計算機(jī)的本地硬盤. cookie 瀏覽器對于訪問硬盤作出了明確限制 , 通過鍵值對方式來組織數(shù)據(jù).

一文吃透Http協(xié)議

Cookie 中具體存啥內(nèi)容 , 由程序員自定義.這里是數(shù)據(jù)是啥意思 , 只能由開發(fā)的程序員知道.

Cookie 從哪里來? Cookie中的數(shù)據(jù)來自服務(wù)器 , 服務(wù)器會通過 ==http 響應(yīng)的報頭==部分(set-cookie 字段) , 來決定瀏覽器的 Cookie 要存什么.

Cookie 存在哪里? 可以認(rèn)為存在于硬盤上 , Cookie 在存的時候 , 是按照瀏覽器 + 域名的緯度來進(jìn)行細(xì)分的. 不同的瀏覽器各自存各自的 cookie , 同一個瀏覽器的不同域名 , 對應(yīng)不同的 Cookie. 同時Cookie 還有過期時間 , eg: 很多網(wǎng)站登錄一次會自動記錄登錄狀態(tài).

Cookie 要到哪里去? 客戶端會通過Cookie 來保存用戶使用的中間狀態(tài) , 當(dāng)客戶端訪問瀏覽器的時候 , 就會自動把 Cookie 中的內(nèi)容帶入到請求中 , 服務(wù)器就知道客戶端的狀態(tài).Cookie 里存的往往是"上下文" 這樣的狀態(tài) , 當(dāng)瀏覽器保存好 cookie后 , 后續(xù)再給服務(wù)器發(fā)送請求時 , 就會自動帶上 . cookie 就像是服務(wù)器在瀏覽器這邊搞的一個寄存處一樣的東西.


認(rèn)識請求正文

正文中的內(nèi)容和header 中的Content-Type密切相關(guān) , 常見以下三種:

  1. application/x-www-form-urlencode
  2. multipart/form-data
  3. application/json

2.Http 響應(yīng)

響應(yīng)由四個部分組成:

  • 1.首行

一文吃透Http協(xié)議

  • 2.header
  • 3.空格 表示 header 的結(jié)束標(biāo)記
  • 4.body

Http 狀態(tài)碼: 描述了這次響應(yīng)的結(jié)果.(成功?失敗?失敗原因是啥?)

常見:

  • 200 ok 成功了.

  • 404 NotFound 訪問的資源不存在 , 服務(wù)器上沒找到.

  • 403 Forbidden 訪問被拒絕(沒有權(quán)限)

  • 302 Move temporarily 重定向 , 舊域名跳轉(zhuǎn)到新域名. 302 這樣的響應(yīng)報文 , 會在 header 里帶個 Location 屬性 , 通過這個屬性來描述要跳轉(zhuǎn)到哪個地址.

重定向: 是 http 提供的機(jī)制
一文吃透Http協(xié)議

請求轉(zhuǎn)換: 是spring 和 servlet 中提供的機(jī)制

一文吃透Http協(xié)議

重定向與請求轉(zhuǎn)發(fā)的區(qū)別:

重定向可以可以重定向到外部資源(跳轉(zhuǎn)到別的網(wǎng)站) , 請求轉(zhuǎn)發(fā)只能在該服務(wù)內(nèi)部的資源之間轉(zhuǎn)發(fā) , 少了一次交互更加高效.

  • 500 服務(wù)器內(nèi)部錯誤 (服務(wù)器代碼拋異常了)
  • 504 gateway timeout (響應(yīng)時間太久 , 瀏覽器等不急了)

gateway 網(wǎng)關(guān) , 代表一個網(wǎng)絡(luò)的入口/出口. 想要訪問一個服務(wù)器中的內(nèi)容 , 需要先經(jīng)過網(wǎng)關(guān) , 通常也用來代指一個機(jī)房的入口服務(wù)器.

一文吃透Http協(xié)議

綜上: 2** 成功 , 3** 重定向 , 4** 客戶端錯誤 , 5** 服務(wù)器錯誤


認(rèn)識響應(yīng)報頭(header)

響應(yīng)報頭和請求報頭的格式基本一致. 類似于 Content-Type 和 Content-Length 等屬性的含義和請求也基本一致.

認(rèn)識響應(yīng)"正文"(body)

正文的格式取決于 Content-Type

由于返回響應(yīng)會傳遞 html , css , js , 圖片等. 因此會多幾種數(shù)據(jù)格式:

  • text/html: body 數(shù)據(jù)格式是 html
  • text/css: body 數(shù)據(jù)格式是 CSS

http 協(xié)議報文格式總結(jié):

一文吃透Http協(xié)議文章來源地址http://www.zghlxwxcb.cn/news/detail-413319.html

到了這里,關(guān)于一文吃透Http協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaEE & HTTP應(yīng)用層協(xié)議

    JavaEE & HTTP應(yīng)用層協(xié)議

    HTTP應(yīng)用層協(xié)議 超文本傳輸協(xié)議(Hyper Text [Transfer Protocol](https://baike.baidu.com/item/Transfer Protocol/612755?fromModule=lemma_inlink),HTTP) 是一個簡單的請求-響應(yīng)協(xié)議 ,它通常運(yùn)行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請求和響應(yīng)消息的頭以

    2024年02月06日
    瀏覽(24)
  • 【JavaEE】HTTP應(yīng)用層協(xié)議

    【JavaEE】HTTP應(yīng)用層協(xié)議

    HTTP應(yīng)用層協(xié)議 超文本傳輸協(xié)議(Hyper Text [Transfer Protocol](https://baike.baidu.com/item/Transfer Protocol/612755?fromModule=lemma_inlink),HTTP) 是一個簡單的請求-響應(yīng)協(xié)議 ,它通常運(yùn)行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請求和響應(yīng)消息的頭以

    2024年02月07日
    瀏覽(25)
  • 【計算機(jī)網(wǎng)絡(luò)】應(yīng)用層協(xié)議 -- HTTP協(xié)議

    【計算機(jī)網(wǎng)絡(luò)】應(yīng)用層協(xié)議 -- HTTP協(xié)議

    協(xié)議。網(wǎng)絡(luò)協(xié)議的簡稱,網(wǎng)絡(luò)協(xié)議是通信計算機(jī)雙方必須共同遵守的一組約定,比如怎么建立連接,怎么互相識別等。 為了使數(shù)據(jù)在網(wǎng)絡(luò)上能夠從源頭到達(dá)目的,網(wǎng)絡(luò)通信的參與方必須遵守相同的規(guī)則,我們稱這套相同的規(guī)則為協(xié)議(protocol),而協(xié)議最終都需要通過計算機(jī)

    2024年02月15日
    瀏覽(27)
  • 【應(yīng)用層】網(wǎng)絡(luò)基礎(chǔ) -- HTTP協(xié)議

    【應(yīng)用層】網(wǎng)絡(luò)基礎(chǔ) -- HTTP協(xié)議

    協(xié)議是一種 “約定”. socket api的接口,在讀寫數(shù)據(jù)時,都是按 “字符串” 的方式來發(fā)送接收的(tcp是以字節(jié)流的方式發(fā)送的,這里便與表述使用\\\"字符串\\\") 如果我們要傳輸一些\\\"結(jié)構(gòu)化的數(shù)據(jù)\\\" 怎么辦呢? 那么我們(TCP)在收到一個報文的時候,如何保證你收到了一個完整的報文?

    2024年02月11日
    瀏覽(58)
  • 【Linux】應(yīng)用層之HTTP協(xié)議

    【Linux】應(yīng)用層之HTTP協(xié)議

    在應(yīng)用層,需要我們傳遞應(yīng)用層所需特殊的數(shù)據(jù)格式,這種數(shù)據(jù)可能是連續(xù)數(shù)據(jù),例如int類型的整形變量,也可能是string類型的字符串,也可能是多個變量構(gòu)成的結(jié)構(gòu)體,那么就意味著我們發(fā)送的數(shù)據(jù)可能是連續(xù)的,也可能是不連續(xù)的,這時為了統(tǒng)一數(shù)據(jù)的解析方法,我們對

    2024年02月12日
    瀏覽(31)
  • Linux網(wǎng)絡(luò):應(yīng)用層之HTTP協(xié)議

    Linux網(wǎng)絡(luò):應(yīng)用層之HTTP協(xié)議

    我們程序員寫的一個個解決實(shí)際問題,滿足日常需求的網(wǎng)絡(luò)程序,都是在應(yīng)用層。 協(xié)議是一種約定。網(wǎng)絡(luò)協(xié)議是計算機(jī)網(wǎng)絡(luò)中通信雙方都必須遵守的一組約定。 在網(wǎng)絡(luò)通信中,都是以 “字符串” 的方式來發(fā)送和接收數(shù)據(jù)的。 如果要發(fā)送和接收一些結(jié)構(gòu)化的數(shù)據(jù),就需要序

    2023年04月26日
    瀏覽(19)
  • 【Java】應(yīng)用層協(xié)議HTTP和HTTPS

    【Java】應(yīng)用層協(xié)議HTTP和HTTPS

    HTTP (全稱為 “超文本傳輸協(xié)議”) 是一種應(yīng)用非常廣泛的 應(yīng)用層協(xié)議. HTTP 往往是基于傳輸層的 TCP 協(xié)議實(shí)現(xiàn)的. (HTTP1.0, HTTP1.1, HTTP2.0 均為TCP, HTTP3 基于 UDP 實(shí)現(xiàn)) 當(dāng)我們在瀏覽器中輸入一個 搜狗搜索的 “網(wǎng)址” (URL) 時, 瀏覽器就給搜狗的服務(wù)器發(fā)送了一個 HTTP 請 求, 搜狗的服

    2024年02月07日
    瀏覽(25)
  • 【Linux】應(yīng)用層協(xié)議:HTTP和HTTPS

    【Linux】應(yīng)用層協(xié)議:HTTP和HTTPS

    每個人都可以很喜歡每個人,但喜歡治不了病,喜歡買不了東西,喜歡不能當(dāng)飯吃,喜歡很廉價… 1.1 URL的組成 1. 在之前的文章中我們實(shí)現(xiàn)了一個網(wǎng)絡(luò)版本的計算器,在那個計算器中揉合了協(xié)議定制以及序列化反序列化的內(nèi)容,我們當(dāng)時也自己定制了一套協(xié)議標(biāo)準(zhǔn),比如請求

    2024年02月10日
    瀏覽(17)
  • 【計算機(jī)網(wǎng)絡(luò)】應(yīng)用層——HTTP 協(xié)議(一)

    【計算機(jī)網(wǎng)絡(luò)】應(yīng)用層——HTTP 協(xié)議(一)

    個人主頁:兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【網(wǎng)絡(luò)編程】 本專欄旨在分享學(xué)習(xí)計算機(jī)網(wǎng)絡(luò)的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評論區(qū)交流討論?? HTTP協(xié)議全稱超文本傳輸協(xié)議,通過瀏覽器和服務(wù)器進(jìn)行數(shù)據(jù)交互,進(jìn)行

    2024年01月23日
    瀏覽(29)
  • 應(yīng)用層協(xié)議——DNS、DHCP、HTTP、FTP

    應(yīng)用層協(xié)議——DNS、DHCP、HTTP、FTP

    目錄 1、DNS 協(xié)議 1-1)Hosts 文件 1-2)DNS 系統(tǒng) 1-3)域名的組成、分類和樹狀結(jié)構(gòu) 1-4)DNS 域名服務(wù)器類型 1-5)DNS 查詢方式 1-6)DNS 域名解析的一般步驟 1-7)對象類型與資源記錄 2、DHCP 協(xié)議 2-1)DHCP 動態(tài)分配的步驟 2-2)DHCP 報文類型含義與發(fā)送方式 2-3)DHCP 中繼(DHCP relay) 2

    2024年02月07日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包