轉:HTTP協議簡介與在python中的使用詳解

1. 使用谷歌/火狐瀏覽器分析

在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP,所以:

  • HTML是一種用來定義網頁的文本,會HTML,就可以編寫網頁;

  • HTTP是在網絡上傳輸HTML的協議,用于瀏覽器和服務器的通信。

Chrome瀏覽器提供了一套完整地調試工具,非常適合Web開發。

安裝好Chrome瀏覽器后,打開Chrome,直接打開網頁按F12“”即可

說明

  • Elements顯示網頁的結構
  • Network顯示瀏覽器和服務器的通信

我們點Network,確保第一個小紅燈亮著,Chrome就會記錄所有瀏覽器和服務器之間的通信:

2. http協議的分析

當我們在地址欄輸入www.sina.com時,瀏覽器將顯示新浪的首頁。在這個過程中,瀏覽器都干了哪些事情呢?通過Network的記錄,我們就可以知道。在Network中,找到www.sina.com那條記錄,點擊,右側將顯示Request Headers,點擊右側的view source,我們就可以看到瀏覽器發給新浪服務器的請求:

2.1 瀏覽器請求

?

說明

最主要的頭兩行分析如下,第一行:

    GET / HTTP/1.1

GET表示一個讀取請求,將從服務器獲得網頁數據,/表示URL的路徑,URL總是以/開頭,/就表示首頁,最后的HTTP/1.1指示采用的HTTP協議版本是1.1。目前HTTP協議的版本就是1.1,但是大部分服務器也支持1.0版本,主要區別在于1.1版本允許多個HTTP請求復用一個TCP連接,以加快傳輸速度。

從第二行開始,每一行都類似于Xxx: abcdefg:

    Host: www.sina.com

表示請求的域名是www.sina.com。如果一臺服務器有多個網站,服務器就需要通過Host來區分瀏覽器請求的是哪個網站。

2.2 服務器響應

繼續往下找到Response Headers,點擊view source,顯示服務器返回的原始響應數據:

HTTP響應分為Header和Body兩部分(Body是可選項),我們在Network中看到的Header最重要的幾行如下:

    HTTP/1.1 200 OK

200表示一個成功的響應,后面的OK是說明。

如果返回的不是200,那么往往有其他的功能,例如

  • 失敗的響應有404 Not Found:網頁不存在
  • 500 Internal Server Error:服務器內部出錯
  • ...等等...
    Content-Type: text/html

Content-Type指示響應的內容,這里是text/html表示HTML網頁。

請注意,瀏覽器就是依靠Content-Type來判斷響應的內容是網頁還是圖片,是視頻還是音樂。瀏覽器并不靠URL來判斷響應的內容,所以,即使URL是http://www.baidu.com/meimei.jpg,它也不一定就是圖片。

HTTP響應的Body就是HTML源碼,我們在菜單欄選擇“視圖”,“開發者”,“查看網頁源碼”就可以在瀏覽器中直接查看HTML源碼:

瀏覽器解析過程?

當瀏覽器讀取到新浪首頁的HTML源碼后,它會解析HTML,顯示頁面,然后,根據HTML里面的各種鏈接,再發送HTTP請求給新浪服務器,拿到相應的圖片、視頻、Flash、JavaScript腳本、CSS等各種資源,最終顯示出一個完整的頁面。所以我們在Network下面能看到很多額外的HTTP請求。

3. 總結

3.1 HTTP請求

跟蹤了新浪的首頁,我們來總結一下HTTP請求的流程:

3.1.1 步驟1:瀏覽器首先向服務器發送HTTP請求,請求包括:

方法:GET還是POST,GET僅請求資源,POST會附帶用戶數據;

路徑:/full/url/path;

域名:由Host頭指定:Host: www.sina.com

以及其他相關的Header;

如果是POST,那么請求還包括一個Body,包含用戶數據

3.1.1 步驟2:服務器向瀏覽器返回HTTP響應,響應包括:

響應代碼:200表示成功,3xx表示重定向,4xx表示客戶端發送的請求有錯誤,5xx表示服務器端處理時發生了錯誤;

響應類型:由Content-Type指定;

以及其他相關的Header;

通常服務器的HTTP響應會攜帶內容,也就是有一個Body,包含響應的內容,網頁的HTML源碼就在Body中。

3.1.1 步驟3:如果瀏覽器還需要繼續向服務器請求其他資源,比如圖片,就再次發出HTTP請求,重復步驟1、2。

Web采用的HTTP協議采用了非常簡單的請求-響應模式,從而大大簡化了開發。當我們編寫一個頁面時,我們只需要在HTTP請求中把HTML發送出去,不需要考慮如何附帶圖片、視頻等,瀏覽器如果需要請求圖片和視頻,它會發送另一個HTTP請求,因此,一個HTTP請求只處理一個資源(此時就可以理解為TCP協議中的短連接,每個鏈接只獲取一個資源,如需要多個就需要建立多個鏈接)

