1. 程式人生 > >HTTP協議基礎(一):簡單的HTTP協議

HTTP協議基礎(一):簡單的HTTP協議

HTTP協議是一個屬於TCP/IP通訊協議應用層的一種面向物件的超文字傳輸協議。

HTTP的主要特點:

1. 用於客戶端和服務端之間的通訊

  應用 HTTP 協議時,必定是一端擔任客戶端角色,另一端擔任伺服器端角色,按實際情況,客戶端和伺服器端的角色可能會發生互換。 

2. 通過請求和響應的交換達成通訊

  HTTP 協議規定,請求從客戶端發出,最後伺服器端響應該請求並返回。換句話說,肯定是先從客戶端開始建立通訊的,伺服器端在沒有接收到請求之前不會發送響應(使用http協議實現推送功能比較困難)。 

3. HTTP是一種不儲存狀態的協議

  為了更快地處理大量事務,確保協議的可伸縮性,HTTP 協議自身不對請求和響應之間的通訊狀態進行儲存。也就是說在 HTTP 這個級別,協議對於傳送過的請求或響應都不做持久化處理。
  隨著Web的不斷髮展,需要實現儲存類似於登陸狀態等功能,於是引入了 Cookie技術

。 

4. 請求URI定位資源

  當客戶端請求訪問資源而傳送請求時,URI 需要將作為請求報文中的請求 URI 包含在內。正是因為 URI 的特定功能,在網際網路上任意位置的資源都能訪問到。 

5. 通過HTTP方法告知伺服器意圖
方法 用途 描述
GET 獲取資源 GET 方法用來請求訪問已被 URI 識別的資源。指定的資源經伺服器端解析後返回響應內容。
POST 傳輸實體主體 GET主要目的是獲取響應的主體內容,POST主要目的是把傳輸實體的主體傳輸給伺服器。
PUT 傳輸檔案 就像 FTP 協議的檔案上傳一樣,要求在請求報文的主體中包含檔案內容,然後儲存到請求 URI 指定的位置。(不帶驗證機制,不安全)
HEAD 獲得報文首部 HEAD 方法和 GET 方法一樣,只是不返回報文主體部分。用於確認URI 的有效性及資源更新的日期時間等。
DELETE 刪除檔案 按請求 URI 刪除指定的資源,與PUT相反。(不帶驗證機制,不安全)
OPTIONS 詢問支援的方法 用來查詢針對請求 URI 指定的資源支援的方法。
TRACE 追蹤路徑 讓 Web 伺服器端將之前的請求通訊環回給客戶端的方法。
CONNECT 要求用隧道協議連線代理 主要使用 SSL(Secure Sockets Layer,安全套接層)和 LS(Transport Layer Security,傳輸層安全)協議把通訊內容加 密後經網路隧道傳輸。


注意:方法名區分大小寫,注意要用大寫字母。

HTTP/1.0 和 HTTP/1.1 支援的方法

HTTP/1.0 和 HTTP/1.1 支援的方法
6. 持久連線節省通訊量

  HTTP 協議的初始版本中,每進行一次 HTTP 通訊就要斷開一次 TCP連線。
  以當年的通訊情況來說,因為都是些容量很小的文字傳輸,所以即使這樣也沒有多大問題。可隨著 HTTP 的普及,文件中包含大量圖片的情況多了起來。
  比如,使用瀏覽器瀏覽一個包含多張圖片的 HTML 頁面時,在傳送請求訪問 HTML 頁面資源的同時,也會請求該 HTML 頁面裡包含的其他資源。因此,每次的請求都會造成無謂的 TCP 連線建立和斷開,增加通訊量的開銷。
  
  持久連線
  持久連線(HTTP Persistent Connections)也稱為 HTTP keep-alive 或HTTP connection reuse,特點是,只要任意一端沒有明確提出斷開連線,則保持 TCP 連線狀態。
  持久連線的好處在於減少了 TCP 連線的重複建立和斷開所造成的額外開銷,減輕了伺服器端的負載。另外,減少開銷的那部分時間,使HTTP 請求和響應能夠更早地結束,這樣 Web 頁面的顯示速度也就相應提高了。
  注意:伺服器端和客戶端需要同時支援持久連線。
  
  管線化
  持久連線使得多數請求以管線化(pipelining)方式傳送成為可能。從前傳送請求後需等待並收到響應,才能傳送下一個請求。管線化技術出現後,不用等待響應亦可直接傳送下一個請求。用持久連線可以讓請求更快結束,請求數越多,時間差就越明顯。

  HTTP 是無狀態協議,它不對之前發生過的請求和響應的狀態進行管理。
  不可否認,無狀態協議當然也有它的優點。由於不必儲存狀態,自然可減少伺服器的 CPU 及記憶體資源的消耗。從另一側面來說,也正是因為 HTTP 協議本身是非常簡單的,所以才會被應用在各種場景裡。
  Cookie 技術通過在請求和響應報文中寫入 Cookie 資訊來控制客戶端的狀態。Cookie 會根據從伺服器端傳送的響應報文內的一個叫做 Set-Cookie 的首部欄位資訊,通知客戶端儲存 Cookie。當下次客戶端再往該伺服器傳送請求時,客戶端會自動在請求報文中加入 Cookie 值後傳送出去。伺服器端發現客戶端傳送過來的 Cookie 後,會去檢查究竟是從哪一個客戶端發來的連線請求,然後對比伺服器上的記錄,最後得到之前的狀態資訊。
  

