http協議詳解<一>


原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章  原始出處 、作者信息和本聲明。否則將追究法律責任。 http://7826443.blog.51cto.com/7816443/1729227

寫在前面:感謝米安網,感謝task分享,感謝Assassin_CHN分享

 

http協議是一個滲透測試人員或者開發人員必須要懂的協議,我們訪問網站也必須要用到http協議。

1.http簡介

  http(Hyper Text Transfer Protool超文本傳輸協議),一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,是萬維網交換信息的基礎,允許將HTML(超文本標記語言)文檔從web服務器傳送到web瀏覽器。

  也就是說我們訪問網站必須要用到http協議。

2.使用firebug和curl觀察http協議

  firebug是一款非常好用的網頁調試工具,可以查看http請求;

  curl是一個利用url語法規定來傳輸文件和數據的工具,支持很多協議,如http、FTP、Telnet等,使用curl可以很清楚的看到所使用的協議。

2.1 firebug

首先打開Mozilla Firefox(或Google Chrome),添加firebug組件

               wKioL1aAxq6TnMuVAACjASgAt8M634.png

然后訪問網站,以http://www.moonsos.com/為例,右擊鼠標,選擇“使用firebug審查元素”

                   wKioL1aAxufjNqqSAACncAll9vI639.png

出現如下界面:

wKioL1aAxwXQxxs9AAGdlMGWUGA543.png

然后選擇“網絡”,就可以看到請求信息

wKioL1aAyOfjYI1zAAIlPQ9TwcY925.png

備注:直接右擊頁面,選擇“審查元素”-->選擇“網絡”也可以看到請求的詳細信息。

 

 

    首次打開firebug沒有顯示請求信息,我們在URL框中回車后,會看到三個GET請求,說明瀏覽器向服務器發送了三次請求

wKioL1aAysrxiu8OAAHRJu7u4Qc103.png

點擊任意一個請求,在響應頭信息中可以看到請求的詳細信息

 

2.2 curl

curl也可以在windows上安裝curl.exe工具。效果都是一樣的。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@yvonne ~] # curl -I www.moonsos.com
HTTP /1 .1 200 OK      
Server: Apache /2 .2.25 (Win32) PHP /5 .3.5
Connection: keep-alive
Date: Mon, 28 Dec 2015 13:41:58 GMT
Last-Modified: Mon, 28 Dec 2015 13:40:00 GMT
Content-Type: text /html ; charset=utf-8
Content-Length: 35764
X-Powered-By: PHP /5 .3.5
Set-Cookie: safedog-flow-item=0B04B99E0C1B1CFD0D0CCCB472D82967; expires=Thur, 3-Feb-2152 16:53:17 GMT; domain=moonsos.com; path=/
X-Daa-Tunnel: hop_count=1
X-Cache-Lookup: Hit From Upstream
X-Cache-Lookup: Hit From Upstream

 

3.http請求的詳解

  3.1firebug中的http報文信息

wKiom1aA6rzhA4QyAAHKRJvLJkc994.png

 

HTTP請求首部常用首部:

首部

類型

描述

Date

通用

提供日期和時間標志,說明報文是什么時候創建的

Content-Length

實體

報文中實體主體的字節大小。如果進行了gzip壓縮,這個大小就是壓縮后的大小。客戶端通過它確定報文截尾

Accept

請求

客戶端通知服務器可以接收哪些媒體類型

Content-Type

實體

報文中對象的媒體類型

Cache-Control

通用

見  “緩存首部”

Connection

通用

Connection:close響應結束之后,連接會被關閉。不支持持久連接的HTTP/1.1應用程序要在所有請求和響應中插入Connection:close。

Server

響應

識別服務器軟件

Set-Cookie

響應

設置服務器產生的ID

 

HTTP請求其他首部

首部

類型

描述

Expect:100-continue

請求

客戶端告知服務器它們需求某種行為。

Transfer-Encoding:chunk

通用

使用分塊傳輸

User-Agent

請求

用戶的瀏覽器軟件

Host

請求

請求資源所在的服務器。(Apache中按Host區分虛擬主機)

Location

響應

令客戶端重定向至URL

Vary

響應

服務端通知客戶端,在服務端的協商中會使用哪些來自客戶端的首部。它的值是一個首部列表,服務器會去查看這些首部,以確定什么內容作為響應發回給客戶端。

 

3.2 http協議是無狀態的,客戶端(瀏覽器)發起request請求,服務器返回response響應,然后建立連接。

         wKiom1aBRAvAxBfgAABEt_QTHPM880.png

 

http協議request請求包括三個部分:請求頭(請求方法)、請求行(消息報頭)、請求正文。

http協議response響應包括三個部分:響應頭、響應行(消息消息報頭)、響應正文(消息主題)。

 

3.3 常用的http請求方法:

GET 請求獲取由request-url標識的資源
POST 在request-url所標識的資源后附加新的數據
HEAD 請求獲取由request-url所標識資源的響應消息報頭
TRACE 請求服務器會送收到的請求信息,主要用於測試或診斷
PUT 請求服務器存儲一個資源,並用request-url作為其標識
DELETE 請求服務器刪除由request-url所標識的資源
OPTIONS 請求查詢服務器性能,或查詢與服務器相關的選項和需求

 

3.4  http請求常見返回狀態碼:

1xx 臨時響應

返回碼

說明

100:Continue

