簡介:html
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。web
HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。算法
HTTP協議以明文方式發送內容,不提供任何方式的數據加密,若是攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就能夠直接讀懂其中的信息,所以,HTTP協議不適合傳輸一些敏感信息,好比:信用卡號、密碼等支付信息。瀏覽器
它的發展是萬維網協會(World Wide Web Consortium)和Internet工做小組IETF(Internet Engineering Task Force)合做的結果,緩存
(他們)最終發佈了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。安全
RFC 2616定義了今天廣泛使用的一個版本——HTTP 1.1。服務器
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。網絡
它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,數據結構
以及哪部份內容首先顯示(如文本先於圖形)等。架構
HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。
http請求由三部分組成,分別是:請求行、消息報頭、請求正文
在TCP/IP協議棧中的位置:
HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。
默認HTTP的端口號爲80,HTTPS的端口號爲443。
HTTP協議永遠都是客戶端發起請求,服務器回送響應。
這樣就限制了使用HTTP協議,沒法實如今客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP協議是一個無狀態的協議,同一個客戶端的此次請求和上次請求是沒有對應關係
HTTP協議的主要特色可歸納以下:
1.支持客戶/服務器模式。
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。
3.靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。
一次HTTP操做稱爲一個事務,其工做過程可分爲四步:
1.首先客戶機與服務器須要創建鏈接。只要單擊某個超級連接,HTTP的工做開始。
2.創建鏈接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。
3.服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
4.客戶端接收服務器所返回的信息經過瀏覽器顯示在用戶的顯示屏上,而後客戶機與服務器斷開鏈接。
若是在以上過程當中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來講,這些過程是由HTTP本身完成的,用戶只要用鼠標點擊,等待信息顯示就能夠了。
請求行是由 請求方式、請求資源、請求協議組成;
請求方式主要有GET和POST兩種;
除了表單提交,其餘都是GET請求;
一共有八種請求方式:
請求方式 | 做用 |
get | 用於請求某個資源,理論上不修改服務器的狀態 |
post | 表單提交 |
head | 只返回get請求後相應的頭,而不用吧相應體(HTML)返回 |
trace | 顯示服務器端接收的信息,用於調試 |
put | 將包含的信息放在URL中 |
delete | 指明要刪除某個URL對應的資源 |
options | 列出HTTP方法列表 |
connect | 創建隧道 |
冪等:一次請求和屢次請求的結果是同樣的;
在請求方式中,知足冪等的有:HEAD、GET、PUT;其他的都不是冪等;
請求資源是要請求返回的web資源;
請求協議如今通常使用HTTP/1.1,之前使用HTTP/1.0
注意:HTTP/1.1和HTTP/1.0的區別
HTTP是基於TCP/IP之上的,HTTP/1.0是指鏈接web服務器後只容許一次HTTP請求;HTTP/1.1是指鏈接web服務器後容許屢次HTTP請求;
請求頭是由不少Map組成;
Host | 客戶機向服務器發送請求的主機名 |
Accept | 客戶機支持的數據類型 |
Accept-Language | 客戶機支持的語言 Tips:在訪問www.google.com 時服務器會解析出客戶機支持的語言,而後發回此語言的網頁; |
Accept-Charset | 客戶機支持的編碼 |
Accept-Encoding | 客戶機的壓縮格式 |
Referer | 客戶機訪問此資源的來源;好比從1.html中的超連接請求2.html,則請求2.html時會發送Referer: 1.html 用途:防盜鏈 避免從未知網站連接此網站,盜用資源 |
User-Agent | 客戶機的軟件環境 |
Connection | 客戶機發送此鏈接後的鏈接狀態時繼續鏈接仍是斷開 |
Date | 客戶機發送的時間 |
注意:請求頭和實際內容中間須要加上空行;
100-199 | 服務器成功接收客戶請求,不過須要讓客戶機繼續發送請求完成整個請求過程 |
200-299 | 200 成功處理 |
300-399 | 302 : 找別人,在響應頭中須要有location屬性; 30四、307:找緩存,即緩存中存在頁面 |
400-499 | 403:存在頁面,可是用戶沒有權限訪問; 404:無此頁面 |
500-599 | 500 : 服務器內部錯誤 |
Server | 服務器信息 |
Content-Length | 響應內容的長度 |
Content-Encoding | 服務器內容的壓縮格式 |
Content-Type | 服務器內容的格式,好比text/html ; image/jpeg |
location | 用於狀態碼爲302,表示別人的地址 |
Content-disposition | 下載返回的數據 |
Transfer-Encoding | 以塊傳輸仍是以字節傳輸 |
Date | 時間 |
refresh | 定時刷新或重定向 |
Last-Modified | 最後改變的時間 |
Expires | -1或0 表示無緩存 |
ETag | 每一個web資源都有一個標示符,只要web資源內容改動,標示符就會改變; |
一、客戶端發起HTTPS請求
這個沒什麼好說的,就是用戶在瀏覽器裏輸入一個https網址,而後鏈接到server的443端口。
二、服務端的配置
採用HTTPS協議的服務器必需要有一套數字證書,能夠本身製做,也能夠向組織申請,區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。
這套證書其實就是一對公鑰和私鑰,若是對公鑰和私鑰不太理解,能夠想象成一把鑰匙和一個鎖頭,只是全世界只有你一我的有這把鑰匙,你能夠把鎖頭給別人,別人能夠用這個鎖把重要的東西鎖起來,而後發給你,由於只有你一我的有這把鑰匙,因此只有你才能看到被這把鎖鎖起來的東西。
三、傳送證書
這個證書其實就是公鑰,只是包含了不少信息,如證書的頒發機構,過時時間等等。
四、客戶端解析證書
這部分工做是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,好比頒發機構,過時時間等等,若是發現異常,則會彈出一個警告框,提示證書存在問題。
若是證書沒有問題,那麼就生成一個隨機值,而後用證書對該隨機值進行加密,就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,否則看不到被鎖住的內容。
五、傳送加密信息
這部分傳送的是用證書加密後的隨機值,目的就是讓服務端獲得這個隨機值,之後客戶端和服務端的通訊就能夠經過這個隨機值來進行加密解密了。
六、服務段解密信息
服務端用私鑰解密後,獲得了客戶端傳過來的隨機值(私鑰),而後把內容經過該值進行對稱加密,所謂對稱加密就是,將信息和私鑰經過某種算法混合在一塊兒,這樣除非知道私鑰,否則沒法獲取內容,而正好客戶端和服務端都知道這個私鑰,因此只要加密算法夠彪悍,私鑰夠複雜,數據就夠安全。
七、傳輸加密後的信息
這部分信息是服務段用私鑰加密後的信息,能夠在客戶端被還原。
八、客戶端解密信息
客戶端用以前生成的私鑰解密服務段傳過來的信息,因而獲取瞭解密後的內容,整個過程第三方即便監聽到了數據,也一籌莫展。
正是因爲HTTPS很是的安全,攻擊者沒法從中找到下手的地方,從站長的角度來講,HTTPS的優勢有如下2點:
一、SEO方面
谷歌曾在2014年8月份調整搜索引擎算法,並稱「比起同等HTTP網站,採用HTTPS加密的網站在搜索結果中的排名將會更高」。
二、安全性
儘管HTTPS並不是絕對安全,掌握根證書的機構、掌握加密算法的組織一樣能夠進行中間人形式的攻擊,但HTTPS還是現行架構下最安全的解決方案,主要有如下幾個好處:
(1)、使用HTTPS協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
(2)、HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全,可防止數據在傳輸過程當中不被竊取、改變,確保數據的完整性。
(3)、HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增長了中間人攻擊的成本。
HTTPS的缺點
雖說HTTPS有很大的優點,但其相對來講,仍是有些不足之處的,具體來講,有如下2點:
一、SEO方面
據ACM CoNEXT數據顯示,使用HTTPS協議會使頁面的加載時間延長近50%,增長10%到20%的耗電,此外,HTTPS協議還會影響緩存,增長數據開銷和功耗,甚至已有安全措施也會受到影響也會所以而受到影響。
並且HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼做用。
最關鍵的,SSL證書的信用鏈體系並不安全,特別是在某些國家能夠控制CA根證書的狀況下,中間人攻擊同樣可行。
二、經濟方面
(1)、SSL證書須要錢,功能越強大的證書費用越高,我的網站、小網站沒有必要通常不會用。
(2)、SSL證書一般須要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗(SSL有擴展能夠部分解決這個問題,可是比較麻煩,並且要求瀏覽器、操做系統支持,Windows XP就不支持這個擴展,考慮到XP的裝機量,這個特性幾乎沒用)。
(3)、HTTPS鏈接緩存不如HTTP高效,大流量網站如非必要也不會採用,流量成本過高。
(4)、HTTPS鏈接服務器端資源佔用高不少,支持訪客稍多的網站須要投入更大的成本,若是所有采用HTTPS,基於大部分計算資源閒置的假設的VPS的平均成本會上去。
(5)、HTTPS協議握手階段比較費時,對網站的相應速度有負面影響,如非必要,沒有理由犧牲用戶體驗。
一、SSL的做用
(1)、認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
(2)、加密數據以防止數據中途被竊取;
(3)、維護數據的完整性,確保數據在傳輸過程當中不被改變。
而SSL證書指的是在SSL通訊中驗證通訊雙方身份的數字文件,通常分爲服務器證書和客戶端證書,咱們一般說的SSL證書主要指服務器證書,SSL證書由受信任的數字證書頒發機構CA(如VeriSign,GlobalSign,WoSign等),在驗證服務器身份後頒發,具備服務器身份驗證和數據傳輸加密功能,分爲擴展驗證型(EV)SSL證書、組織驗證型(OV)SSL證書、和域名驗證型(DV)SSL證書。
二、SSL證書申請的3個主要步驟
對於SSL證書的申請,主要有如下3個步驟:
(1)、製做CSR文件
所謂CSR就是由申請人制做的Certificate Secure Request證書請求文件,製做過程當中,系統會產生2個密鑰,一個是公鑰就是這個CSR文件;另一個是私鑰,存放在服務器上。
要製做CSR文件,申請人能夠參考WEB SERVER的文檔,通常APACHE等,使用OPENSSL命令行來生成KEY+CSR2個文件,Tomcat,JBoss,Resin等使用KEYTOOL來生成JKS和CSR文件,IIS經過嚮導創建一個掛起的請求和一個CSR文件。
(2)、CA認證
將CSR提交給CA,CA通常有2種認證方式:
①、域名認證:通常經過對管理員郵箱認證的方式,這種方式認證速度快,可是簽發的證書中沒有企業的名稱。
②、企業文檔認證:須要提供企業的營業執照,通常須要3-5個工做日。
也有須要同時認證以上2種方式的證書,叫EV證書,這種證書可使IE7以上的瀏覽器地址欄變成綠色,因此認證也最嚴格。
(3)、證書的安裝
在收到CA的證書後,能夠將證書部署上服務器,通常APACHE文件直接將KEY+CER複製到文件上,而後修改HTTPD.CONF文件;TOMCAT等,須要將CA簽發的證書CER文件導入JKS文件後,複製上服務器,而後修改SERVER.XML;IIS須要處理掛起的請求,將CER文件導入。
HTTP與HTTPS有什麼區別?
HTTP協議傳輸的數據都是未加密的,也就是明文的,所以使用HTTP協議傳輸隱私信息很是不安全,爲了保證這些隱私數據能加密傳輸,因而網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。
簡單來講,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。
HTTPS和HTTP的區別主要以下:
一、https協議須要到ca申請證書,通常免費證書較少,於是須要必定費用。
二、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。
三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。
四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。