1. 程式人生 > >深入HTTP請求流程

深入HTTP請求流程

http https 協議

HTTP協議解析

http即超文本傳輸協議,是一種詳細規定了瀏覽器和萬維網服務器之間相互通信的規則。他是萬維網交換嘻嘻的基礎,他允許將HTML文檔從web服務器傳到web瀏覽器。發送一個HTTP請求很簡單,只需要在搜索引擎上輸入url.


HTTP協議詳解

當瀏覽器向Web服務器發出請求時,它向服務器傳遞了一個數據塊,也就是請求信息,HTTP請求信息由3部分組成:

l 請求方法URI協議/版本

l 請求頭(Request Header)

l 請求正文

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

GET/sample.jspHTTP/1.1

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

username=jinqiao&password=1234

1)請求方法URI協議/版本

請求的第一行是“方法URL/版本”:GET/sample.jsp HTTP/1.1

以上代碼中“GET”代表請求方法,“/sample.jsp”表示URI,“HTTP/1.1代表協議和協議的版本。

根據HTTP標準,HTTP請求可以使用多種請求方法。例如:HTTP1.1目前支持7種請求方法:

GETPOSTHEADOPTIONSPUTDELETETARCE

GET 請求獲取由Request-URI所標識的資源。
POST
Request-URI所標識的資源後附加新的數據。
HEAD
請求獲取由Request-URI所標識的資源的響應消息報頭。

OPTIONS 請求查詢服務器的性能,或查詢與資源相關的選項和需求。
PUT
請求服務器存儲一個資源,並用Request-URI作為其標識。
DELETE
請求服務器刪除由Request-URI所標識的資源。
TRACE
請求服務器回送收到的請求信息,主要用語測試或診斷。
Internet應用中,最常用的方法是GETPOST

URI

完整地指定了要訪問的網絡資源,通常只要給出相對於服務器的根目錄的相對目錄即可,因此總是以“/”開頭,最後,協議版本聲明了通信過程中使用HTTP的版本。

2)請求頭(Request Header)

請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

3)請求正文

請求頭和請求正文之間是一個空行,這個行非常重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP請求中,請求的正文只有一行內容。當然,在實際應用中,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

響應

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



HTTP應答與HTTP請求相似,HTTP響應也由3個部分構成,分別是:

l  狀態行

l  響應頭(Response Header)

l  響應正文

在接收和解釋請求消息後,服務器會返回一個HTTP響應消息。

狀態行由協議版本、數字形式的狀態代碼、及相應的狀態描述,各元素之間以空格分隔。

格式: HTTP-Version Status-Code Reason-Phrase CRLF

例如: HTTP/1.1 200 OK \r\n


Get和Post方法的區別

Http協議定義了很多與服務器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個URL地址用於描述一個網絡上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了。GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息。

我們看看GET和POST的區別

1. GET提交的數據會放在URL之後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中.

2. GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.

3. GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。

4. GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼.

HTTP狀態碼

Response 消息中的第一行叫做狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。

狀態碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response.

HTTP/1.1中定義了5類狀態碼, 狀態碼由三位數字組成,第一個數字定義了響應的類別

1XX 提示信息 - 表示請求已被成功接收,繼續處理

2XX 成功 - 表示請求已被成功接收,理解,接受

3XX 重定向 - 要完成請求必須進行更進一步的處理

4XX 客戶端錯誤 - 請求有語法錯誤或請求無法實現

5XX 服務器端錯誤 - 服務器未能實現合法的請求

看看一些常見的狀態碼

200 請求成功

最常見的就是成功響應狀態碼200了, 這表明該請求被成功地完成,所請求的資源發送回客戶端

詳細的

1**(信息類):表示接收到請求並且繼續處理
100——客戶必須繼續發出請求
101——客戶要求服務器根據請求轉換HTTP協議版本

2**(響應成功):表示動作被成功接收、理解和接受
200——表明該請求被成功地完成,所請求的資源發送回客戶端
201——提示知道新文件的URL
202——接受和處理、但處理未完成
203——返回信息不確定或不完整
204——請求收到,但返回信息為空
205——服務器完成了請求,用戶代理必須復位當前已經瀏覽過的文件
206——服務器已經完成了部分用戶的GET請求