HTTP協議同時具備極強的擴展性,雖然瀏覽器請求的是http://www.sina.com的首頁,但是新浪在HTML中可以鏈入其他服務器的資源,比如<img src="http://i1.sinaimg.cn/home/2013/1008/U8455P30DT20131008135420.png">,從而將請求壓力分散到各個服務器上,并且,一個站點可以鏈接到其他站點,無數個站點互相鏈接起來,就形成了World Wide Web,簡稱WWW。

3.2 HTTP格式

每個HTTP請求和響應都遵循相同的格式,一個HTTP包含Header和Body兩部分,其中Body是可選的。

HTTP協議是一種文本協議,所以,它的格式也非常簡單。

3.2.1 HTTP GET請求的格式

  1. GET /path HTTP/1.1
  2. Header1: Value1
  3. Header2: Value2
  4. Header3: Value3

每個Header一行一個,換行符是\r\n。

3.2.2 HTTP POST請求的格式:

  1. POST /path HTTP/1.1
  2. Header1: Value1
  3. Header2: Value2
  4. Header3: Value3
  5. body data goes here...

當遇到連續兩個\r\n時,Header部分結束,后面的數據全部是Body。

3.2.3 HTTP響應的格式:

  1. 200 OK
  2. Header1: Value1
  3. Header2: Value2
  4. Header3: Value3
  5. body data goes here...

HTTP響應如果包含body,也是通過\r\n\r\n來分隔的。

請再次注意,Body的數據類型由Content-Type頭來確定,如果是網頁,Body就是文本,如果是圖片,Body就是圖片的二進制數據。

當存在Content-Encoding時,Body數據是被壓縮的,最常見的壓縮方式是gzip,所以,看到Content-Encoding: gzip時,需要將Body數據先解壓縮,才能得到真正的數據。壓縮的目的在于減少Body的大小,加快網絡傳輸。

本文轉自:https://blog.csdn.net/qq_26442553/article/details/95031100 作者:牛大財有大才

老猿Python,跟老猿學Python!
博客地址:https://blog.csdn.net/LaoYuanPython
請大家多多支持,點贊、評論和加關注!謝謝!

轉載于:https://www.cnblogs.com/LaoYuanPython/p/11166823.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248538.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深受企業青睞的華為云

作為中國經濟活力與韌性的重要保障&#xff0c;無數中小企業也在為奪得各自領域的冠軍你追我趕。而席卷全球的數字化轉型浪潮&#xff0c;則將這場冠軍爭奪賽推向了關鍵節點。企業數字化的第一步就是業務云端化&#xff0c;對企業來說云計算是不可或缺的數字底座。上云&#xf…

一個程序員的水平能差到什么程度?

老板覺得公司里都是男的&#xff0c;缺少一點陰柔之氣&#xff0c;想平衡一下&#xff0c;正巧當時互金公司倒了一大批&#xff0c;大批簡歷投到公司&#xff0c;老板以為自己也是技術出身&#xff0c;就招了一個三年工作經驗的女程序員&#xff0c;互金出來的&#xff0c;要價…

vue路由詳解版一目了然

概念 路由的本質就是一種對應關系&#xff0c;比如說我們在url地址中輸入我們要訪問的url地址之后&#xff0c;瀏覽器要去請求這個url地址對應的資源。 那么url地址和真實的資源之間就有一種對應的關系&#xff0c;就是路由。 路由分為前端路由和后端路由 1).后端路由是由服務…

go語言環境搭建

1、windows環境搭建   1、安裝go   2、安裝goland開發工具包 2、test.go /* 可執行文件&#xff0c;包名必須是main */ package main /* fmt 字符串格式化的包 */ import "fmt"/*main入口函數*/ func main() { fmt.Printf("Hello, world" )} View Code…

進階函數

一、函數對象 函數是第一類對象&#xff1a;函數名指向的值可以被當做參數傳遞 1.函數名可以被傳遞 def func():print(func)f func # 函數名可以當做變量名 print(f) # f指向的也是函數func指向函數體代碼的內存地址 2.函數名可以被當做參數傳遞給其他參數 def func():print…

vue腳手架基礎API全面講解【內附多個案例】

vscode-插件補充 vue文件代碼高亮插件-vscode中安裝 代碼提示插件-vscode中安裝 知識點自測 想學會今天的內容, 先測測這幾個會不會 表達式, 變量是什么 new的作用和含義 實例化對象 什么是對象上的, 屬性和方法 對象的賦值和取值 this的指向 npm/yarn是什么, package.json干…

mysql 和 sqlserver sql差異比較

mysql:select * from table_name limit 100,200;--取出從100到200的數據 獲取時間&#xff1a;mysql:now() mysql tinyint&#xff08;0,1&#xff09; → bit float &#xff08;decimal(19,4)&#xff09;→ moneytext → ntextvarchar →nvarchar 轉載于:https://www.cnblo…

Vue 過濾器、計算屬性、偵聽器 圖解版 一目了然

文章目錄本篇學習目標1. vue基礎1.0_vue基礎 v-for更新監測1.1_vue基礎_v-for就地更新1.2_vue基礎_虛擬dom1.3_vue基礎_diff算法情況1: 根元素變了, 刪除重建情況2: 根元素沒變, 屬性改變, 元素復用, 更新屬性1.4_vue基礎_diff算法-key情況3: 根元素沒變, 子元素沒變, 元素內容…