沒有 Cookie 資訊狀態下的請求

第一次請求:沒有 Cookie 資訊狀態
存有 Cookie 資訊狀態的請求

第二次請求:存有Cookie資訊狀態的請求

HTTP 請求報文和響應報文的內容如下:

1、沒有 Cookie 資訊狀態的請求報文:

GET /reader/ HTTP/1.1
Host: hackr.jp // 首部欄位內沒有Cookie的相關資訊

2、伺服器端生成 Cookie 資訊後的響應報文

HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Wed,10-Oct-12 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8

3、儲存 Cookie 資訊後再次請求的報文

GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724 // 首部欄位內已經含有了Cookie相關資訊

本人能力有限,如果此博文中有哪裡講得讓人難以理解,歡迎留言交流,若有講解錯的地方歡迎指出,大家互相學期,共同進步!

相關推薦

HTTP協議基礎()簡單HTTP協議

HTTP協議是一個屬於TCP/IP通訊協議應用層的一種面向物件的超文字傳輸協議。 HTTP的主要特點: 1. 用於客戶端和服務端之間的通訊   應用 HTTP 協議時,必定是一端擔任客戶端角色,另一端擔任伺服器端角色,按實際情況,客戶端和伺服器端的角色

HTTP協議篇()多路複用、資料流

管道機制、多路複用 管道機制(Pipelining)  HTTP 1.1 引入了管道機制(Pipelining),即客戶端可通過同一個TCP連線同時傳送多個請求。如果客戶端需要請求兩個資源,以前的做法是在同一個TCP連線裡面,先發送A請求,然後等待伺服器做出迴應,收到後再

http協議基礎(四)http狀態碼 Status Code狀態碼詳解對照表

一:http狀態碼 表示客戶端http請求的返回結果、標記伺服器端的處理是否正常、通知出現的錯誤等工作 狀態碼的類別如下: http狀態碼種類繁多,大概有60多種,實際上經常使用的只有14種,下面為一一介紹   1、2XX 成功:請求被正常處理 1.1 200 OK 表示從客戶端發

Android中的Http通訊()之Http協議基本知識

寫了這麼久的專案,幾乎每個專案都用到了網路請求,不對,是所有的專案。一直沒有對這一塊做過詳細的總結,今天結合一些網上的資料以及自己的理解,來談談Http。廢話不多說,直奔正題吧...... 我們如果想要真正的瞭解Http,我們必須要知道什麼是Http? 一、什麼是Http?

Java基礎 實驗簡單資料型別和流程控制

1.實驗目的 掌握識別符號的定義規則、表示式的組成、各種資料型別及其使用方法、各種運算子的使用及其優先順序控制。掌握分支結構,迴圈結構,continue,break,語句標號等內容。 2.實驗內容 (1)輸入一個三角形的3個邊長,檢查是否能構成一個直角三角形。 (2)任意從鍵盤輸入一個0到

Java基礎 實驗簡單資料型別和流程控制

1.實驗目的 掌握識別符號的定義規則、表示式的組成、各種資料型別及其使用方法、各種運算子的使用及其優先順序控制。掌握分支結構,迴圈結構,continue,break,語句標號等內容。 2.實驗內容 (1)輸入一個三角形的3個邊長,檢查是否能構成一個直角三角形。 (2)任意

