1. 程式人生 > >HTTP 詳細:協議簡介

HTTP 詳細:協議簡介

一、TCP/IP 協議介紹

  在介紹 HTTP 協議之前,先簡單說一下TCP/IP協議的相關內容。TCP/IP協議是分層的,從底層至應用層分別為:物理層、鏈路層、網路層、傳輸層和應用層,如下圖所示:

TCP/IP基礎--層次圖

  從應用層至物理層,資料是一層層封裝,封裝的方式一般都是在原有資料的前面加一個數據控制頭,資料封裝格式如下:

TCP/IP基礎--資料封裝

  其中,對於TCP傳輸協議,客戶端在於伺服器建立連線前需要經過TCP三層握手,過程如下:

TCP/IP基礎--TCP三次握手

二、HTTP協議

2.1 簡介

  超文字傳輸協議(Hypertext Transfer Protocol,簡稱HTTP)是應用層協議,自 1990 年起,HTTP 就已經被應用於 WWW 全球資訊服務系統。
  HTTP 是一種請求/響應式的協議。一個客戶機與伺服器建立連線後,傳送一個請求給伺服器;伺服器接到請求後,給予相應的響應資訊。
  HTTP 的第一版本 HTTP/0.9是一種簡單的用於網路間原始資料傳輸的協議;
  HTTP/1.0由 RFC 1945 定義 ,在原 HTTP/0.9 的基礎上,有了進一步的改進,允許訊息以類 MIME 資訊格式存 在,包括請求/響應正規化中的已傳輸資料和修飾符等方面的資訊;
  HTTP/1.1(RFC2616) 的要求更加嚴格以確保服務的可靠性,增強了在HTTP/1.0 沒有充分考慮到分層代理伺服器、高速緩衝儲存器、持久連線需求或虛擬主機等方面的效能;
  安全增強版的 HTTP (即S-HTTP或HTTPS),則是HTTP協議與安全套介面層(SSL)的結合,使HTTP的協議資料在傳輸過程中更加安全。

2.2 協議結構

  HTTP協議格式也比較簡單,格式如下:

HTTP協議--協議結構

2.3 HTTP 協議舉例

  下面是一個HTTP請求及響應的例子:

2.4 請求頭格式

a) 通用頭(general-header):
Cache-Control:客戶端希望服務端如何快取自己的請求資料,如"Cache-Control: no-cache","Cache-Control: max-age=0";
Connection:客戶端是否希望與服務端之間保持長連線,如"Connection: close", "Connection: keep-alive";
Date:只有當請求方法為POST或PUT方法時客戶端才可能會有些欄位;
Pragma:包含了客戶端一些特殊請求資訊,如 "Pragma: no-cache" 客戶端希望代理或應用伺服器不應快取與該請求相關的結果資料;
 

b) 請求頭(request-header):
Accept: 表明客戶同端可接受的請求迴應的媒體類型範圍列表。星號“*”用於按範圍將型別分組,用“*/*”指示可接受全部型別;用“type/*”指示可接受 type型別的所有子型別,如“ Accept: image/gif, image/jpeg, */*”;
Accept-Charset:客戶端所能識別的字符集編碼格式,格式:“Accept-Charset: 字符集1[:權重],字符集2[:權重]”,如:“ Accept-Charset: iso-8859-5, unicode-1-1;q=0.8”;
Accept-Language:客戶端所能識別的語言,格式:“Accept-Language: 語言1[:權重],語言2[:權重]”,如:” Accept-Language: zh, en;q=0.7”;
Host:客戶請求的主機域名或主機IP,格式:“Host: 域名或IP[:埠號]”,如:“Host: www.hexun.com:80“,請求行中若有HTTP/1.1則必須有該請求頭;
User-Agent:表明使用者所使用的瀏覽器標識,主要用於統計的目的;
Referer:指明該請求是從哪個關聯連線而來;

