1. 程式人生 > >大前端學習筆記整理【七】HTTP協議以及http與https的區別

大前端學習筆記整理【七】HTTP協議以及http與https的區別

前言

還是老樣子,新部落格開始前總是想先囉嗦幾句...HTTP協議其實在當初學習java時老師就有提過...但是...反正就那麼過去了...

這段時間公司的專案正好要求做https的轉換和遷移,然後自己思考了一下,好像自己對於http連一知半解都算不上...更不提http與https的區別...想想作為一個未來的大前端工程師,豈能不去研究這些東西?

好吧,廢話就到這裡...正文開始

什麼是HTTP?

以下來自度娘最為專業的解釋:

超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。所有的WWW檔案都必須遵守這個標準。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過計算機處理文字資訊的方法,並稱之為超文字(hypertext),這成為了HTTP超文字傳輸協議標準架構的發展根基。Ted Nelson組織協調全球資訊網協會(World Wide Web Consortium)和網際網路工程工作小組(Internet Engineering Task Force )共同合作研究,最終釋出了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1。

HTTP的特點

1.支援客戶/伺服器模式。(C/S模式)


2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。


3.靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。


4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。


5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快

HTTP的工作流程

第一步:建立TCP/IP連線,客戶端與伺服器通過Socket三次握手進行連線

第二步:客戶端向服務端發起HTTP請求(例如:POST/login.html http/1.1)

第三步:客戶端傳送請求頭資訊,請求內容,最後會發送一空白行,標示客戶端請求完畢

第四步:伺服器做出應答,表示對於客戶端請求的應答,例如:HTTP/1.1 200 OK

第五步:伺服器向客戶端傳送應答頭資訊

第六步:伺服器向客戶端傳送請求頭資訊後,也會發送一空白行,標示應答頭資訊傳送完畢,接著就以Content-type要求的資料格式傳送資料給客戶端

第七步:服務端關閉TCP連線,如果伺服器或者客戶端增Connection:keep-alive就表示客戶端與伺服器端繼續儲存連線,在下次請求時可以繼續使用這次的連線

HTTP請求詳解

藉助Chrome的Developer Tools,以下的例子都是前段時間完成的一個小專案中與後臺互動時的請求分析

在谷歌瀏覽器中按 F12激活了開發者工具後,點選紅框中的位置,就可以開始對請求進行抓包。因為是首頁,可能附加資源有點多,為了方便後續的觀看,我過濾掉了其他的內容,只保留了與服務端的HTTP請求。

然後再看下面這張圖,通過工具,我們能很清晰的看到客戶端請求發出後的,包含於請求中的所有資訊;以及服務響應後返回給客戶端的資訊

下面,我們來解釋其中各種眼花繚亂的引數及其有什麼作用吧!

首先第一塊 General

Request URL:就是客戶端請求服務端的url路徑;

Request Method:請求的型別。這裡多說幾句,請求型別分為8種:GET/POST/DELETE/TRACE/PUT/CONNECT/HEAD/OPTION,但其實,我們在開發中常用的就只有get/post,其他的請求型別也可以通過這兩種間接的去實現出來。如何實現暫時與本文無關,暫不贅述;

Status Code:也就是伺服器響應了客服端的請求後,給出一個code,標示請求的狀態,根據字面意義理解就叫狀態碼。狀態碼太過繁多,感覺與本文沒有太大聯絡,這裡也不再做過多解釋;

Remote Address:直譯過來叫做遠端地址,其實怎麼理解呢?也就是說的是你請求發出的那個地址...

我覺得按照HTTP的工作流程,應該先說明下第三塊和第四塊,最後再來說明第二塊。至於為什麼?我們繼續往下看。

第三塊:Request Header 請求頭

這塊中包含了當客戶端發出一個請求後請求頭中的所有資訊,來看看具體有些啥:

Host:服務端的伺服器主機地址

