1. 程式人生 > >Http淺析【1】——流程|請求頭|響應頭|狀態碼

Http淺析【1】——流程|請求頭|響應頭|狀態碼

本文如有疏漏,後續將繼續補充。

HTTP知識

Http工作的基本流程

(1)http客戶端發起請求,建立埠;

(2)http伺服器在埠監聽客戶端 請求;

(3)http伺服器向客戶端返回狀態和內容;

當我們在瀏覽器中輸入一個網址時,瀏覽器和伺服器之間發生瞭如下的事情:

(1)域名解析。瀏覽器首先搜尋自身的DNS快取,檢視自身快取中是否有域名對應的ip地址,快取的時間大概是1min。以chrome瀏覽為例子,我們在

chrome當中輸入chrome://net-internals/#dns

就能檢視當前chrome快取的dns

(2)如果瀏覽器沒有快取或者快取已經失效,那麼作業系統會搜尋作業系統自身的一個dns快取。

(3)讀取本地的host檔案;

(4)瀏覽器發起一個dns的系統呼叫,向本地址庫dns伺服器,一般是寬頻域名商,發起一個域名解析請求。在這一步中以imooc.com為例子,運營商伺服器又將經過如下的幾個步驟:

 1. 寬頻執行商檢視本身的快取

 2. 運營服務商代替瀏覽器發起一個迭代的dns解析請求。也就是說運營商會向根域傳送一個域名解析請求,根域發現這是一個com的頂級域域名,就會告訴運營商com域域名的地址。

 3. 運營商接著向com域的dns伺服器詢問域名的ip地址,com域伺服器會告訴運營商imooc.com所在域的地址,這個地址一般是域名註冊商的伺服器地址,例如萬網、新網之類。這時註冊商伺服器就會查詢自身的dns列表,將域名的ip地址返回給運營商伺服器。

 4.
運營商拿到域名的ip地址,把結果返回給作業系統核心快取起來; 5. 作業系統核心把結果返回給瀏覽器;

(5)瀏覽器最終拿到ip地址,發起經典的Http“三次握手”,此時瀏覽器以一個隨機埠向伺服器的web程式,例如80埠連線請求。這個連線請求通過層層的路由裝置到達伺服器端後進入到網絡卡,然後進入到核心的TCP/IP協議棧,當然還可能經過防火牆的過濾,最終到達web服務端,緊接著就建立了TCP和IP的連線;

(6)TCP/IP連線建立起來之後,瀏覽器就可以向伺服器傳送Http請求了;

(7)伺服器端接受到請求,根據路徑引數,經過後端一些處理之後,把處理後的一個結果資料返回給瀏覽器,如果是頁面的話,那就是返回完整的HTML程式碼。

(8)瀏覽器拿到了網站完整的HTML頁面程式碼後,通過渲染引擎解析和渲染JS、CSS、圖片靜態資源等等,這個過程實際上也是一個個的Http請求,它們都需要經過上面的主要七個步驟。

(9)瀏覽器根據拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現在使用者的面前。

這裡的Http請求知識一個大概的梳理,更多詳細的細節需要再去查閱專門的書籍和文章,這裡推薦一本講解Http的書籍:
圖解http-下載地址

http組成部分

我們可以簡單地把http協議拆分成【請求】和【響應】。

無論是請求還是響應都會發送http頭和正文的資訊。

Http Header 和 body

在整個網路傳輸資源的過程,header分為message-header和message-body,首先傳遞message-header 即Http header訊息。

http header又分為四個部分,general header ,request header, reponse header ,entity header。大體上可以分為request和response。

【1】http的請求方式:

【2】Host 請求web伺服器的地址

【3】User-agent http客戶端執行的瀏覽器的詳細資訊。通過此頭資訊,伺服器可以判斷瀏覽器的型別

【4】Accept 指客戶端可以接受的訊息型別,內容的先後順序表示客戶端接受的先後順序

【5】content-type 表示此http請求提交的內容型別。一般只有post提交時,才需要設定該屬性 。content-type的屬性值有以下兩種設定:

(1)“application/x-www-form-urlencoded”: 表單資料向伺服器提交時所採用的編碼型別,預設的預設值就是“application/x-www-form-urlencoded”。 然而,在向伺服器傳送大量的文字、包含非ASCII字元的文字或二進位制資料時這種編碼方式效率很低。