請求者應當繼續提出請求。  服務器返回此代碼表示已收到請求的第一部分,正在等待其余部分。

101:Switching Protocols

請求者已要求服務器切換協議,服務器已確認並准備切換。

 2xx 成功

返回碼

說明

200:OK

服務器已成功處理了請求。

206:Partial Content

服務器成功處理了部分 GET 請求。

 3xx 重定向

返回碼

說明

301:Moved Permanently

請求的網頁已永久移動到新位置

302:Found

服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。只在當次請求中生效。

303:See Other

請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。 對於除 HEAD 之外的所有請求,服務器會自動轉到其他位置。

304:Not Modified

自從上次請求后,請求的網頁未修改過。服務器返回此響應時,不會返回網頁內容。如果網頁自請求者上次請求后再也沒有更改  過,您應當將服務器配置為返回此響應(稱為 If-Modified-Since HTTP 標頭)。

305:Use Proxy

請求者只能使用代理訪問請求的網頁。  如果服務器返回此響應,還表示請求者應使用代理。

307:Temporary Redirect

服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。  此代碼與響應 GET 和 HEAD 請求的 301 代碼類似,會自動將請求者轉到不同的位置

 4xx 請求錯誤

返回碼

說明

400:Bad Request

服務器不理解請求的語法。服務器沒有收到GET。

401:Unauthorized

請求要求身份驗證。  對於需要登錄的網頁,服務器可能返回此響應。

403:Forbidden

服務器拒絕請求。

404:Not Found

服務器找不到請求的任何信息。

405:Method Not Allowed

禁用請求中指定的方法。

406:Not Acceptable

無法使用請求的內容特性響應請求的網頁。

407:Proxy  Authentication Required

此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。

411:Length Required

服務器不接受不含有效內容長度標頭字段的請求。

413:Request Entity Too  Large

服務器無法處理請求,因為請求實體過大,超出服務器的處理能力。

414:Request-URI Too  Large

請求的 URI(通常為網址)過長,服務器無法處理。

415:Unsupported Media  Type

請求的格式不受請求頁面的支持。

416:Requested range  not satisfiable

如果頁面無法提供請求的范圍,則服務器會返回此狀態代碼。

417:Expectation Failed

服務器未滿足”期望”請求標頭字段的要求。(Expect)

 5xx 服務器錯誤

返回碼

說明

500:Internal Server  Error

服務器遇到錯誤,無法完成請求。

502:Bad Gateway

服務器充當網關或代理,從上游服務器收到無效響應。

503:Service  Unavailable

服務器目前無法使用(由於超載或停機維護)。  通常,這只是暫時狀態

504:Gateway Timeout

服務器充當網關或代理,但沒有及時從上游服務器收到請求。

505:HTTP Version Not  Supported

服務器不支持請求中所用的 HTTP 協議版本。

 

4.手工模擬http請求

 4.1 通過Telnet模擬http請求

    windows默認不支持Telnet,需要開啟Telnet服務,如下圖:

    wKiom1aBU9HD6IrTAAIEg5lz61g503.png

 

現在就可以開始模擬http的請求了,是不是有點小興奮ヾ(o)ヾ呢O(∩_∩)O~~

這里我先寫完操作步驟,然后再一步一步的詳細講解

·首先建議在notepad記事本里寫下要請求的內容

  GET /index.html HTTP/1.1

  HOST: www.moonsos.com

  wKiom1aBV-vwOvWlAAAHwgjwHpI481.png

·然后cmd打開命令dos界面,輸入要請求的網站域名和端口

  telnet www.moonsos.com 80

  wKiom1aBWPWyTaKbAAAbwRLUrDY965.png

·回車后按 'CTRL+]',然后繼續回車,將記事本中寫好的內容復制到命令行里

  備注:這里的兩步如果長時間就會自動遺失對主機的連接

         wKioL1aBWTGSBTNhAAAT-LyEn8o109.png

·將記事本中的內容復制進去后,連着兩次回車,就可以看到GET到的內容了。

         wKiom1aBWSyxlmoTAAANPhapGZc764.png

結果:

wKiom1aBWZeiVrhUAABC7xu2fA0803.png

這里是GET請求,換做POST或HEAD也是一樣的。只要將請求方法換做POST或HEAD就好。

wKiom1aBW9ii4Ay-AABTtaVJBa0576.png

 

wKiom1aBXQewRm1RAABZMn1FuHo601.png

小結通過Telnet模擬http請求:

1.telnet www.moonsos.com 80

2.'CTRL+]'

3.回車Enter

4.輸入請求,兩次回車Enter

 

4.2 curl.exe[windows工具]或curl[linux命令]

[root@yvonne ~]# curl -I www.moonsos.com

HTTP/1.1 200 OK

Server: Apache/2.2.25 (Win32) PHP/5.3.5

Connection: keep-alive

Date: Mon, 28 Dec 2015 14:23:51 GMT

Last-Modified: Mon, 28 Dec 2015 14:20:00 GMT

Content-Type: text/html; charset=utf-8

Content-Length: 35764

X-Powered-By: PHP/5.3.5

Set-Cookie: safedog-flow-item=0B04B99E0C1B1CFD0D0CCCB472D82967; expires=Thur, 3-Feb-2152 17:35:11 GMT; domain=moonsos.com; path=/

X-Daa-Tunnel: hop_count=1

X-Cache-Lookup: Hit From Upstream

X-Cache-Lookup: Hit From Upstream

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM