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 支援的方法
6. 持久連線節省通訊量
HTTP 協議的初始版本中,每進行一次 HTTP 通訊就要斷開一次 TCP連線。
以當年的通訊情況來說,因為都是些容量很小的文字傳輸,所以即使這樣也沒有多大問題。可隨著 HTTP 的普及,文件中包含大量圖片的情況多了起來。
比如,使用瀏覽器瀏覽一個包含多張圖片的 HTML 頁面時,在傳送請求訪問 HTML 頁面資源的同時,也會請求該 HTML 頁面裡包含的其他資源。因此,每次的請求都會造成無謂的 TCP 連線建立和斷開,增加通訊量的開銷。
持久連線
持久連線(HTTP Persistent Connections)也稱為 HTTP keep-alive 或HTTP connection reuse,特點是,只要任意一端沒有明確提出斷開連線,則保持 TCP 連線狀態。
持久連線的好處在於減少了 TCP 連線的重複建立和斷開所造成的額外開銷,減輕了伺服器端的負載。另外,減少開銷的那部分時間,使HTTP 請求和響應能夠更早地結束,這樣 Web 頁面的顯示速度也就相應提高了。
注意:伺服器端和客戶端需要同時支援持久連線。
管線化
持久連線使得多數請求以管線化(pipelining)方式傳送成為可能。從前傳送請求後需等待並收到響應,才能傳送下一個請求。管線化技術出現後,不用等待響應亦可直接傳送下一個請求。用持久連線可以讓請求更快結束,請求數越多,時間差就越明顯。
7. 使用 Cookie 的狀態管理
HTTP 是無狀態協議,它不對之前發生過的請求和響應的狀態進行管理。
不可否認,無狀態協議當然也有它的優點。由於不必儲存狀態,自然可減少伺服器的 CPU 及記憶體資源的消耗。從另一側面來說,也正是因為 HTTP 協議本身是非常簡單的,所以才會被應用在各種場景裡。
Cookie 技術通過在請求和響應報文中寫入 Cookie 資訊來控制客戶端的狀態。Cookie 會根據從伺服器端傳送的響應報文內的一個叫做 Set-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