http、https、密碼學基礎、GET和POST區別

http協議相關:

http協議的特性: http協議是建立在TCP/IP協議之上應用層協議,默認端口為80或者8080。http協議的的特點是無狀態,無連接(并不是真的沒有連接,而是在請求數據的時候有連接,在數據回來的時候就斷開連接,不想tcp那樣是一個長連接)

http協議的請求:

利用抓包工具httpwatch可以獲取報文,http協議的報文傳輸的是ASCII碼,在TCP/IP協議之上,主要主要分為三部分:請求行、請求頭、請求體

  • 請求行: 第一行,包含三個信息:請求方式,url,http協議版本對應下面的:GET /books/?sex=man&name=Professional HTTP/1.1
  • 比如下面的GET請求(GET請求和POST請求是http進行通訊的兩種不同的方式),在get請求參數如果包含&符號在發送請求時就會被當做參數的分隔符處理,比如請求參數:var url= "xxxx?name=" + "aaa&bbb" 期望的請求參數應該是name = aaa&bbb實際的請求參數會變成 name = aaabbb= 處理方法: 在拼接參數的時候,使用 encodeURIComponent() 進行手動轉義。var url= "xxxx?name=" + encodeURIComponent("aaa&bbb")。下面代碼是發送http請求后能夠獲得的數據,
 GET /books/?sex=man&name=Professional HTTP/1.1   //GET是請求方式、/books/?sex=man&name=Professional是url就是進行請求的網址、第三個是http協議的版本Host: www.example.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive
  • 下面是POST請求:
POST / HTTP/1.1                  //POST是請求方式Host: www.example.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Content-Type: application/x-www-form-urlencodedContent-Length: 40Connection: Keep-Alivesex=man&name=Professional
  • GET請求和POST請求的區別: url可見性:get,參數url可見;post,url參數不可見。 數據傳輸上:get,通過拼接url進行傳遞參數;post,通過body體傳輸參數。 緩存性:get請求是可以緩存的,post請求不可以緩存。 后退頁面的反應:get請求頁面后退時,不產生影響,post請求頁面后退時,會重新提交請求。 傳輸數據的大小:get一般傳輸數據大小不超過2k-4k(根據瀏覽器不同,限制不一樣,但相差不大),post請求傳輸數據的大小根據php.ini 配置文件設定,也可以無限大。 安全性:這個也是最不好分析的,原則上post肯定要比get安全,畢竟傳輸參數時url不可見,但也擋不住部分人閑的沒事在那抓包玩。安全性個人覺得是沒多大區別的,防君子不防小人就是這個道理。對傳遞的參數進行加密,其實都一樣。
    本質區別: GET產生一個TCP數據包;POST產生兩個TCP數據包。對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器響應200(200是狀態碼,服務器返回數據);而對于POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

  • 請求頭: 瀏覽器向服務器發送一些狀態數據,標識數據等等。一個信息一行,包括信息名:信息值 按行分隔,注意: 請求頭信息,需要使用一個空行結束!

User-Agent: firefox//表示發送請求的瀏覽器(請求代理端)是firefox
Host: shop.100.com//表示請求的主機域名(基于域名的虛擬主機就是靠這個頭判斷的)
Cookie:name=itcast//瀏覽器攜帶的cookie數據。
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
  • 請求主體: 請求代理端向服務器端,發送的請求數據!典型的就是POST形式發送的表單數據!get請求,沒有請求主體部分!get數據是在請求行中的url上進行傳遞的!

http協議的響應:
響應包括:響應行、響應頭、響應體。注意: 每行,包括相應行和響應頭,都需要一個 \r\n結尾

HTTP/1.1 200 0K
Date: Tue,19 Nov 2013 03:08:55 GMT
Server: Apache/2. 2.22 (Win32) PHP/5.3. 13
X- -Powered -By: PHP/5. 3.13
Content-Length: 16
Content- Type: text/html
  • 響應行: 響應行包括:協議版本、狀態碼、狀態消息。典型的狀態碼:1xx:消息、2xx:成功、3xx:請求被重定向、4xx:瀏覽器端錯誤、5xx:服務器端錯誤。比如:500 服務器內部錯誤、404 請求的頁面沒有找到、403 沒有權限、200 請求成功。
  • 響應頭: Content-Type: text/html 內容類型,告知瀏覽器接下來發送的響應主體數據是什么格式!Content-Length: 響應主體數據的長度!Date: 響應的時間。GMT時間!
  • 響應主體: 主要的響應數據,在瀏覽器的主體區域顯示的數據都是相應主體!