(2)“multipart/form-data”: 在檔案上載時,所使用的編碼型別應當是“multipart/form-data”,它既可以傳送文字資料,也支援二進位制資料上載。

當提交為表單資料時,可以使用“application/x-www-form-urlencoded”;當提交的是檔案時,就需要使用“multipart/form-data”編碼型別。

注意-content-type和accept的區別是:accept是表示客戶端希望接收的型別,屬於請求報文頭,content-type是傳送訊息的型別,屬於實體報文頭

http報文頭結構:通用報文頭 | 請求報文頭 | 響應報文頭 | 實體報文頭
請求方的http報文頭:通用報文頭 | 請求報文頭 | 實體報文頭
響應方的http報文頭:通用報文頭 | 響應報文頭 | 實體報文頭

【6】Keep-Alive:表示是否需要持久連線。如果web伺服器端看到這裡的值為“Keep-Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1預設進行持久連線),它就可以利用持久連線的優點

【7】 Accept-Encoding 指定客戶端瀏覽器可以支援的web伺服器返回內容壓縮編碼型別。表示允許伺服器在將輸出內容傳送到客戶端以前進行壓縮,以節約頻寬。而這裡設定的就是客戶端瀏覽器所能夠支援的返回壓縮格式。

【8】Accept-Charset HTTP客戶端瀏覽器可以接受的字元編碼集

【9】Accept-Lanuage 指定HTTP客戶端瀏覽器用來展示返回資訊優先選擇的語言

Reponse 響應頭
>


>
>

Http狀態碼

  • 1XX
    請求已經接受,正在處理。
  • 2XX
    請求成功,並已經處理。例如:
    200-請求成功
  • 3XX
    表示請求重定向,需要進一步的操作
  • 4XX
    客戶端錯誤,請求時存在語法錯誤,或者請求無法實現,例如:
    400-客戶端請求語法錯誤;
    401-請求沒有經過授權;
    403-服務端拒絕服務,可能是沒有許可權;
    404-服務頁面沒有找到
  • 5XX
    伺服器端錯誤,服務端可能無法實現合法的請求,例如:
    500-伺服器端發生不可預知錯誤
    503-服務端當前還不能處理請求

筆者個人訂閱號~歡迎小夥伴們關注
微信公眾號-感謝關注

相關推薦

Http淺析1——流程|請求|響應|狀態

本文如有疏漏,後續將繼續補充。 HTTP知識 Http工作的基本流程 (1)http客戶端發起請求,建立埠; (2)http伺服器在埠監聽客戶端 請求; (3)http伺服器向客戶端返回狀態和內容; 當我們在瀏覽器中輸入一個網址時,瀏覽器和伺

Nginx--1http代理和反向代理

nginx【1】代理服務;是一個位於客戶端和原始服務器之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。【2】反向代理:用戶某個服務器他是偷偷從另外一臺服務器上取回來

網絡知識1http、tcp/udp、soap的區別

target https tar 網絡知識 soa 區別 ext soap udp 一句話總結: soap信息可以通過http協議包裝後通過tcp或udp傳輸參考:https://zhidao.baidu.com/question/617706398106243452.ht

nodeexpress請求http與https一起能訪問

前言 當你有一個雲伺服器主機,你會怎麼辦,即時你是一名前端。在阿里申請免費的https的ssl證書,在node跑起來了,但是http卻不能跑了,是不是很氣了。下面就開始今天的任務吧。 實戰 請按照

Unity3d修煉之路:遊戲開發中,3d數學知識的練習1(不斷更新.......)

turn tor rdo pre 長度 scrip 縮放 unity3d float #pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB :

1從零開始做第三方支付開發-----初步了解概念

用例 深入 hub 編寫 不知道 了解 程序員 系列 bsp 這是第三方支付開發的第一篇. 目前很多公司在做海外支付, 但是不知道怎麽開始. 本人公司就是做海外產品, 涉及到paypal和stripe支付, 有比較多的經驗, 希望可以幫助需要的朋友. 我是做Java開發,

Spring-Security1認證和授權