linux shell命令行選項與參數用法詳解

問題描述&#xff1a;在linux shell中如何處理tail -n 10 access.log這樣的命令行選項&#xff1f;在bash中&#xff0c;可以用以下三種方式來處理命令行參數&#xff0c;每種方式都有自己的應用場景。1&#xff0c;直接處理&#xff0c;依次對$1,$2,...,$n進行解析&#xff0c…

Vue自定義指令原來這么簡單

本篇學習目標 能夠了解組件進階知識能夠掌握自定義指令創建和使用能夠完成tabbar案例的開發 1. 組件進階 1.0 組件進階 - 動態組件 目標: 多個組件使用同一個掛載點&#xff0c;并動態切換&#xff0c;這就是動態組件 需求: 完成一個注冊功能頁面, 2個按鈕切換, 一個填寫注冊…

重載(overload)與重寫(override)的區別

overload&#xff08;重載&#xff09;:在同一個類中&#xff0c;方法名相同&#xff0c;參數列表不相同。與返回值類型無關。 override&#xff08;重寫&#xff09;:存在同一個類中&#xff0c;或者父子接口中&#xff0c;方法名相同個&#xff0c;參數列表相同。遵循“兩同兩…

python學習,day3:函數式編程,*arge,**kwargs

對于不固定長度的參數&#xff0c;需要使用*arge&#xff0c;**kwargs來調用&#xff0c;區別是*arge是轉換為元組&#xff0c;而kwargs轉化為字典 # codingutf-8 # Author: RyAn Bi def test(*args): #參數組print(args)test(1,2,4,6,7,8) #方式1 test(*[1,2,4,5,6]) #方式2 #…

那些被人忽略的Vue導航知識

本篇學習目標 能夠了解單頁面應用概念和優缺點能夠掌握vue-router路由系統使用能夠掌握鏈接導航和編程式導航用法能夠掌握路由嵌套和路由守衛能夠掌握vant組件庫基礎使用 1. vue路由簡介和基礎使用 1.0 什么是路由 目標: 設備和ip的映射關系 目標: 接口和服務的映射關系 目…

passwd命令

-n 在這幾天你不能更改密碼&#xff01; -x 在n<時間<x在這段時間內你必須修改密碼&#xff01; -w 當距離x日期還有w天的時候開始提醒你改密碼&#xff01; -i 密碼過期i天之后&#xff0c;此密碼停用&#xff0c;你也就無法用此密碼登陸這個用戶了。注意是密碼過期之后…

一文帶你吃透Vue生命周期(結合案例通俗易懂)

文章目錄本篇學習目標1. vue生命周期1.0_人的-生命周期1.1_鉤子函數1.2_初始化階段1.3_掛載階段1.4_更新階段1.5_銷毀階段2. axios2.0_axios基本使用2.1_axios基本使用-獲取數據2.2_axios基本使用-傳參2.3_axios基本使用-發布書籍2.4_axios基本使用-全局配置3. nextTick和nextT…

[SCOI2012]滑雪 (最小生成樹 Kruskal)

題目描述 a180285非常喜歡滑雪。他來到一座雪山&#xff0c;這里分布著M條供滑行的軌道和N個軌道之間的交點&#xff08;同時也是景點&#xff09;&#xff0c;而且每個景點都有一編號i(1≤i≤N)和一高度Hi?。a180285能從景點ii滑到景點j當且僅當存在一條i和j之間的邊&#xf…

來學習ansibie(1)

# ansible 批量在遠程主機上執行命令 python2.7編寫 ## 安裝 第一步:下載epel源 shellwget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 第二步:安裝 shellyum install -y ansible ## ansible 命令格式 shellUsage: ansible <host-pattern&g…

CQYZOJ P1392 拔河問題

題目\(1\) Description 一個學校舉行拔河比賽&#xff0c;所有的人被分成了兩組&#xff0c;每個人必須&#xff08;且只能夠&#xff09;在其中的一組&#xff0c;且兩個組內的所有人體重加起來盡可能地接近. Input 第\(1\)行是一個\(n\)&#xff0c;表示參加拔河比賽的總人數…

靈活的Vue組件——原來這么簡單

本篇學習目標 能夠理解vue組件概念和作用能夠掌握封裝組件能力能夠使用組件之間通信能夠完成todo案例 1. vue組件 1.0_為什么用組件 以前做過一個折疊面板 需求: 現在想要多個收起展開的部分 方案1: 復制代碼 代碼重復 冗余不利于維護 案例用less寫的樣式, 所以下載 ya…

FOI冬令營 Day 3

目錄 T1、簽到題&#xff08;sort&#xff09;傳送門 Code T2、送分題&#xff08;queue&#xff09;傳送門 Code T3、簡單題&#xff08;game&#xff09;傳送門 Code 咕咕咕T1、簽到題&#xff08;sort&#xff09; 傳送門 原題&#xff1a;LOJ 2767 Code //2019/2/14 //50…