https協議:
http協議是明文傳輸的,因此很容易被截取和解析,泄漏個人數據。https協議是在http和tcp之間多添加了一層,進行身份驗證和數據加密。

  • HTTPS 原理:
  • ① 客戶端將它所支持的算法列表和一個用作產生密鑰的隨機數發送給服務器
    ② 服務器從算法列表中選擇一種加密算法,并將它和一份包含服務器公用密鑰的證書發送給客戶端;該證書還包含了用于認證目的的服務器標識,服務器同時還提供了一個用作產生密鑰的隨機數;
    ③ 客戶端對服務器的證書進行驗證(有關驗證證書,可以參考數字簽名),并抽取服務器的公用密鑰;然后,再產生一個稱作 pre_master_secret 的隨機密碼串,并使用服務器的公用密鑰對其進行加密(參考非對稱加 / 解密),并將加密后的信息發送給服務器。
    ④ 客戶端與服務器端根據 pre_master_secret 以及客戶端與服務器的隨機數值獨立計算出加密和 MAC密鑰(參考 DH密鑰交換算法);
    ⑤ 客戶端將所有握手消息的 MAC 值發送給服務器 ;
    ⑥ 服務器將所有握手消息的 MAC 值發送給客戶端

密碼學基礎:

  • 明文: 明文指的是未被加密過的原始數據。
  • 密文:明文被某種加密算法加密之后,會變成密文,從而確保原始數據的安全。密文也可以被解密,得到原始的明文。
  • 密鑰:密鑰是一種參數,它是在明文轉換為密文或將密文轉換為明文的算法中輸入的參數。密鑰分為對稱密鑰與非對稱密鑰,分別應用在對稱加密和非對稱加密上。
  • 對稱加密:對稱加密又叫做私鑰加密,即信息的發送方和接收方使用同一個密鑰去加密和解密數據。對稱加密的特點是算法公開、加密和解密速度快,適合于對大數據量進行加密,常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
    其加密過程如下:明文 + 加密算法 + 私鑰 => 密文
    解密過程如下: 密文 + 解密算法 + 私鑰 => 明文
  • 對稱加密中用到的密鑰叫做私鑰,私鑰表示個人私有的密鑰,即該密鑰不能被泄露。 其加密過程中的私鑰與解密過程中用到的私鑰是同一個密鑰,這也是稱加密之所以稱之為“對稱”的原因。由于對稱加密的算法是公開的,所以一旦私鑰被泄露,那么密文就很容易被破解,所以對稱加密的缺點是密鑰安全管理困難。
  • 非對稱加密:非對稱加密也叫做公鑰加密。非對稱加密與對稱加密相比,其安全性更好。對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解。而非對稱加密使用一對密鑰,即公鑰和私鑰,且二者成對出現。私鑰被自己保存,不能對外泄露。公鑰指的是公共的密鑰,任何人都可以獲得該密鑰。用公鑰或私鑰中的任何一個進行加密,用另一個進行解密。
  • 被公鑰加密過的密文只能被私鑰解密, 過程如下:
    明文 + 加密算法 + 公鑰 => 密文
    密文 + 解密算法 + 私鑰 => 明文
    被私鑰加密過的密文只能被公鑰解密,過程如下:
    明文 + 加密算法 + 私鑰 => 密文
    密文 + 解密算法 + 公鑰 => 明文
  • 由于加密和解密使用了兩個不同的密鑰,這就是非對稱加密“非對稱”的原因。 非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少量數據進行加密。 在非對稱加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密算法)等。

參考博文:http

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

apache 配置文件內使用 8080 端口_【SpringBoot 框架】- SpringBoot 配置文件

一、SpringBoot配置文件類型SpringBoot是基于約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話 ,就可以自己編寫配置文件進行相應配置,起步依賴spring-boot-starter-parent 中,有配置文件的引入…

Linux中while循環的用法筆記

Shell中可以采用while循環來實現需要進行循環的操作。 語法結構如下: while exp do command done 執行過程:while將測試exp的返回值,如果返回值為true則執行循環體的命令,返回值為false則不執行循環。循環完成后會進入下一次循環之…

IOS9.0 導航欄狀態欄

狀態欄高度20px 豎屏是導航欄高度44px 橫屏時導航欄高度32px 獲取當前屏幕狀態:UIApplication.sharedApplication().statusBarOrientation轉載于:https://www.cnblogs.com/iOSboyYang/p/5328886.html

libcurl庫的安裝和使用

libcurl簡介: libcurl是一個跨平臺的網絡協議庫,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協議。libcurl同樣支持HTTPS證書授權,HTTP POST, HTTP PUT, FTP 上傳, HTTP基本表單上傳,代理,cookies,和用戶認證。li…

android 微信縮小通話界面_安卓如何做出微信那樣的界面仿微信“我”的界面2/5...

本系列目標通過安卓編程仿寫微信“我”的界面,讓大家也能做出類似微信界面.效果圖如下:本文目標做出支付部分(其他部分在后續文章中逐步分享).效果圖如下:實現方案通過截圖工具或者下載一張微信支付照片,放到工程的src/main/res/drawable目錄下,命名為pay.png;同樣獲取一張向右…

