HTTP協議解析:
HTTP即超文本傳輸協議,是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,它是萬維網交換信息的基礎,它允許將HTML文檔從WEB服務器傳輸到WEB瀏覽器。
URL(統一資源定位符)也被稱為網頁地址,是互聯網標准的地址。
URL的標准格式如下:
協議://服務器IP【:端口】/路徑/【?查詢】
瀏覽器可以發起HTTP請求,也可以借助其他工具發起HTTP請求,例如,linux系統的curl命令
HTTP協議目前最新版本是1.1,HTTP是一種無狀態的協議。無狀態是指WEB瀏覽器與WEB服務器之間不需要建立持久的連接,這意味着當一個客戶端向服務器發出請求,然后WEB服務器返回響應(Response),連接就被關閉了,在服務器端不保留連接的有關信息。也就是說,HTTP請求只能由客戶端發起,而服務器不能主動向客戶端發送數據。
1.HTTP請求
HTTP請求包括三部分,分別是請求行(請求方法)、請求頭(消息報頭)和請求正文。
POST/login.php HTTP/1.1 //請求行
HOST:www.test.com //請求頭
User-Agent:Mozilla/5.0(windows NT6.1;rv:15.0)Gecko/20100101 firefox/15.0
//空白行,代表請求頭結束
Username=admin&password=admin //請求正文
2.HTTP響應
與HTTP請求對應的是HTTP響應,HTTP響應也由三部分內容組成,分別是響應行、響應頭(消息報頭)和響應正文(消息主題)。
HTTP/1.1 200 OK //響應行
Date:Thu,28Feb 2018 01:23:37 GMT //響應頭
//空白行,代表響應頭結束
<html> //響應正文或者叫消息主題
請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:
GET :請求Request-URL所標識的資源
POST:在Request-URL所標識的資源后附加新的數據
HEAD:請求獲取由Request-URL所標識的資源的響應消息報頭
PUT:請求服務器存儲一個資源,並用Request-URL作為其標識
DELETE:請求服務器刪除Request-URL所標識的資源
TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷
CONNECT:保留將來使用
OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求
HTTP狀態碼:
當客戶端發起HTTP請求,服務器端接收后,會向客戶端發送響應信息,其中,HTTP響應中的第一行中,最重要的一點就是HTTP狀態碼。
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
HTTP消息
HTTP消息又稱HTTP頭(HTTP header),由四部分組成,分別是請求頭、響應頭、普通頭和實體頭。
1>請求頭
請求頭只出現在HTTP請求中,請求報頭允許客戶端向服務器端傳遞請求的附加信息和客戶端自身 的信息。常用的HTTP請求頭如下:
HOST:主要用於指定被請求資源的Internet主機和端口號,例如:host:www.test.com:8080
User-agent:允許客戶端將它的操作系統、瀏覽器和其他屬性告訴服務器
Referer:代表當前訪問URL的上一個URL,簡單的說,用戶是從什么地方來到本頁面
Cookie:它是一段文本,常用來表示請求者身份等
Range:多線程下載一定會用到此請求頭
X-forward-for:它代表請求端的IP,可以有多個,中間以逗號隔開
Accept:用於指定客戶端接收那些MIME類型的信息,如Accept:text/html,表明客戶端希望接收html文本
Accept-Charset:用於指定客戶端接收的字符集(告訴服務器能夠發送哪些字符集)
2>響應頭:是服務器根據請求向客戶端發送的HTTP頭
1.Server:服務器所使用的WEB服務器名稱。避免攻擊者探測可以修改此頭的信息
2.Set-Cookie:向客服端設置Cookie,通過查看此頭,可以清楚地看到服務器向客戶端發起的Cookie信息
3.Last-Modified:服務器通過這個頭告訴瀏覽器,資源的最后修改時間
4.Location:服務器通過這個頭告訴瀏覽器去訪問哪個頁面,瀏覽器接收到這個請求之后,通常會立刻訪問Location頭所指的頁面,這個頭通常配合302狀態碼使用
5.Refresh:服務器通過Refresh頭告訴瀏覽器定時刷新瀏覽器
3>普通頭
在普通報頭中,在少數報頭域用於所有的請求和響應消息,但並不用於被傳輸的實體,只用於傳輸的消息
4>實體頭
請求和響應消息都可以傳送一個實體。實體頭定義了關於實體正文和請求所標識的資源的元信息。元信息也就是實體內容的屬性,包括實體信息類型、長度、壓縮方法、最后一次修改時間等。常見的實體頭如下:
Content-Type:實體報頭域用於指明發送者的實體正文的媒體類型
Content-length:實體報頭域用於指明實體正文的長度,以字節方式存儲的十進制數字來表示
Last-Modified:實體報頭域用於指示資源的最后修改日期和時間
HTTP協議與HTTPS協議的區別:
HTTPS協議它是以安全為目標的HTTP通道,其實就是HTTP的升級版本,只是它比單純的HTTP協議更加安全。
HTTPS的安全基礎是SSL,既在HTTP下加入SSL層。也就是HTTPS通過安全傳輸機制進行傳送數據,這種機制可保護網絡傳送的所有數據的隱秘性和完整性,可以降低非入侵性攔截攻擊的可能性。
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者80,后者443
4、http的連接很簡單,是無狀態的:HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全
HTTPS的優點:
盡管HTTPS並非並非絕對安全,掌握根證書的機構、掌握加密算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個好處:
1.使用HTTPS協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器
2.HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性
3.HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了攻擊人的成本
4.谷歌在2014年8月份調整搜索引擎算法,並稱“比起同等HTTP網站,采用HTTPS加密的網站在搜索結果中的排名將會更高”
HTTPS的缺點:
雖說HTTPS有很大的優勢,但其相對來說,還是存在不足之處的:
1.HTTPS協議握手階段比較費時,會時頁面的加載時間延長近50%,增加10%到20%的耗電
2.HTTPS連接緩存不如HTTP高效,會增加數據開銷和功耗,甚至已有的安全措施也會因此而受到影響
3.SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不用
4.SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗
5.HTTPS協議的加密范圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什么作用。最關鍵的,SSL證書的信用鏈體系並不安全,特別在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行