http/https協議備忘

聲明

文章均爲本人技術筆記,轉載請註明出處https://segmentfault.com/u/yzwallphp

http協議

http(Hypertext Transfer Protocol, 超文本傳輸協議),基於TCP鏈接
URL(Uniform Resource Locator,統一資源定位符),用於指明網絡資源的地址
http報文類型分爲請求報文響應報文html

http請求報文

http請求報文由客戶端向服務端發送;算法

http請求報文由三部分組成:Request-Line(請求行),Request Header(請求報文頭,可選),Body(請求報文,只對POST有效)segmentfault

請求行/Requst-Line

請求行格式:[Request + Request-URI + HTTP-Version + CRLF]瀏覽器

  • Request:請求方法安全

  • Request-URI:表示訪問連接服務器

  • HTTP-Version:表示HTTP協議版本cookie

  • CRLF:表示回車換行,不容許出現單獨的CRLF字符網絡

請求方法/Request

請求方法類型可分爲:session

  • GET:根據Request-URI,從服務端讀取數據

  • POST:根據Request-URI,向服務端發送數據(Body)

  • HEAD:根據Request-URI,從服務端只讀取響應消息報頭

  • PUT:根據Request-URI,請求服務端存儲一個資源

  • DELETE:請求服務端刪除Request-URI所標識的資源

  • TRACE:請求服務器回送收到的請求信息,主要用於測試

  • CONNECT:待補充

  • OPTIONS:待補充

GET和POST區別

  • GET用於向服務端查詢某些信息, POST用於向服務端發送應該被保存的數據. 即GET是從服務器上獲取數據,POST是向服務器傳送數據

  • GET將查詢字符串參數追加到URL尾部,大小有限制; POST請求把提交數據放入請求正文中. 數據格式不限,大小不受限制;

http響應報文

服務端收到和解釋請求報文後,返回一個http響應報文

http響應報文由三部分組成:Status-Line(狀態行),Response Header(響應報文頭,可選),Body(響應正文)

狀態行/Status-Line

狀態行格式爲HTTP Version + Status Code(響應碼) + Reason-Phase(響應碼描述)

響應碼/Status Code

響應碼一共3位,第1位定義響應的類別
1xx:信息響應類,表示接收到請求而且繼續處理;
2xx:成功響應;
3xx:重定向響應類,須要請求方執行更多操做
4xx:客戶端錯誤,請求包含語法錯誤或者不能正確執行

  • 400:客戶端請求有語法錯誤,不能被服務端處理;

  • 401:請求未受權;

  • 403:服務端收到請求,可是拒絕提供服務;

  • 404:請求資源不存在;

5xx:服務端錯誤,服務端不能執行正確的客戶端請求

  • 500:服務端內部錯誤;

  • 501:保留未實現;

  • 502:網關錯誤,服務器沒法響應;

  • 503:服務暫時失效,一段時間後可能恢復正常;

http報文頭/Headers

待補充;

https協議

https協議與ssl協議

ssl

ssl(secure socket layer,安全套接字層),ssl協議是Netscape公司提出的安全保密協議,運行在應用層,ssl協議採用加密算法生成40位密鑰,爲應用程序提供數據加密;

https協議

https(Secure Hypertext Transfer Protocol,安全超文本傳輸協議),在http基礎上經過SSl協議實現信息安全傳輸;https使用ssl在發送端將數據加密,而後由接收端進行解密,加密和解密都須要發送端和接收端經過交換一致的密鑰來實現。

https過程

  1. 【客戶端】客戶端使用https url訪問Web服務端,要求創建ssl鏈接
    【服務端】Web服務端收到客戶端請求,將網站的證書傳送一份給客戶端,證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。

  2. 【客戶端】客戶端收到網站證書後,瀏覽器執行以下操做:

    • 2.1 驗證證書是否受信任

    • 2.2 生成隨機密鑰:若是證書受信任,瀏覽器生成一串隨機密鑰

  3. 【客戶端】加密隨機密鑰:瀏覽器用證書提供的公鑰對生成的隨機密鑰進行加密

  4. 【客戶端】計算握手信息並加密:瀏覽器使用HASH加密算法計算握手信息,並用隨機密鑰加密,而後發送握手信息給服務端

  5. 【服務端】服務端收到握手信息後,執行以下操做:

    • 5.1 解密隨機密鑰:服務端使用本身的私鑰解密出隨機密鑰

    • 5.2 解密握手信息:服務端使用隨機密鑰解密收到的握手信息,並驗證HASH是否與瀏覽器發來的一致

    • 5.3 發送加密握手信息:服務端使用隨機密鑰加密一段握手信息,發送給瀏覽器

  6. 【客戶端】瀏覽器解密並計算握手信息的HASH,若是與服務端發來的HASH一致,握手結束;

  7. 最後,客戶端與服務端的全部通訊數據都經過隨機密鑰加密傳輸

http與https辨析

  • 安全性:http用明文發送內容,不提供任何方式的數據加密,安全性較差;https協議在http基礎上加入ssl協議保證數據安全,ssl憑藉證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密;

  • 端口:http和https使用的是徹底不一樣的鏈接方式,http使用80端口,https使用443端口

  • 系統開銷:https系統開銷比http開銷大,傳輸效率不如http;

  • 費用:https中ssl證書須要繳納費用;

session與cookine

cookie數據存放在客戶的瀏覽器上,session數據放在服務器上
cookie不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session
session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能 考慮到減輕服務器性能方面,應當使用cookine
單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie

參考

[1] http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
[2] http://www.cnblogs.com/wqhwe/p/5407468.html
[3] http://www.php100.com/html/it/biancheng/2015/0209/8582.html

相關文章
相關標籤/搜索