Shell腳本中函數的定義和調用筆記

Shell腳本函數的作用主要是把一些可以通用的功能封裝起來、避免腳本中出現大量重復的腳本代碼,同時可以大大增強腳本的可讀性、和可維護性。Shell函數定義的語法格式:function FUNCTION_NAME(){command1command2command3}也可以省略function 關鍵字FUNCT…

opensll、libcurl庫安裝的使用,樹莓派CSI攝像頭的配置,樹莓派調用智能API平臺實現人臉識別、樹莓派配置中文環境

接著上一節人工智能翔云平臺介紹: 人工智能OCR識別: OCR 是英文Optical Character Recognition的縮寫,意思是光學字符識別,也可簡單地稱為文字識別,是文字自動輸入的一種方法。它通過 掃描 和攝像等光學輸入方式獲取紙…

apache 設置禁止訪問某些文件或目錄

【apache配置禁止訪問】1. 禁止訪問某些文件/目錄增加Files選項來控制&#xff0c;比如要不允許訪問 .inc 擴展名的文件&#xff0c;保護php類庫&#xff1a;<Files ~ "\.inc$">Order allow,denyDeny from all</Files>禁止訪問某些指定的目錄&#xff1a…

Shell腳本中函數返回值的用法筆記

函數的返回值又可以稱為函數的退出狀態&#xff0c;實際上可以理解為一種通信方式。Shell腳本中函數可以使用返回值的方式把調用的結果信息反饋給調用者。便于調用者可以根據反饋的結果做相應處理。說明&#xff1a;函數的返回值主要使用 return 關鍵字來處理。這和很多編程語言…

python 怎么取對數_概率矩陣分解(PMF)及MovieLens上的Python代碼

首先對Probabilistic Matrix Factorization這篇論文的核心公式進行講解和推導&#xff1b;然后用Python代碼在Movielens數據集上進行測試實驗。一、 背景知識文中作者提到&#xff0c;傳統的協同過濾算法有兩個不足&#xff1a;1).不能很好地處理規模非常大的數據&#xff1b;2…

JAVA SE、EE、ME,JRE、JDK,基本數據類型,訪問修飾符、函數、封裝的概念、UML類圖、構造方法、this關鍵字、static關鍵字、方法重載、方法重寫、包(packahe)

運行第一個JAVA程序&#xff1a; 這里使用的開發環境是eclipse&#xff0c;新建一個java工程&#xff0c;然后可以看到src這個是存放java代碼的地方&#xff0c;然后在src文件右擊新建一個class&#xff08;類&#xff09;&#xff0c;然后可以看到下圖&#xff0c;同樣和C語言…

unity中如何解決鏡頭穿透模型?

設置相機的Near clip plane,調小一點,但是不要給負數就行。 轉載于:https://www.cnblogs.com/ZeroMurder/p/5331174.html

Shell腳本中函數位置參數的用法筆記

位置參數主要是用于調用函數的時候有時候需要傳遞參數&#xff0c;有很大的比例都是需要調用函數的時候動態傳遞參數&#xff0c;從而實現相應的功能。比如我想要計算兩個數的和&#xff0c;可以通過函數是實現&#xff0c;需要定義兩個參數作為計算的值。這樣的計算兩個數的函…

生鮮配送小程序源碼_生鮮社區團購配送系統小程序源碼搭建平臺模式

生鮮配送系統開發&#xff0c;找【金生157威6875店2419同號】生鮮配送模式開發&#xff0c;生鮮配送軟件開發&#xff0c;生鮮配送APP開發&#xff0c;生鮮配送平臺開發平臺&#xff0c;生鮮配送系統源碼開發平臺&#xff0c;生鮮配送系統平臺&#xff0c;生鮮配送系統定制開發…

軟件開發的早期為何要進行可行性研究?該從哪幾個方面研究目標系統的可行性?...

因為并非任何問題都有簡單明顯的解決辦法&#xff0c;很多問題不可能在預定的系統規模或者時間期限內解決。如果問題沒有可行的解決方案&#xff0c;那么花費在這工程上的任何時間人力經費等資源都是浪費。。 一般來說&#xff0c;至少應該從如下3個方面研究其可行性&#xff1…

繼承的概念和實現 、 super關鍵字 、 Object常見方法、抽象類、接口、模板方法模式、成員內部類、匿名內部類

這篇博客將會涉及到&#xff1a; 繼承的概念和實現super關鍵字方法重寫—OverrideObject常見方法 繼承的概念&#xff1a; 生活中&#xff0c;繼承的概念隨處可見&#xff0c;繼承需要符合的關系&#xff1a;is-a&#xff1b;父類更通用、子類更特殊更具體。就比如說&#x…