HTTP: HyperText Transfer Protocal,超文本傳輸協議/超文本轉移協議。Web是創建在HTTP協議上通訊的。javascript
HTTP於1990年問世,那時候HTTP並無做爲正式的標準被創建,被稱爲HTTP/0.9
HTTP正式做爲標準被公佈是在1996年5月,版本被命名爲HTTP/1.0,該協議至今仍被普遍用在服務器端。
HTTP/1.1於1997年1月公佈,是目前主流的HTTP協議版本。
HTTP/2.0正在制定中。java
一般使用的網絡(包括互聯網)是在TCP/IP協議族的基礎上運做的。而HTTP屬於它內部的一個子集。咱們能夠把TCP/IP當作是互聯網相關協議的總稱。web
TCP/IP協議族按層次分別爲如下4層:
應用層:決定了向用戶提供應用服務時的通訊活動,該層包括FTP、DNS、HTTP。
傳輸層:對上層應用層,提供處於網絡鏈接中的兩臺計算機之間的數據傳輸,該層包括TCP、UDP。
網絡層:用來處理在網絡上流動的數據包,該層規定了經過怎樣的路徑達到對方計算機並把數據包傳送給對方。
數據鏈路層:用來處理鏈接網絡的硬件部分,如:網卡、光纖。shell
TCP/IP通訊傳輸流(http舉例)
(客戶端)HTTP客戶端-->TCP-->IP-->網絡 --|--網絡-->IP-->TCP-->HTTP服務器(服務器)
發送端每經過一層則增長首部(header),接收端每經過一層則刪除首部。這種方法稱爲封裝。數據庫
負責傳輸的 IP 協議
在進行中轉時,會利用下一站中轉設備的 MAC 地址來搜索下一個中轉目標。這時,會採用 ARP 協議。ARP 是一種用以解析地址的協議,根據通訊方的 IP 地址就能夠反查出對應的 MAC 地址。數組
確保可靠性的 TCP 協議
爲了準確無誤地將數據送達目標處,TCP 協議採用了三次握手策略。瀏覽器
DNS服務是和 HTTP 協議同樣位於應用層的協議。它提供域名到 IP 地址之間的解析服務。緩存
按流程順序分別爲:
DNS服務:把用戶輸入的域名解析爲IP地址
HTTP協議:生成針對目標web服務器的HTTP請求報文
TCP協議:爲了方便通訊將HTTP請求報文分割成報文段,把每一個報文段可靠的傳給對方
IP協議:搜索對方的地址,一邊中轉一邊傳送
TCP協議:從對方那裏接收報文段並按序號從組請求報文
HTTP協議:對web服務器請求的內容的處理安全
URI 用字符串標識某一互聯網資源,而 URL 表示資源的地點(互聯網上所處的位置)。URL 是 URI 的子集。
區別就是 URI 定義資源,而 URL 不單定義這個資源,還定義瞭如何找到這個資源(既訪問資源的方式)。服務器
請求報文是由請求方法、請求URI、協議版本、可選的請求頭部字段和內容實體構成的。
響應報文基本上是由協議版本、狀態碼、用以解釋狀態碼的緣由短語、可選的響應首部字段及實體主體構成。
HTTP協議自身不對請求和響應之間的通訊狀態進行保存。
HTTP協議使用URI定位互聯網上的資源。
方法 | 說明 |
---|---|
GET | 獲取資源 |
POST | 傳輸實體主體 |
PUT | 傳輸文件 |
HEAD | 得到報文首部 |
DELETE | 刪除文件 |
OPTIONS | 詢問支持的方法 |
TRACE | 追蹤路徑 |
CONNECT | 要求用隧道協議鏈接代理 |
LINK | 創建和資源之間的聯繫 |
UNLINK | 斷開鏈接關係 |
向請求URI指定的資源發送請求報文時,採用成爲方法的命令。
持久鏈接的好處在於減小了TCP鏈接的重複創建和斷開所形成的額外開銷,減輕服務器端荷載。在HTTP/1.1中全部鏈接默認都是持久鏈接。持久鏈接使得多數請求以管線化方式發送,即能同時並行發送多個請求。
Ccookie技術是經過在請求和響應報文中寫入cookie信息來控制客戶端的狀態。Cookie會根據從服務器發送的響應報文內的一個叫作Set-Cookie的首部字段信息,通知客戶端保存cookie。當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入Cookie值後發送出去。服務器端接收到客戶端發送過來的Cookie後,會去檢查到底是從哪個客戶端發來的鏈接請求,而後對比服務器上的記錄,最後獲得以前的狀態信息。
HTTP報文大體可分爲報文首部和報文主體兩塊,二者有最初出現的空行來劃分,一般並不必定要有報文主體。
請求行:包含用於請求的方法,請求URI和HTTP版本
狀態行:包含響應結果的狀態碼,緣由短語和HTTP版本
首部字段:包含表示請求和響應的各類條件和屬性的各種首部,通常分別爲:通用首部、請求首部、響應首部和實體首部。
其餘:包含HTTP的RFC裏未定義的首部(Cookie等)
經常使用的內容編碼方式有如下幾種:
gzip(GNU zip)
compress(UNIX系統的標準壓縮)
deflate(zlib)
identity(不進行編碼)
HTTP協議中也採納了多部分對象集合,發送的一份報文主體內可含有多類型實體。多部分對象集合的每一個部分類型中,均可以含有首部字段。
執行範圍請求時,會用到首部字段Range來指定資源的byte範圍。針對範圍請求,響應會返回狀態碼爲206 Partial Content的響應報文。
內容協商機制是指客戶端和服務器端就響應的資源內容進行交涉,而後提供給客戶端最適合的資源。內容協商會以響應資源的語言、字符集、編碼方式等做爲判斷的基準。如首部字段中的Accept、Accept-Charset、Accept-Enoding、Accept-Language、Content-Language。
狀態碼 | 類別 | 含義 | |
---|---|---|---|
1XX | informational(信息性狀態碼) | 接收的請求正在處理 | |
2XX | Success(成功狀態碼) | 請求正常處理完畢 | |
3XX | Redirection(重定向狀態碼) | 須要進行附加操做已完成請求 | |
4XX | Client Error(客戶端錯誤狀態碼) | 服務器沒法處理請求 | |
5XX | Server Error(服務器端錯誤狀態碼) | 服務器處理請求出錯 | |
2XX | 成功 | ||
200 | OK | 表示從客戶端發來的請求在服務器端被正常處理 | |
204 | No Content | 表示服務器接收的請求已成功處理,但返回的響應報文中不容許返回任何實體的主體部分 | |
206 | Partial Content | 表示客戶端進行了範圍請求,服務器成功執行了這部分GET請求 | |
3XX | 重定向 | ||
304 | Not Modified | 表示客戶端發送附帶條件的GET請求時,其訪問的資源(自上次訪問以來或者根據請求的條件)未變化 | |
4XX | 客戶端錯誤 | ||
401 | Bad Request | 表示報文中存在語法錯誤 | |
403 | Forbidden | 表示對請求資源的訪問被服務器拒絕了 | |
404 | Not Found | 表示服務器上沒法找到請求的資源 | |
5XX | 服務器錯誤 | ||
501 | Internet Sever Error | 表示服務器端在執行請求時發生了錯誤 | |
503 | Service Unavailable | 表示服務器暫時處於超負荷或正在停機維護,現沒法處理請求 |
HTTP / 1.1 規範容許一臺 HTTP 服務器搭建多個 Web 站點。這是利用虛擬主機的功能。
在互聯網上,域名經過 DNS 服務映射到 IP 地址以後訪問目標網站。可見,當請求發送到服務器時,已是以 IP 地址形式訪問了。因此,當一臺託管了兩個域名的服務器接收到請求時就須要弄清楚究竟要訪問哪一個域名。
在相同的 IP 地址下,因爲虛擬主機能夠寄存多個不一樣主機名和域名的 Web 網站,所以在發送 HTTP 請求時,必須在 Host 首部內完整指定主機名或域名的 URI。
代理
代理是一種有轉發功能的應用程序,它扮演了位於服務器和客戶端「中間人」的角色,接收由客戶端發送的請求並轉發給服務器,同時也接收服務器返回的響應並轉發給客戶端。代理服務器的基本行爲接收客戶端發送的請求後轉發給其餘服務器,代理不改變請求URI,轉發時須要附加Via首部字段已標記出通過的主機信息。
使用代理服務器的理由:利用緩存技術(代理緩存)減小網絡帶寬的流量,組織內部針對特定網站的訪問控制,以獲取訪問日誌爲主要目的。
代理有多種使用方法,按兩種基準分類。一種是是否使用緩存,另外一種是是否會修改報文:
緩存代理:代理轉發響應時,緩存代理會預先將資源的副本(緩存)保存在代理服務器上
透明代理:轉發請求或響應時,不對報文作任何加工的代理類型被稱爲透明代理。反之,對 報文內容進行加工的代理被成爲非透明代理。
網關
網關是轉發其餘服務器通訊數據的服務器,接收從客戶端發送來的請求時,它就像本身擁有資源的源服務器同樣對請求進行處理。有時客戶端可能都不會察覺,本身的通訊目標是一個網關。
網關的工做機制和代理十分類似。而網關能使通訊線路上的服務器提供非 HTTP 協議服務。
隧道
隧道是在相隔甚遠的客戶端和服務器二者之間進行中轉,並保持雙方通訊鏈接的應用程序。
隧道自己不會去解析 HTTP 請求。請求保持原樣中轉給以後的服務器。隧道會在通訊雙方斷開鏈接時結束。
緩存是指代理服務器或客戶端本地磁盤內保存的資源副本。利用緩存可減小對源服務器的訪問,節省通訊流量和時間。
緩存服務器是代理服務器的一種。當代理轉發從服務器返回的響應時,代理服務器將會保存一份資源的副本。
緩存服務器的優點在於利用緩存可避免屢次從源服務器轉發資源。所以客戶端可就近從緩存服務器上獲取資源,而源服務器也沒必要屢次處理相同的請求了。
緩存的有效期限
對於緩存服務器和客戶端瀏覽器,當斷定緩存過時或客戶端要求,會向源服務器確認資源的有效性。若失效,瀏覽器會再次請求新資源。
客戶端的緩存
緩存不只能夠存在於緩存服務器內,還能夠存在客戶端瀏覽器中。以 Internet Explorer 程序爲例,把客戶端緩存稱爲臨時網絡文件。
使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。
4種HTTP首部字段類型
通用首部字段、請求首部字段、響應首部字段、實體首部字段。
通訊使用明文(不加密),內容可能會被竊聽
不驗證通訊方的身份,所以有可能遭遇假裝
沒法證實報文的完整性,因此有可能已遭篡改
HTTPS是身披SSL外殼的HTTP。一般,HTTP直接和TCP通訊。當使用 SSL 時,則演變成先和 SSL 通訊,再由 SSL 和 TCP 通訊了。簡言之,所謂 HTTPS,其實就是身披SSL協議這層外殼的HTTP。
在採用SSL後,HTTP就擁有了HTTPS的加密、證書和完整性保護這些功能。SSL是獨立於HTTP的協議,因此不光是 HTTP 協議,其餘運行在應用層的 SMTP 和Telnet等協議都可配合 SSL協議使用。能夠說SSL是當今世界上應用最爲普遍的網絡安全技術。
SSL 採用一種叫作公開密鑰加密的加密處理方式。HTTPS 採用混合加密機制。
計算機自己沒法斷定坐在顯示器前的使用者的身份。進一步說,也沒法確認網絡的那頭究竟有誰。爲了確認是否真的具備訪問系統的權限,須要覈對信息:
密碼:只有本人才會知道的字符串信息。
動態令牌:僅限本人持有的設備內顯示的一次性密碼。
數字證書:僅限本人(終端)持有的信息。
生物認證:指紋和虹膜等本人的生理信息。
IC卡等:僅限本人持有的信息。
HTTP/1.1使用的認證方式:
BASIC認證
DIGEST認證(摘要認證)
SSL客戶端認證
FormBase認證(基於表單認證)
基於表單認證
Session管理及Cookie狀態管理:
步驟1:客戶端把用戶ID和密碼等登陸信息放入報文的實體部分,一般是以POST方法把請求發送給服務器。而這時,會使用HTTPS通訊來進行HTML表單畫面和用戶輸入數據的發送。
步驟2:服務器會發放用以識別用戶的Session ID。經過驗證從客戶端發送過來的登陸信息進行身份認證,而後把用戶的認證狀態與Session ID綁定後記錄在服務器端。
步驟3:客戶端接收到從服務器端發來的Session ID後,會將其做爲Cookie保存在本地。下次向服務器發送請求時,瀏覽器會自動發送Cookie,因此Session ID也隨之發送到服務器。服務器端能夠經過驗證接收到的Session ID識別用戶和其認證狀態。
HTTP的瓶頸:
使用HTTP協議探知服務器內容是否更新,就須要頻繁的從客戶端到服務器端進行確認,若是服務器上沒有內容更新,此時就會產生徒勞的通訊。主要的缺點有:
一條鏈接上只能發送一個請求
請求只能從客戶端開始。客戶端不能夠接收除響應意外的命令。
請求/響應首部未經壓縮就發送。首部信息越多延時越大。
發送冗長的首部。每次相互發送相同首部形成的浪費較多。
可任意選擇數據壓縮格式。非強制壓縮發送。
SPDY的設計與功能
SPDY沒有徹底改寫HTTP協議,而是在TCP/IP之間應用層和傳輸層之間經過新加入會話的形式運做,同時考慮安全性問題,SPDY規定通訊中使用SSL。
SPDY會以會話層加入,控制對數據的流動,可是仍是採用HTTP創建通訊鏈接。所以可照常使用HTTP的GET和PSOT等方法、Cookie以及HTTP報文等。
websocket與web瀏覽器與web服務器之間全雙工通訊標準。一旦web瀏覽器和web服務器之間創建這種聯繫,以後全部的通訊都依靠這個專用的協議進行。通訊過程當中能夠相互發送JSON、XML、HTML或者圖片等任意格式的數據。
爲了發送Web上的超文本而開發的標記語言。超文本是一種文檔系統,可將文檔中任意位置的信息與其餘信息創建關聯,即超連接文本。標記語言是指經過在文檔的某部分穿插特別的字符串標籤,用來修飾文檔的語言。咱們把出如今HTML文檔內的這種特殊字符串叫作HTML標籤(tag)
指使用客戶端腳本語言將靜態的HTML內容變成動態的技術的總稱。動態HTML是經過調用客戶端腳本javascript,實現對HTML的web頁面的動態改造。利用DOM可指定欲發生動態變化的HTML元素。
指經過web功能提供的應用程序,如購物網站、搜索引擎等。其中由程序建立的內容稱之爲動態內容,而事先準備好的內容稱之爲靜態內容。web內容則做用於動態內容之上。
XML(extensible Markup Language,可擴展標記語言)是一種可按應用目標進行擴展的通用標記語言。旨在經過使用xml,使得互聯網數據共享變得容易。XML和HTML都是從標準通用標記語言SGML簡化而成
RSS(簡易信息聚合)和Atom都是發佈新聞博客日誌等更新信息文檔格式的總稱。二者都用到了XML
JSON是一種以javascript的對象表示法爲基礎的輕量級數據標記語言,可以處理的數據類型有false/null/true/對象/數組/數字/字符串,這7種類型。
在客戶端便可篡改請求
在WEB應用中從瀏覽器接收到的HTTP請求的所有內容均可以在客戶端自由的變動、篡改。所以web引用可能接收到與預期數據不相同的內容;在HTTP請求報文內加載攻擊代碼就能對web應用發起對web應用的攻擊。
攻擊模式分類
主動攻擊(active attack)主要是攻擊者經過直接訪問web應用把攻擊代碼傳入的攻擊模式。因爲該模式是針對服務器上的資源進行攻擊,所以攻擊者須要可以訪問那些資源,主動攻擊模式中具備表明性的有SQL注入攻擊和OS命令注入攻擊。
被動攻擊(passive attack)是指利用圈套策略執行攻擊代碼的攻擊模式。在被動攻擊過程當中,攻擊者不直接對目標web應用訪問發起攻擊。
實施web應用對策大體能夠分爲如下兩種:客戶端驗證、web應用端(服務器端)的驗證。
跨站腳本攻擊
跨站腳本攻擊(XSS)是指經過存在安全漏洞的Web網站註冊用戶的瀏覽器內運行非法的HTML標籤或者JavaScript進行的一種攻擊。動態建立的HTML部分可能有隱藏的漏洞,這樣攻擊者編寫腳本陷阱,用戶在本身瀏覽器上運行時,一不當心就會受到被動攻擊。
對用戶Cookie的竊取攻擊
經過js腳本竊取Cookie信息
SQL注入攻擊
SQL注入是指針對Web應用使用的數據庫,經過運行非法的SQL而產生的攻擊。該安全隱患可能會致使我的信息及機密信息的泄露。因爲We應用一般會使用到數據庫,若是在調用數據庫語句方式存在疏漏,就有可能被執行惡意注入。
OS命令注入攻擊
OS命令註釋系統是指經過web應用執行非法的操做系統命令達到攻擊的目的。能夠從wen應用中經過shell來調用操做系統命令,假若調用shell時存在疏漏就能夠執行插入的非法OS命令,經過os注入攻擊能夠執行os上安裝着的各類程序。
HTTP首部注入攻擊
HTTP首部注入攻擊是指攻擊者經過響應首部字段內插入換行,添加任意響應首部或主體的一種攻擊,屬於被動式攻擊。向首部主體添加內容的攻擊方式稱爲HTTP響應截斷攻擊
HTTP響應截斷攻擊
HTTP響應截斷攻擊是HTTP首部注入攻擊的一種,攻擊順序相同可是要將%0D%0A%0D%0A並排插入字符串後發送,利用這兩個連續換行就能夠作出HTTTP首部與主體分割所需的空行了,這樣就能顯示僞造的主體,達到攻擊的目的。這樣的攻擊稱做HTTP響應截斷攻擊。
郵件首部注入攻擊
是指web應用中的郵件發送功能。攻擊者經過向郵件首部To或者Subject內任意添加非法內容發起的攻擊。
目錄遍歷攻擊
對本無心公開的文件目錄,經過非法截斷其目錄路徑後,達成訪問目的的一種攻擊方式。這種攻擊又稱路徑遍歷攻擊
遠程文件包含漏洞
指當部分腳本內容須要從其餘文件讀入時,攻擊者利用指定外部服務器的URL充當依賴文件,讓腳本讀取後,就能夠運行任意腳本的一種攻擊方式。(主要是PHP存在的安全漏洞)
主要是錯誤設置web服務器或者是由設計上的一些問題引發的安全漏洞。主要包括下面3個方面
強制瀏覽
強制瀏覽安全漏洞是指,從安置在web服務器的公開目錄下的文件中,瀏覽那些本來非自願公開的文件。強制瀏覽能夠形成諸如泄露顧客的我的信息等重要情報、泄露本來須要具備訪問權限的用戶才能夠查閱的信息內容、泄露未鏈接到外界的文件
不正確的錯誤消息處理
指web應用的錯誤當心包含對攻擊者有用的信息,包括Web應用拋出的錯誤消息、數據庫等系統拋出的錯誤消息
開放重定向
指對任意URL做重定向跳轉的功能。
會話管理是用來管理用戶狀態的必備功能,可是若是在會話管理上有所疏忽,就會致使用戶的認證狀態被竊取等後果。
會話劫持
經過某種非法手段得到用戶的ID,並不是法使用此會話ID假裝成用戶,達到攻擊的目的。
會話固定攻擊
對以竊取目標會話ID爲主動攻擊手段劫持而言,會話固定攻擊(Session Fixation)攻擊會強制用戶使用攻擊者指定的會話ID,屬於被動攻擊
跨站點請求僞造
指攻擊者經過設置好的陷阱,強制對已完成認證的用戶進行非預期的我的信息或者設定信息等某些狀態更新,屬於被動攻擊
密碼破解攻擊點擊劫持:指利用透明按鈕或者連接作成陷阱,覆蓋在Web頁面之上,又稱頁面假裝。dos攻擊:是一種讓運行中的服務呈現中止狀態的攻擊,又稱服務器中止攻擊或拒絕服務攻擊。Dos攻擊對象不只限於Web網站還包括網絡設備及服務器。主要有兩種方式DoS:集中利用訪問請求形成資源過載,資源用盡的同時實際服務也就呈現中止狀態;經過攻擊安全漏洞使服務中止。後門程序:指開發設置的隱藏入口。