Accept-Encoding:客戶端所能識別的編碼壓縮格式,如:“Accept-Encoding: gzip, deflate”;
If- Modified-Since:該欄位與客戶端快取相關,客戶端所訪問的URL自該指定日期以來在服務端是否被修改過,如果修改過則服務端返回新的修改後 的資訊,如果未修改過則伺服器返回304表明此請求所指URL未曾修改過,如:“If-Modified-Since: Fri, 2 Sep 2006 19:37:36 GMT”;
If-None-Match:該欄位與客戶端快取相關,客戶端傳送URL請求的同時傳送該欄位及標識,如 果服務端的標識與客戶端的標識一致,則返回304表明此URL未修改過,如果不一致則服務端返回完整的資料資訊,如:“If-None-Match: 0f0a893aad8c61:253, 0f0a893aad8c61:252, 0f0a893aad8c61:251”;
Cookie:為擴充套件欄位,儲存於客戶端,向同一域名的服務端傳送屬於該域的cookie,如:“Cookie: MailUserName=whouse”;

c) 實體頭(entity-header): (此類頭存在時要求有資料體)
Content-Encoding:客戶端所能識別的編碼壓縮格式,如:“Content-Encoding: gzip, deflate”;
Content-Length:客戶端以POST方法上傳資料時資料體部分的內容長度,如:“ Content-Length: 24”;
Content- Type:客戶端傳送的資料體的內容型別,如:“Content-Type: application/x-www-form-urlencoded”為以普通的POST方法傳送的資料;“Content-Type: multipart/form-data; boundary=---------------------------5169208281820”,則表明資料體由多部分組成,分隔符為 “-----------------------------5169208281820”;

2.5)響應格式

a) 通用頭(general-header):
Cache- Control:服務端要求中間代理及客戶端如何快取自己響應的資料,如“Cache-Control: no-cache”,如:“Cache-Control: private” 不希望被快取,“Cache-Control: public” 可以被快取;
Connection:服務端是否希望與客戶端之間保持長連線,如“Connection: close”, “Connection: keep-alive”;
Date:只有當請求方法為POST或PUT方法時客戶端才可能會有些欄位;
Pragma:包含了服務端一些特殊響應資訊,如 “Pragma: no-cache” 服務端希望代理或客戶端不應快取結果資料;
Transfer-Encoding:服務端向客戶端傳輸資料所採用的傳輸模式(僅在HTTP1.1中出現),如:“Transfer-Encoding: chunked”,注:該欄位的優先順序要高於“Content-Length” 欄位的優先順序;

Via:一般用在代理閘道器嚮應用伺服器傳送的請求頭中,表明該來自客戶端的請求經過了閘道器代理,
     格式為:"Via: 請求協議版本  閘道器標識   [其它資訊] ",
     如 :" Via: 1.1  webcache_250_199.hexun.com:80 (squid)"

b)響應頭(response-header):
Accept-Ranges:表明服務端接收的資料單位,如:“Accept-Ranges: bytes”, ;
Location:服務端向客戶端返回此資訊以使客戶端進行重定向,如:“Location: http://www.hexun.com”;
Server:服務端返回的用於標識自己的一些資訊,如:“ Server: Microsoft-IIS/6.0”;
ETag:服務端返回的響應資料的標識欄位,客戶端可根據此欄位的值向伺服器傳送某URL是否更新的資訊;

c)實體頭(entity-header): (此類頭存在時要求有資料體)
Content-Encoding:服務端所響應資料的編碼格式,如:“Content-Encoding: gzip”;
Content-Length:服務端所返回資料的資料體部分的內容長度,如:“ Content-Length: 24”;
Content-Type:服務端所返回的資料體的內容型別,如:“Content-Type: text/html; charset=gb2312” ;
Set-Cookie:服務端返回給客戶端的cookie資料,如:“ Set-Cookie: ASP.NET_SessionId=icnh2ku2dqlmkciyobgvzl55; path=/”

2.6)伺服器返回狀態碼