網路基礎網路通訊協議簡要(下)

我們已經知道,網路通訊就是交換資料包。電腦A向電腦B傳送一個數據包,後者收到了,回覆一個數據包,從而實現兩臺電腦之間的通訊。資料包的結構,基本上是下面這樣: 傳送這個包,需要知道兩個地址:* 對方的MAC地址;* 對方的IP地址。有了這兩個地址,資料包才能準確送到接收者手中。

TP5學習基礎增刪改查小demo

表單 arr 處理 php req 學習 model類 浪費 新手 ①TP5--增刪改查簡單的demo 我先吐槽一下:因為工作需要研究tp5,去官網看了一下哎呦,資源挺多挺全啊!然後下載唯一免費的官方教程,我曹pdf打開533頁。講的很細但是開發能等看完才做嗎?看到精簡版快

簡單工廠模式

returns 原則 分離 問題 簡單的 編號 tor 在一起 分享 設計模式分類:  創建型模式。  結構型模式。  行為模式。   23種設計模式,如何記。面向對象的系統中有很多對象,創建型模式解決的問題就是如何創建對象,何時創建對象,它努力的讓代碼不要太多的關註對象的

UI基礎簡單的assign block

tro other 開發 初始化 proposal rop pla png 情況 經常會有需求讓在標準的order加個assign block,那就來簡單說一下: 1.創建assign block組件ZXXXXXX 2.添加BTORDER節點和GUID屬性 3.創建表視圖(

Appium基礎Appium概念

模擬 互傳 結果 ati 對象 androi 應用 協議 json對象 1.Appium介紹: Appium是一款開源跨平臺(IOS和Android平臺)支持多種開發語言(java、python等)進行測試Native/Web/Hybrid的Android/iOS Appl

python django學習簡單註冊/登陸/session

rfi bmi ews exception eth mar %u objects 未使用 註冊 登陸 session user.html 未使用{{useform}}而使用{{ userform.password }}形式便於後期css樣式 <!DOCTYPE htm

ArcGIS Engine 開發學習-------基礎()自定義命令

 要求:在ToolbarControl中新增一個自定義命令,點選可清除當前活動工具。     步驟: 1、建立GIS類,選擇Base Command模版,Extending ArcObjects,ArcMap MapControl or PageLayo

Python基礎編譯器的選擇與Python保留關鍵字

eclipse外掛的安裝 Python保留關鍵字 ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'els

《TCP/IP協議族》TCP/IP協議頭部結構體

  乙太網頭部14 bytes Destination Source Len Data unit + pad FCS (6 bytes)

Spring Boot ()簡單的開始

最近開始研究了下Spring Boot,簡單寫了個Demo。中途也遇到了一些坑。跟大家分享下。 如果你用了IDEA後,你會發現,Eclipse已經漸漸地要離開自己的懷抱中了。豐富的外掛、智慧提示、靈活的快捷鍵、多功能除錯......簡直是完美,如果非要挑剔,我只能說非社群版是收費版了。

利用unittest+ddt進行介面測試()簡單demo

原文地址 一般進行介面測試時,每個介面的傳參都不止一種情況,一般會考慮正向、逆向等多種組合。所以在測試一個介面時通常會編寫多條case,而這些case除了傳參不同外,其實並沒什麼區別。 這個時候就可以利用ddt來管理測試資料,提高程式碼複用率。 先看一個簡單的dem

Python 基礎基本語法字符串---數字----布爾

定義 font 區別 not 多行 word eba als 字符串拼接 數字類型:int(整型)   定義:        查找數據類型:type   >>> a= 2**64   >>>

Python 基礎基本語法字串---數字----布林格式化輸出

現有一練習需求,問使用者的姓名、年齡、工作、愛好 ,然後列印成以下格式 ------------ info of Alex Li ----------- Name : Alex Li Age : 22 job : Teacher Hobbie: girl ------------- end ---

Vue爬坑之路 簡單介紹vue及使用vue-cli腳手架工具快速搭建專案

關於Vue.js Vue.js是最近特別火的一個前端MVVM框架,類似於Angular,但更容易上手,而且因為作者是中國人的原因,所以Vue.js的中文文件比較齊全,很多的問題都能在官網文件中得到解決! 使用cnpm安裝Vue.js 首先得下載一下np