Http與Https協議(待補充)

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統(默認HTTP的端口號爲80,HTTPS的端口號爲443)

1.http簡介:

HTTP協議工作於客戶端-服務端架構爲上。瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

2. HTTP協議的主要特點:

(1) 支持客戶/服務器模式。(HTTP協議永遠都是客戶端發起請求,服務器回送響應)
(2) 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
(3) 靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
(4) 無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
(5) 無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

3. HTTP協議的組成

Http協議由Http請求和Http響應組成,當在瀏覽器中輸入網址訪問某個網站時, 你的瀏覽器會將你的請求封裝成一個Http請求發送給服務器站點,服務器接收到請求後會組織響應數據封裝成一個Http響應返回給瀏覽器。即沒有請求就沒有響應

在這裏插入圖片描述

(1)Http請求報文

HTTP請求報文由3部分組成(請求行+請求頭+請求體):
在這裏插入圖片描述

①請求行:

例如:POST /chapter17/user.html HTTP/1.1
格式:請求方式 資源路徑 協議/版本
請求行必須在http請求格式的第一行。
get請求:將請求參數追加在url後面,不安全,url長度限制get請求方式數據的大小,沒有請求體,一般的HTTP請求大多都是GET。
post請求:請求參數在請求體處,較安全。請求數據大小沒有顯示,只有表單設置爲method=“post”纔是post請求,其他都是get請求常見get請求:地址欄直接訪問、等HEAD請求:HEAD跟GET相似,不過服務端接收到HEAD請求時只返回響應頭,不發送響應內容。所以,如果只需要查看某個頁面的狀態時,用HEAD更高效,因爲省去了傳輸頁面內容的時間。
DELETE請求:刪除某一個資源。
OPTIONS請求:用於獲取當前URL所支持的方法。 若請求成功,會在HTTP頭中包含一個名爲“Allow”的頭,值是所支持的方法,如“GET, POST”。
PUT請求:把一個資源存放在指定的位置上。本質上來講, PUT和POST極爲相似,都是向服務器發送數據,但它們之間有一個重要區別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器自己決定。
TRACE請求:回顯服務器收到的請求,主要用於測試或診斷。
CONNECT請求:CONNECT方法是HTTP/1.1協議預留的,能夠將連接改爲管道方式的代理服務器。通常用於SSL加密服務器的鏈接與非加密的HTTP代理服務器的通信。

②請求頭:

例如:Host: 39.108.107.149:8080
請求頭從第二行開始,到第一個空格結束。請求頭和請求體之間存在一個空格(如下)
在這裏插入圖片描述
請求頭通常以鍵值對{key:value}方式傳遞數據。key爲規範的固定值value爲key對應的取值,通常是一個值,可能是一組。
HTTP請求報文頭屬性
Referer:表示這個請求是從哪個url跳過來的,通過百度來搜索淘寶網,那麼在進入淘寶網的請 求報文中,Referer的值就是:www.baidu.com。如果是直接訪問就不會有這個頭。
常用於:防盜鏈。Referrer Policy: no-referrer-when-downgrade
Accept:告訴服務端,該請求所能支持的響應數據類型,專業術語稱爲MIME 類型(文件類型的 一種描述方式)
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
MIME格式:大類型/小類型[;參數]
例如:
text/html,html文件
text/css,css文件
text/javascript,js文件
image/*,所有圖片文件
if-Modified-Sincce:瀏覽器通知服務器,本地緩存的最後變更時間。與另一個響應頭組合控制 瀏覽器頁面的緩存
Cookie:客戶端的Cookie就是通過這個報文頭屬性傳給服務端的哦!
Cookie: JSESSIONID=15982C27F7507C7FDAF0F97161F634B5
這裏就出了一個問題,網站A怎麼保證自己請求體中保存的cookie就是網站A的cookie而不是網站B的cookie呢,這就和cookie裏面的jsessionid有關係了。
User-Agent:瀏覽器通知服務器,客戶端瀏覽器與操作系統相關信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Connection:表示客戶端與服務連接類型;Keep-Alive表示持久連接,close已關閉
Connection: keep-alive
Host:請求的服務器主機名
Host: sczpkj.f3322.net:3000
Content-Length:請求體的長度
Content-Length: 11
Content-Type:請求的與實體對應的MIME信息。如果是post請求,會有這個頭,默認值爲 application/x-www-form-urlencoded,表示請求體內容使用url編碼
Content-Type: application/x-www-form-urlencoded
Accept-Encoding:瀏覽器通知服務器,瀏覽器支持的數據壓縮格式。如GZIP壓縮
Accept-Encoding: gzip, deflate
Accept-Language:瀏覽器通知服務器,瀏覽器支持的語言。各國語言(國際化i18n)
Accept-Language: zh-CN,zh;q=0.9
Cache-Control:指定請求和響應遵循的緩存機制對緩存進行控制,如一個請求希望響應返回 的內容在客戶端要被緩存一年,或不希望被緩存就可以通過這個報文頭達到目的。
Cache-Control: no-cache

③請求體:

當請求方式是post的時,請求體會有請求的參數,格式如下: username=zhangsan&password=123

(2)Http相響應報文

在這裏插入圖片描述

①響應行:

1)報文協議及版本;
例如:HTTP/1.1 200 OK
2)狀態碼及狀態描述;
狀態碼:由3位數字組成,第一個數字定義了響應的類別
1xx:指示信息,表示請求已接收,繼續處理
2xx:成功,表示請求已被成功接受,處理。
200 OK:客戶端請求成功
204 No Content:無內容。服務器成功處理,但未返回內容。一般用在只是客戶端向服務器發送信息,而服務器不用向客戶端返回什麼信息的情況。不會刷新頁面。
206 Partial Content:服務器已經完成了部分GET請求(客戶端進行了範圍請求)。響應報文中包含Content-Range指定範圍的實體內容
3xx:重定向
301 Moved Permanently:永久重定向,表示請求的資源已經永久的搬到了其他位置。
302 Found:臨時重定向,表示請求的資源臨時搬到了其他位置
303 See Other:臨時重定向,應使用GET定向獲取請求資源。303功能與302一樣,區別只是303明確客戶端應該使用GET訪問
307 Temporary Redirect:臨時重定向,和302有着相同含義。POST不會變成GET
304 Not Modified:表示客戶端發送附帶條件的請求(GET方法請求報文中的IF…)時,條件不滿足。返回304時,不包含任何響應主體。雖然304被劃分在3XX,但和重定向一毛錢關係都沒有
4xx:客戶端錯誤
400 Bad Request:客戶端請求有語法錯誤,服務器無法理解。
401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用。
403 Forbidden:服務器收到請求,但是拒絕提供服務
404 Not Found:請求資源不存在。比如,輸入了錯誤的url
415 Unsupported media type:不支持的媒體類型
5xx:服務器端錯誤,服務器未能實現合法的請求。
500 Internal Server Error:服務器發生不可預期的錯誤。
503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

②響應頭:

響應報文頭,也是由多個屬性組成;用鍵值對k:v,服務器通過響應頭來控制瀏覽器的行爲,不同的頭瀏覽器操作不同
在這裏插入圖片描述

Content-Type詳解
在這裏插入圖片描述
application/x-www-form-urlencoded :最常見的post提交數據的方式。瀏覽器原生的form表 單,如果不設置enctype屬性,那麼最終就會以application/x-www-form-urlencoded 方 式提交數據首先,Content-Type 被指定爲 application/x-www-form-urlencoded;其次, 提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉 碼。大部分服務端語言都對這種方式有很好的支持。
很多時候,我們用 Ajax 提交數據時,也是使用這種方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默認「application/x-www-form-urlencoded;charset=utf-8」。

multipart/form-data :這又是一個常見的 POST 數據提交的方式。我們使用表單上傳文件時, 必須讓 form 的 enctyped 等於這個值。
application/json :用來告訴服務端消息主體是序列化後的 JSON 字符串。由於 JSON 規範的 流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify,服務端語言也都有 處理 JSON 的函數,使用 JSON 不會遇上什麼麻煩。 JSON 格式支持比鍵值對複雜得多 的結構化數據,這一點也很有用。
這種方案,可以方便的提交複雜的結構化數據,特別適合 RESTful 的接口。各大抓包工 具如 Chrome 自帶的開發者工具、Firebug、Fiddler,都會以樹形結構展示 JSON 數據, 非常友好。

③響應體:

服務器發送給瀏覽器的正文,即我們真正要的“乾貨” ;是服務器回寫給客戶端 的頁面正文,瀏覽器將正文加載到內存,然後解析渲染 顯示頁面內容

4. HTTP工作原理:

HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。
以下是 HTTP 請求/響應的步驟:
(1)客戶端連接到Web服務器
一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認爲80)建立一個TCP套接字連接。例如,http://www.baidu.con。
(2)發送HTTP請求
通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
(3)服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
(4)釋放連接TCP連接
若connection 模式爲close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式爲keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;
(5)客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態代碼。然後解析每一個響應頭,響應頭告知以下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。
例如:在瀏覽器地址欄鍵入URL,按下回車之後會經歷以下流程:
1、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器建立TCP連接;
3、瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文作爲 TCP 三次握手的第三個報文的數據發送給服務器;
4、服務器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器;
5、釋放 TCP連接;
6、瀏覽器將該 html 文本並顯示內容;

5.HTTP和HTTPS有什麼區別

HTTPS:是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分爲兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

6.HTTPS的安全性是怎麼實現的

在這裏插入圖片描述
(1)客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接。
(2)Web服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級。
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然後利用網站的公鑰將會話密鑰加密,並傳送給網站。
(5)Web服務器利用自己的私鑰解密出會話密鑰。
(6)Web服務器利用會話密鑰加密與客戶端之間的通信。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章