部分 完整 業務 代碼 參數 web 用戶訪問 設置 管理權限 【認證】 憑據為基礎的認證: 當你登錄 e-mail 賬號時,你可能提供你的用戶名和密碼。E-mail的提供商會將你的用戶名與數據中的記錄進行匹配,並驗證你提供的密碼與對應的記錄是不是匹配。這些憑證(用戶名和

1JVM-內存模型

也會 安全性 編譯器 結構 cati local 狀況 本地方法棧 處理 本篇其實就是一個讀書筆記,書是《深入理解JAVA虛擬機》,在網上搜索JAVA內存,說的比較好的其實很多都源自這本書,作為一個JAVA程序員,理解虛擬機是通向高級程序員的必經道路。本篇中的圖片源自當時網

curl/wget 測試http請求響應信息

curl wget檢查http請求包頭信息1. wget –debugwget可以使用debug信息來查看信息頭,如下:[[email protected]/* */ ~]# wget --debug http://192.168.112.129/index.htmlDEBUG output cr

python學習記1

需要 靈活 執行 print 變量 信息 多說 格式 感謝 本人是個滲透小子 從開始接觸滲透已經將近四年了 現在目標就是python的學習與應用 今天聽了老男孩的python的課程所以心血來潮就來寫個文章 今天的內容很是多 主要學習了有幾個塊 1、 用戶的交互 使用inp

暑假NOIP期末考試1—— Phantom

ade 快的 while num eas for 靈感 搜索 時間復雜度 Phantom ?題目名稱: phantom ?時間限制:1 秒 ?空間限制:256 MiB 題目描寫敘述 在一個無限大的棋盤上。排列著 n * n 枚棋子,形成一

1000行代徒手寫正則表達式引擎1--JAVA中正則表達式的使用

基礎上 unicode 要求 [1] 分配 find 通過 images char 簡介: 本文是系列博客的第一篇,主要講解和分析正則表達式規則以及JAVA中原生正則表達式引擎的使用。在後續的文章中會涉及基於NFA的正則表達式引擎內部的工作原理,並在此基礎上用1000行左右

Android自己定義組件系列1——自己定義View及ViewGroup

全部 int ++ btn -i pre 剪切 final 界面 View類是ViewGroup的父類,ViewGroup具有View的全部特性。ViewGroup主要用來充當View的容器。將當中的View作為自己孩子,並對其進行管理。當然孩子也能夠是ViewGrou

JSP基本語法總結1(jsp工作原理,腳本元素,指令元素,動作元素)

ins 檢驗 welcome 域配置 ces 跳轉頁面 classes filter java代碼   時隔半年,回頭對jsp復習整理一下,溫故而知新。 jsp工作原理:   jsp服務器管理jsp頁面分兩個階段:轉換階段(translation phase)和執行階段

對js操作html的實踐1——實現網頁假崩潰吸引網友註意力

code 自己 頁面 註意力 size mat pre fun hidden 前些天逛網站的時候,發現了一些好玩的細節:當網頁失去焦點後標題顯示網頁崩潰,這將使得瀏覽者重新點回網頁。 來自ANOTHERHOME(https://www.anotherhome.net/)與晨

機器學習-常見問題積累1

屬性。 積累 兩種 所在 哪些 異常 缺失值 問題 推導 1、python和R在做數據分析時各有自己得擅長得領域,如python做時域分析得難度就遠遠比R大,因為R有非常成熟得Package! 2、數據處理:如何處理缺失數據?各種處理方法得的利弊? 3、數據處理:如何將類別

VSTO:使用C#開發Excel、Word1

windows ipp 加權 result 項目 進行 設計工程師 too 軟件 《Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath 》——By Eric Car

.NET學習日記1

之前 語句 logs 編碼器 ges images switch 並不是 聲明 不得不說,之前一年學習的內容基本上在第一章中都有所涉及,而且還講了很多不知道知識。看完第一張對多態和繼承都多了一些體會。在1.4前面的都有很認證的看過,也在vs上面驗證了一下。然後也明白了.N

1 地圖單位介紹

長度 分辨率 世界 地球 對角線 意義 常用 長度單位 計算機 1.常用單位 1)長度單位 1km(公裏)=1000m(米,公尺) 1m(米)=1000mm(毫米),1m=100cm(厘米) 1m=10dm(分米) 1m=3尺, 2)面積單位 1公頃=15畝,1公頃=

Fiddler抓包1_介紹及界面概述

緩存 沒有 user 編輯器 主菜單 selected ble bar 文件格式 一、 主要抓包工具介紹與對比 1、Wireshark :通用抓包工具,抓取信息量龐大,需要過濾才能得到有用信息,只抓HTTP請求有點大財小用。 2、Firebug、HttpWatch等We