1xx:表明服務端接收了客戶端請求,客戶端繼續傳送請求;
2xx:客戶端傳送的請求被服務端成功接收併成功進行了處理;
3xx:服務端給客戶端返回用於重定向的資訊;
4xx:客戶端的請求有非法內容;
5xx:服務端未能正常處理客戶端的請求而出現意外錯誤。

舉例:

“100”  ; 服務端希望客戶端繼續;
“200”  ; 服務端成功接收並處理了客戶端的請求;
“301”  ; 客戶端所請求的URL已經移走,需要客戶端重定向到其它的URL;
“304”  ; 客戶端所請求的URL未發生變化;
“400”  ; 客戶端請求錯誤;
“403”  ; 客戶端請求被服務端所禁止;
“404”  ; 客戶端所請求的URL在服務端不存在;
“500”  ; 服務端在處理客戶端請求時出現異常;
“501”  ; 服務端未實現客戶端請求的方法或內容;
“502”  ; 此為中間代理返回給客戶端的出錯資訊,表明服務端返回給代理時出錯;
“503”  ; 服務端由於負載過高或其它錯誤而無法正常響應客戶端請求;
“504”  ; 此為中間代理返回給客戶端的出錯資訊,表明代理連線服務端出現超時。

2.7)chunked 傳輸

   編碼使用若干個Chunk組成,由一個標明長度為0的chunk結束,每個Chunk有兩部分組成,第一部分是該Chunk的長度(以十六進位制表示)和 長度單位(一般不寫),第二部分就是指定長度的內容,每個部分用CRLF隔開。在最後一個長度為0的Chunk中的內容是稱為footer的內容,是一些 沒有寫的頭部內容。另外,在HTTP頭裡必須含有:” Transfer-Encoding: chunked” 通用頭欄位。格式如下:

chunked 傳輸

2.8)HTTP 請求方法

GET、POST、HEAD、CONNECT、PUT、DELETE、TRACE、OPTIONS

2.9)HTTP 斷點續傳

a)HTTP 請求頭

格式:Range: bytes={range_from}-{range_to}

該頭表示從後端 HTTP 伺服器取資料,開始偏移位置為 {range_from},結束偏移位置為 {range_to},其中偏移位置下標從 0 開始;如果省略了 {range_to} 則表示從指定的開始位置 {range_from} 至資料結尾。

如:Range: bytes=1024-2048  其表示讀取從偏移位置 1024 至 2028 的資料,而 Range: bytes=1024- 則表示讀取從偏移位置 1024 至資料結尾的資料。

b)HTTP 響應頭

格式:Content-Range: bytes {range_from}-{range_to}/{total_length}

其中 {range_from} 和 {range_to} 分別代表當前從服務端返回的資料的起始偏移位置(下標從 0 開始),這是一個雙向閉區間範圍,而 total_length 則指定了整個資料的總長度,此時 HTTP 響應頭中的 Content-Length 如果存在,則其值表示當前返回的資料塊(由 {range_from} 和 {range_to} 指定的資料區間)的長度。該長度內的資料包括 {range_from} 和 {range_to} 兩個位置的資料。

3.0)舉例

a)GET請求

Html程式碼  收藏程式碼
  1. GET http://photo.test.com/inc/global.js HTTP/1.1  
  2. Host: photo.test.com  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Encoding: gzip,deflate  
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  8. Keep-Alive: 300  
  9. Proxy-Connection: keep-alive  
  10. Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45  
  11. Cache-Control: max-age=0  

b)POST請求

Html程式碼  收藏程式碼
  1. POST / HTTP/1.1  
  2. Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*  
  3. Accept-Language: zh-cn  
  4. Content-Type: application/x-www-form-urlencoded  
  5. Accept-Encoding: gzip, deflate  
  6. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)  
  7. Host: www.test.com  
  8. Content-Length: 24  
  9. Connection: Keep-Alive  
  10. Cache-Control: no-cache  
  11. name=value&submitsubmit=submit  

c)通過HTTP代理髮送GET請求

