HTTP協議解析web
http即超文本傳輸協議,是一種詳細規定了瀏覽器和萬維網服務器之間相互通訊的規則。他是萬維網交換嘻嘻的基礎,他容許將HTML文檔從web服務器傳到web瀏覽器。發送一個HTTP請求很簡單,只須要在搜索引擎上輸入url。瀏覽器
HTTP協議詳解緩存
當瀏覽器向Web服務器發出請求時,它向服務器傳遞了一個數據塊,也就是請求信息,HTTP請求信息由3部分組成:安全
l 請求方法URI協議/版本服務器
l 請求頭(Request Header)網絡
l 請求正文jsp
下面是一個HTTP請求的例子:ide
GET/sample.jspHTTP/1.1性能
Accept:p_w_picpath/gif.p_w_picpath/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種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。
GET 請求獲取由Request-URI所標識的資源。
POST 在Request-URI所標識的資源後附加新的數據。
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭。
OPTIONS 請求查詢服務器的性能,或查詢與資源相關的選項和需求。
PUT 請求服務器存儲一個資源,並用Request-URI做爲其標識。
DELETE 請求服務器刪除由Request-URI所標識的資源。
TRACE 請求服務器回送收到的請求信息,主要用語測試或診斷。
在Internet應用中,最經常使用的方法是GET和POST。
URI完整地指定了要訪問的網絡資源,一般只要給出相對於服務器的根目錄的相對目錄便可,所以老是以「/」開頭,最後,協議版本聲明瞭通訊過程當中使用HTTP的版本。
(2)請求頭(Request Header)
請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭能夠聲明瀏覽器所用的語言,請求正文的長度等。
Accept:p_w_picpath/gif.p_w_picpath/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
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的區別主要以下:
一、https協議須要到ca申請證書,通常免費證書較少,於是須要必定費用。
二、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。
三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。
四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全