3**(重定向類):為了完成指定的動作,必須接受進一步處理
300——請求的資源可在多處得到
301——本網頁被永久性轉移到另一個URL
302——請求的網頁被轉移到一個新的地址,但客戶訪問仍繼續通過原始URL地址,重定向,新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發出新的Request。
303——建議客戶訪問其他URL或訪問方式
304——自從上次請求後,請求的網頁未修改過,服務器返回此響應時,不會返回網頁內容,代表上次的文檔已經被緩存了,還可以繼續使用
305——請求的資源必須從服務器指定的地址得到
306——前一版本HTTP中使用的代碼,現行版本中不再使用
307——申明請求的資源臨時性刪除

4**(客戶端錯誤類):請求包含錯誤語法或不能正確執行
400——客戶端請求有語法錯誤,不能被服務器所理解
401——請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
HTTP 401.1 - 未授權:登錄失敗
  HTTP 401.2 - 未授權:服務器配置問題導致登錄失敗
  HTTP 401.3 - ACL 禁止訪問資源
  HTTP 401.4 - 未授權:授權被篩選器拒絕
HTTP 401.5 - 未授權:ISAPI 或 CGI 授權失敗
402——保留有效ChargeTo頭響應
403——禁止訪問,服務器收到請求,但是拒絕提供服務
HTTP 403.1 禁止訪問:禁止可執行訪問
  HTTP 403.2 - 禁止訪問:禁止讀訪問
  HTTP 403.3 - 禁止訪問:禁止寫訪問
  HTTP 403.4 - 禁止訪問:要求 SSL
  HTTP 403.5 - 禁止訪問:要求 SSL 128
  HTTP 403.6 - 禁止訪問:IP 地址被拒絕
  HTTP 403.7 - 禁止訪問:要求客戶證書
  HTTP 403.8 - 禁止訪問:禁止站點訪問
  HTTP 403.9 - 禁止訪問:連接的用戶過多
  HTTP 403.10 - 禁止訪問:配置無效
  HTTP 403.11 - 禁止訪問:密碼更改
  HTTP 403.12 - 禁止訪問:映射器拒絕訪問
  HTTP 403.13 - 禁止訪問:客戶證書已被吊銷
  HTTP 403.15 - 禁止訪問:客戶訪問許可過多
  HTTP 403.16 - 禁止訪問:客戶證書不可信或者無效
HTTP 403.17 - 禁止訪問:客戶證書已經到期或者尚未生效
404——一個404錯誤表明可連接服務器,但服務器無法取得所請求的網頁,請求資源不存在。eg:輸入了錯誤的URL
405——用戶在Request-Line字段定義的方法不允許
406——根據用戶發送的Accept拖,請求資源不可訪問
407——類似401,用戶必須首先在代理服務器上得到授權
408——客戶端沒有在用戶指定的餓時間內完成請求
409——對當前資源狀態,請求不能完成
410——服務器上不再有此資源且無進一步的參考地址
411——服務器拒絕用戶定義的Content-Length屬性請求
412——一個或多個請求頭字段在當前請求中錯誤
413——請求的資源大於服務器允許的大小
414——請求的資源URL長於服務器允許的長度
415——請求資源不支持請求項目格式
416——請求中包含Range請求頭字段,在當前請求資源範圍內沒有range指示值,請求也不包含If-Range請求頭字段
417——服務器不滿足請求Expect頭字段指定的期望值,如果是代理服務器,可能是下一級服務器不能滿足請求長。

5**(服務端錯誤類):服務器不能正確執行一個正確的請求
HTTP 500 - 服務器遇到錯誤,無法完成請求
  HTTP 500.100 - 內部服務器錯誤 - ASP 錯誤
  HTTP 500-11 服務器關閉
  HTTP 500-12 應用程序重新啟動
  HTTP 500-13 - 服務器太忙
  HTTP 500-14 - 應用程序無效
  HTTP 500-15 - 不允許請求 global.asa
  Error 501 - 未實現
HTTP 502 - 網關錯誤
HTTP 503:由於超載或停機維護,服務器目前無法使用,一段時間後可能恢復正常

HTTP與HTTPS有什麽區別?

  HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

  HTTPS和HTTP的區別主要如下:

  1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

  2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

  3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。

  4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。


本文出自 “11772222” 博客,請務必保留此出處http://11782222.blog.51cto.com/11772222/1953873

深入HTTP請求流程