Proxy-Connection: 其實這裡應該是Connetion,因為我這邊使用了Fiddler做了下代理,所以這裡變成了Proxy-Connection。Connection引數是指允許傳送指定連線的選項。例如指定連線是連續,或者指定“close”選項,通知伺服器,在響應完成後,關閉連線。

Accept: 指定客戶端接受哪些型別的資訊

X-Requested-With: 說明請求的請求方式,是同步還是非同步,如果引數是null,說明是傳統的同步請求,如果是XMLHttpRequest,則說明是ajax的非同步請求

User-Agent: 我們上網登陸論壇的時候,往往會看到一些歡迎資訊,其中列出了你的作業系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,伺服器應用程式就是從User-Agent這個請求報頭域中獲取到這些資訊。User-Agent請求報頭域允許客戶端將它的作業系統、瀏覽器和其它屬性告訴伺服器。不過,這個報頭域不是必需的,如果我們自己編寫一個瀏覽器,不使用User-Agent請求報頭域,那麼伺服器端就無法得知我們的資訊了。

Referer:當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器基此可以獲得一些資訊用於處理。

Accept-Encoding:用於指定可接受的內容編碼

Accept-Language:用於指定一種自然語言,如果請求訊息中沒有設定這個,伺服器假定客戶端對各種語言都可以接受。

第四塊:Query String Parameters

這塊其實沒有啥好說的,因為這塊屬於非必需的部分,因為有些請求需要客戶端向服務端發起請求時攜帶一些引數,有些時候也並不需要。攜帶引數的時候這裡會展示所攜帶的引數。

我們倒回來看看第三塊,也就是Response Headers響應頭

在HTTP請求傳送到服務端之後,服務端響應了這個請求,並向客戶端傳送了響應資訊。響應頭包含在響應資訊中。接下來我們來看看引數:

Date:這個就不用多說了吧?表明了響應的時間

Content-Type: 傳送給客戶端的實體正文的媒體型別

Transfer-Encoding:定義請求的傳輸編碼

Connection:允許客戶端或伺服器中任何一方關閉底層的連線雙方都會要求在處理請求後關閉或者保持它們的TCP連線。

Vary:告訴下游代理是使用快取響應還是從原始伺服器請求

X-Powered-By: 自定義響應頭

Cache-Control: 這個欄位用於指定所有快取機制在整個請求/響應鏈中必須服從的指令。這些指令指定用於阻止快取對請求或響應造成不利干擾的行為。這些指令通常覆蓋預設快取演算法。快取指令是單向的,即請求中存在一個指令並不意味著響應中將存在同一個指令。

HTTP與HTTPS的區別

1.什麼是HTTPS

HTTPS,全名叫安全的超文字傳輸協議(HyperText Transfer Protocol Secure),為啥是安全的超文字傳輸協議呢?看一張圖:

其實HTTPS就是在常規的TCP協議層之上加入了一層TLS或者SSL協議。所以其埠也不是常規的HTTP的80埠,變成了443埠

2.http與https的區別

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

3.https的工作流程

1、客戶端發起HTTPS請求

這個沒什麼好說的,就是使用者在瀏覽器裡輸入一個https網址,然後連線到server的443埠。

2、服務端的配置

採用HTTPS協議的伺服器必須要有一套數字證書,可以自己製作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰,如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。

3、傳送證書

這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間等等。

4、客戶端解析證書

這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個隨機值,然後用證書對該隨機值進行加密,就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。

5、傳送加密資訊

這部分傳送的是用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通訊就可以通過這個隨機值來進行加密解密了。

6、服務段解密資訊

服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密,所謂對稱加密就是,將資訊和私鑰通過某種演算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密演算法夠彪悍,私鑰夠複雜,資料就夠安全。

7、傳輸加密後的資訊

這部分資訊是服務段用私鑰加密後的資訊,可以在客戶端被還原。

8、客戶端解密資訊

客戶端用之前生成的私鑰解密服務段傳過來的資訊,於是獲取瞭解密後的內容,整個過程第三方即使監聽到了資料,也束手無策。

總結