Html程式碼  收藏程式碼
  1. GET http://mail.test.com/ HTTP/1.1  
  2. Host: mail.test.com  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Encoding: gzip,deflate  
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  8. Keep-Alive: 300  
  9. Proxy-Connection: keep-alive  

d)POST方式上傳檔案

Html程式碼  收藏程式碼
  1. POST http://www.test.comt/upload_attach?uidl=%3C HTTP/1.1  
  2. Host: www.test.com  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  7. Content-Type: multipart/form-data; boundary=---------------------------5169208281820  
  8. Content-Length: 449  
  9. -----------------------------5169208281820  
  10. Content-Disposition: form-data; name="file_1"filename=""  
  11. Content-Type: application/octet-stream  
  12. -----------------------------5169208281820  
  13. Content-Disposition: form-data; name="file_0"filename="test.txt"  
  14. Content-Type: text/plain  
  15. hello world!  
  16. -----------------------------5169208281820  
  17. Content-Disposition: form-data; name="oper"  
  18. upload  
  19. -----------------------------5169208281820--  

e)CONNECT舉例

Html程式碼  收藏程式碼
  1. CONNECT mail.test.com:80 HTTP/1.1  
  2. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  3. Proxy-Connection: keep-alive  
  4. Host: mail.test.com:80  

3.1)在終端以 telnet 方式測試

a)打開回顯功能(針對windows)
  Windows 2000:進入DOS模式->輸入 telnet->set LOCAL_ECHO->退出:quit->telnet ip 80
  Windows xp:進入DOS模式->輸入telnet->set local echo->open ip 80
b) 按HTTP協議格式輸入GET請求、HEAD請求、POST請求。

本文轉載 :博主連結:http://zsxxsz.iteye.com/blog/568250

相關推薦

HTTP 詳細:協議簡介

一、TCP/IP 協議介紹   在介紹 HTTP 協議之前,先簡單說一下TCP/IP協議的相關內容。TCP/IP協議是分層的,從底層至應用層分別為:物理層、鏈路層、網路層、傳輸層和應用層,如下圖所示:   從應用層至物理層,資料是一層層封裝,封裝的方式一般都

HTTP協議簡介

put tle option 字符 http協議 一行 ava 客戶 ont 簡介 HTTP(HyperText Transfer Protocol, 超文本傳輸協議) 是訪問互聯網使用的核心通信協議,也是所有web應用程序使用的通信協議。消息模型:客戶端發送請求消息,服務

03 接口測試之HTTP協議簡介

ftp 路徑 遇到 區別 .cn 史記 scheme ram 現在 一、URL模式   URL(Uniform Resource Locator) 地址用於描述一個網絡上的資源, 基本格式如下:   scheme指定底層使用的協議(例如:HTTP,HTTPS,ftp)   

001.HTTP協議簡介

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432011939547478fd5482deb47b08716557cc99764e0000   在Web

URL協議HTTP協議簡介

HTTP:(Hypertext transfer protocol)超文字傳輸協議,是用於從全球資訊網(WWW:World Wide Web)伺服器傳輸超文字到本地瀏覽器的傳送協議。 URL:(Uniform Resource Locator)統一資源定位符,對可以從網際網路上得到的資源的位置和訪問

HTTP安全協議詳細整理《圖解HTTP

一、HTTP的缺點 HTTP 主要有這些不足, 例舉如下。 通訊使用明文(不加密) , 內容可能會被竊聽 不驗證通訊方的身份, 因此有可能遭遇偽裝 無法證明報文的完整性, 所以有可能已遭篡改 這些問題不僅在 HTTP 上出現, 其他未加密的協議中也會存在這類

HTTP協議簡介詳解 HTTP協議發展 原理 請求方法 響應狀態碼 請求頭 請求首部 java模擬瀏覽器客戶端服務端

協議簡介 協議,自然語言裡面就是契約,也是雙方或者多方經過協商達成的一致意見; 契約也即類似於合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通訊協議,也即是雙方通過網路通訊必須遵從的一組約定; 計算機網路的本質在於傳遞資料,協議自然是針對於資料的結構格式以及傳送規則的約定;

Http 協議簡介

                                                   Http  協議簡介 一. URL 統一資源定位符  1. 協議: http, 約定好的通訊內容格式, 雙方根據約定好的格式來理解彼此;  2. 主機名: www.

Http協議Http協議簡介

HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。 HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML

HTTP 協議簡介

國外媒體Venturebeat最近報道,谷歌 Chrome 將於今年七月份將所有的 HTTP 網站標記為“不安全” (原文連結)google又要帶一波節奏了…..HTTP 協議是客戶端瀏覽器或其他程式與 Web 伺服器之間的應用層通訊協議;HTTPS 協議可以理

視頻rtmp協議簡介

png class 論文 smi false spa codec -i baidu 這篇論文裏講得非常詳細。下面說說我的理解。 server端:將視頻流按順序切割為視頻+音頻合成文件ts,每個ts是視頻流的一塊,並把ts信息存儲在m3u8文件中 client端:讀取m3u

HTTP請求協議

允許 connect 存儲 被拒絕 cti post 支持 ... keep 請求(Request)協議 * GET請求方式 * 請求行 * http協議的版本信息 1.1 * 請求地址 - URL?key=value&key=

【滲透課程】第二篇上-http請求協議的簡單描述

html 文章 ont tp服務器 交互 .exe 打開 路徑 什麽 HTTP協議剖析 什麽是HTTP協議?如何發起請求?我認為這樣講大家能夠理解: 瀏覽器訪問網站也是http請求的一個過程。當你打開瀏覽器,訪問一個URL (協議://服務器IP:端口/路徑/文件)的時候,

網絡編程的基本概念,TCP/IP協議簡介

cli 面向 red 展示 應用程序 隨著 完全 welcome 底層 8.1.1 網絡基礎知識  計算機網絡形式多樣,內容繁雜。網絡上的計算機要互相通信,必須遵循一定的協議。目前使用最廣泛的網絡協議是Internet上所使用的TCP/IP協議。 網絡編程的目的就是指直接或

HTTP與HTTPS簡介

html http https cookie cookie sessionHTTP協議(HyperText Transfer Protocal): 即超文本傳輸協議,是一種發布和接收HTML頁面的方法.HTTPS協議(HyperText Transfer Protocal over Secure Soc

http協議學習路線

http圖解 HTTP 協議http://blog.jobbole.com/108188/本文出自 “運維自動化” 博客,請務必保留此出處http://shower.blog.51cto.com/4926872/1979904http之協議學習路線

VRRP協議簡介

pin 監視 監控 vpd 系統 nim 初始 數據包 可能 VRRP協議是什麽 VRRP是一種容錯協議,它通過把幾臺路由設備聯合組成一臺虛擬的路由設備,並通過一定的機制來保證當主機的下一跳設備出現故障時,可以及時將業務切換到其它設備,從而保持通訊的連續性和可靠性。

DALI2調光協議簡介

傳輸 com 生產 認證 自動 image order str ima DALI2調光協議簡介 一、概述(13923882807-QQ:813267849) 歡迎使用本公司的DALI解碼模塊,擁有“DALI第一套協議” (DALI 1.0),“DALI第二套協議

ARP協議簡介

inter 切換 nat 三層 網絡 blog 欺騙 -s .com ARP協議和DNS相似,DNS是域名和IP之間解析,ARP是IP地址轉換MAC地址 ARP協議要求通信的主機雙方必須在同一個物理網段(局域網) ARP簡介 ARP全稱:“Address Resolu

DHCP協議簡介

DHCP1,dhcp client向網絡上的dhcp server發送dhcp discover廣播報文。 2,dhcp server收到dhcp client的discover報文後,回復dhcp offer報文,offer報文有給客戶端分配的IP和服務器自己的IP。 3,dhcp client收到若幹個服