細細想想好像沒啥總結的了...這篇部落格也只是為了幫助我自己更好的去理解HTTP與HTTPS...嗯...就這樣吧。

完結撒花~

相關推薦

前端學習筆記整理HTTP協議以及httphttps區別

前言 還是老樣子,新部落格開始前總是想先囉嗦幾句...HTTP協議其實在當初學習java時老師就有提過...但是...反正就那麼過去了... 這段時間公司的專案正好要求做https的轉換和遷移,然後自己思考了一下,好像自己對於http連一知半解都算不上...更不提http與https的區別...想想作為一個未

前端學習筆記整理rempx換算的計算方式

前言 這段時間的小專案中算是真正意義上使用了rem來進行移動端的頁面佈局,專案結束了我反思了一下之前的對於rem的使用...原來我以前對rem用法完全是在搞笑啊!!結合這次這個小專案,我覺得我也有必要對rem佈局以及用法進行一次總結。 ps.文筆可能不太好... 1.什麼是rem 來自於鵝廠ISUX團隊的解釋

前端學習筆記整理行內元素塊級元素的區別以及絕對定位固定定位的差異

1.簡要說明: 1. 行內元素會再一條直線上,是在同一行的。比如span和strong; 2. 塊級元素各佔一行。是垂直方向的!比如div和p 假如你要將行內元素變成塊級元素,那麼就只需要在該標籤上加上樣式 display:block; 塊級元素可以用樣式控制其高、寬的值,而行內元素不可以。 行內元素和wi

前端學習筆記整理CSS盒模型基於盒模型的6種元素居中方案

概覽 CSS盒模型,規定了元素框來處理元素的 內容、內邊距、邊框和外邊距的方式 元素部分是指內容部分,也是最實際的內容,包圍內容的稱之為內邊距,內邊距外圍是邊框,邊框外圍就是外邊距;且外邊距是透明的,所以並不會阻擋其後的元素   * {     margin: 0;     padding: 0;   }

前端學習筆記整理關於JavaScript中的關鍵字——this

寫在前面 工作有那麼一段時間了,但是在工作中,發現自己的理論知識還是有所欠缺。特別是在javascript上,很多東西其實自己屬於知道要用這個,但是不知道為什麼要這麼用...這種情況很是尷尬了,所以寫部落格的很重要一個目的就是鍛鍊我自己的總結能力,把學到的東西總結出來,感覺這樣能讓我更快的去理解所學到的東西。

前端學習筆記整理CSS視覺格式化模型

1. 概念 在視覺格式化模型中,文件樹中的每個元素都將會根據盒模型產生零到多個盒子。這些盒子的佈局由如下因素決定: 盒子的尺寸和型別 定位策略(正常文件流,浮動或者絕對定位) 和文件樹中其他元素的關係 額外的資訊(比如視口的大小,圖片的原始尺寸等) 1.1 視口(viewport) 連續媒體(contin

前端學習筆記整理LESS基礎

第一次接觸CSS預編譯,然後對比後發現其實less的上手容易度確實比sass高不少,再加上公司專案也是使用的less。所以想想還是根據網上的各種教程,整理出來了一些比較基礎的、而且比較能讓我們這種初學者快速上手的例子。 菜雞一隻,程式碼要是有錯或者表達不清的地方,請各位批評指正! 那麼,現在我們就開始正文部分

前端學習筆記整理this關鍵字詳解

 這裡有一個微妙但是非常重要的細節,雖然 this 的繫結規則完全取決於呼叫位置,但是隻有 foo() 執行在非 strict mode 下時,預設繫結才能繫結到全域性物件;嚴格模式下與 foo()的呼叫位置無關: function foo() {      console.log( this.a );

前端學習筆記關於CSS再次整理

如果你在日常工作中使用 CSS,你的主要目標可能會重點圍繞著使事情“看起來正確”。如何實現這一點經常是遠不如最終結果那麼重要。這意味著比起正確的語法和視覺結果來說,我們更少關心 CSS 的工作原理。 CSS 的視覺結果通常是操作隱藏屬性的間接後果,你可能還沒有意識到這一點。某些 CSS 屬性(比如 backg

Python學習筆記5 轉載基本矩陣運算_20170618

ros class 簡單 lba spa 使用 常見 port 模塊 需要 numpy 庫支持 保存鏈接 http://www.cnblogs.com/chamie/p/4870078.html 1.numpy的導入和使用 from numpy import *;

Deep Learning(深度學習學習筆記整理系列

試圖 能夠 多層 深度學習 註意 理解 pap http 相關 Deep Learning(深度學習)學習筆記整理系列 聲明: 1)該Deep Learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也

學習筆記案例財政收入影響因素分析及預測模型

6.0 pearson end 4.5 pandas 問題 特征 ase max() 案例來源:《Python數據分析與挖掘實戰》第13章 案例背景與挖掘目標 輸入數據: 《某市統計年鑒》(1995-2014) 挖掘目標: 梳理影響地方財政收入的關鍵特征,分析、識別影響地

學習筆記案例中醫證型關聯規則挖掘

order 卡方檢驗 eat 業務 並行 pen fill lin 區分 案例來源:《Python數據分析與挖掘實戰》第8章 案例背景與挖掘目標 輸入數據: 挖掘目標: 借助三陰乳腺癌患者的病理信息,挖掘患者的癥狀與中醫證型之間的關聯關系 對截斷治療提供依據,挖掘潛性證素

React 入門學習筆記整理)—— 生命週期

(1)react 生命週期 只有類元件有生命週期,函式元件沒有生命週期 1、掛載階段:這些方法會在元件例項被建立和插入DOM中時被呼叫: 1)constructor(props) 初始化元件的狀態、繫結方法,可以在建構函式中完成。 注意:狀態不會隨著屬性的更新而更新。為了保證屬性和狀態同步,通常需要狀

Java基礎筆記整理---07面向物件程式設計-類和物件

int 型別預設值為 0 String型別預設值為null 方法(函式):返回值 方法名(引數型別 引數名稱, ...){方法體(程式碼塊)}this指呼叫的方法中(當前)的變數類與物件1.構造方法:1> 構造物件 構造例項的方法,一個特殊方法,方法名需要與類名相同,

VUE初級入門 關於npmcnpm 區別的疑問

總的來說 因為下載速度問題 我們下載cnpm代替npm進行使用。 NPM介紹 NPM(node package manager )節點包管理器,是的NodeJS的包管理器,用於節點外掛管理(包括安裝,解除安裝,管理依賴等)。npm是隨同新版的NodeJS一起安裝的包管理

多線程學習筆記整理001_多線程技能

current string exception 引入 ktr cpu implement interrupt 構造 一.線程和進程的區別   首先我們引入百科上對進程的解釋      進程粗暴一點的理解可以理解為一個程序,每個進程都有自己的內存空間,用戶每啟動一個進程,操

mysql學習筆記整理

結束 ant 出現次數 varchar 移動 desc cal direct 指定 /*mysql學習筆記整理*/ /*常用的數據庫操作對象*/ #庫的操作#創建#數據庫的創建USE mysql;CREATE DATABASE db_x;#刪除#刪除數據庫DROP

OpenCV學習筆記方框濾波、均值濾波、高斯濾波

1.平滑處理 平滑處理(smoothing)也稱模糊處理(bluring),是一種簡單且使用頻率很高的影象處理方法。平滑處理的用途有很多,最常見的是用來減少影象上的噪點或者失真。在涉及到影象解析度時,平滑處理是非常好用的方法。 2.影象濾波與濾波器 影象濾波,指儘量保留影象細節特徵的條件

學習筆記前端學習筆記 HTML+CSS+JavaScript+JQuery

學這些太痛苦了,我一定要成為演算法工程師! HTML 簡介 Hyper Text Mark Language,超文字標記語言,使用一套標記標籤來描述網頁。 標籤,開始標籤,結束標籤,標籤內容,屬性。開始標籤後加/來結束,如<br/>。推薦使用小寫。