HTTP基本知識掃盲
一.C/S結構與B/S結構
1 C/S結構,即Client/Server(客戶機/伺服器)結構,是大家熟知的軟體系統體系結構,通過將任務合理分配到Client端和Server端,降低了系統的通訊開銷,可以充分利用兩端硬體環境的優勢。早期的軟體系統多以此作為首選設計標準。伺服器通常採用高效能的PC、工作站或小型機,並採用大型資料庫系統,如Oracle、Sql Server等。例如QQ就是基於C/S架構的,qq APP就是Client客戶端,存放所有使用者資訊的地方就是qq的Server伺服器。
2 B/S結構,即Browser/Server(瀏覽器/伺服器)結構,是隨著Internet技術的興起,對C/S結構的一種變化或者改進的結構。在這種結構下,使用者介面完全通過WWW瀏覽器實現,WEB瀏覽器(部分事務邏輯在前端實現)是客戶端最主要的應用軟體。這種模式統一了客戶端,將系統功能實現的核心部分集中到伺服器上(主要事務邏輯在伺服器端實現,形成所謂3-tier結構),簡化了系統的開發、維護和使用。客戶機上只要安裝一個瀏覽器,如Internet Explorer,伺服器安裝SQL Server、Oracle、MYSQL等資料庫。瀏覽器通過Web Server 同資料庫進行資料互動。
B/S結構,主要是利用了不斷成熟的WWW瀏覽器技術,結合瀏覽器的多種Script語言(VBScript、JavaScript…)和ActiveX技術,用通用瀏覽器就實現了原來需要複雜專用軟體才能實現的強大功能,並節約了開發成本,是一種全新的軟體系統構造技術。隨著Windows 98/Windows 2000將瀏覽器技術植入作業系統內部,這種結構更成為當今應用軟體的首選體系結構。
例:我們經常訪問的百度為例,當我訪問百度時,我的電腦就是客戶機之一,百度的程式碼存放的地方就是web伺服器,而百度使用者的資訊及百度的一些基本資料資訊就是資料庫伺服器。
3 對比區別:
C/S
1.優點:
(1)安全性:需要其特定的客戶端,所以面向物件比較確定,將所進行的資訊保安處於一個可控的範圍
(2)效率:客戶端與伺服器直接相連,省卻了中間環節,資料的傳輸比較快
(3)個性化:有特定的客戶端,所以可以在較大程度上滿足客戶的個性化要求
(4)穩定性:結構比較穩定,有較強的事務處理能力,可以實現較複雜的業務邏輯
2.缺點:
(1)特定的客戶端:對pc機有一定的要求,如:作業系統,並且它就像訂在牆上的石頭桌子,不可再利用
(2)中間環節:因為省卻了中間環節,所以當客戶端達到一定的量時,同時訪問伺服器,造成伺服器的相應變慢,效率變低
B/S
1.優點:
(1)範圍:零安裝,擁有一個瀏覽器,即可訪問,面向的範圍更廣
(2)維護性:維護簡單,更新頁面,即可實現面向所有使用者的更新
(3)共享性:通過瀏覽器訪問,共享性強,就像買來的餐桌,可以再利用
2.缺點:
(1)安全性:面向的範圍廣,所以安全性比較低
(2)個性化:因為面型的範圍廣,所以它是一種公共審美,無法滿足個性化的需求
二.HTTP基礎簡介
正如上面所討論的,其實通過傳送請求獲取伺服器資源的web瀏覽器也可以看作一種客戶端,也就是說B/S類似於C/S的一種通用化的子集實現。
HTTP(超文字轉移協議)是建立在網路能夠正常通訊的基礎上,即要想更好的瞭解和使用HTTP協議就需要了解TCP/IP協議簇。
<1>TCP/IP四層模型
TCP/IP協議簇從廣義上來說其實是TCP/IP所涉及的相關協議的集合,從狹義上來說就是指TCP,IP兩大協議。
1、應用層,用於向用戶提供應用服務的通訊活動
這一層TCP/IP協議族的組成部分協議有,HTTP(基於tcp協議,因為連線),FTP(檔案傳輸協議),DNS(域名系統,就是IP與域名互相轉換)等。
HTTP協議作為TCP/IP協議族應用層的重要成員,在通訊過程中起著非常重要的角色
2、傳輸層,TCP(面向連線的,傳輸控制協議),UDP(面向無連線的,使用者資料報協議)。主要用於提供兩臺計算機之間的資料傳輸。
3、網路層,IP協議。 該層規定了資料包該通過怎樣的路徑(傳輸路線)到達對方計算機。
4、資料鏈路層,即網路介面層,處理網路的硬體部分,比如,網絡卡,通訊線路(光纖,電纜)。
如圖所示的,這是整個通訊過程中資料流的走向,同時經過每層協議時,都會加上相應的首部,每個首部都會有相應的功能。---------封裝與解封裝
分層的好處:各個分層之間相互協作,當一個部分出現問題,可以找到相應的層次來處理問題,而不是把整個協議都去檢查一遍。
<2>各種協議與HTTP協議的關係
<3>URI與URL的關係
1 基礎知識
URI:統一資源標誌符(Uniform Resource Identifier),可以進一步被分為定位符(URL)、名字(URN),兩者都是URI的子集, 除了確定一個資源,還提供一種定位該資源的主要訪問機制(如其網路“位置”)。
URI一般由三部分組成:
訪問資源的命名機制。
存放資源的主機名。
資源自身的名稱。由路徑表示。
URL:統一資源定位符(uniform resource location),即相當於地址資訊。
URL的格式由下列三部分組成:
第一部分是協議(或稱為服務方式);
第二部分是存有該資源的主機IP地址(有時也包含port號);
第三部分是主機資源的詳細地址。
說白了,URL是URI的子集,URL提供資源在網路中的具體位置,如http://www.163.com就是一個URL。
而URI只是標識這個資源,但並不一定給出其具體位置。也就是說URI是網路資源的頭銜,通過URI標記可以把網路世界裡面的每一個事物都加以標記並區分開來(你的QQ郵箱就可以看作一個URI)。
例如:
files.hp.com. //這是一個URI,表示這個檔案屬性
tel:+1-816-555-1212 //URI但不是URL
http://files.hp.com //URI,也是URL(URL是URI子集),給出了資源的位置,即URL範圍更嚴格
http://www.ietf.org/rfc/rfc2396.txt //這是一個URL,給出了資源的位置
PS:當我們替代web地址的時候,URI描述可能更準確,反正如今“URL”這個術語正在被棄用
2 URI格式
相應欄位說明
欄位 |
說明 |
協議 |
http/https |
登入資訊(認證) |
user:[email protected](一般沒有) |
伺服器地址 |
域名或IP |
伺服器埠號 |
服務埠號,省略則取預設埠號 |
帶層次的檔案路徑 |
指定伺服器上的檔案路徑來定位特指的資源 |
查詢字串 |
使用查詢字串傳入引數 |
片段識別符號 |
標記以獲取資源中的子資源(文件內的某個位置) |
3 單臺虛擬主機實現多個域名
HTTP/1.1規範允許一個臺HTTP伺服器搭建多個web站點,但是通過域名伺服器解析後就可能出現不同域名(www.baidu.com和www.hackr.com)解析成一個ip的情況。所以為了能夠區分不同的虛擬機器,就必須在HTTP的host首部內完整指定主機名或域名的URI.
三.HTTP相關知識點
<1>HTTP是不儲存狀態的協議
即不對請求和響之間的通訊狀態進行儲存,即沒有堆想要與儲存做持久化處理。這一刻不知道之前做了哪些工作,為此引入了cookie等技術。
<2> 持久連線(keep-alive)減少tcp建立與消毀的消耗
因為在HTTP初始版本中,每進行一次HTTP通訊都要斷開一次TCP連線,所以對於文件包含大量圖片的情況,頻繁的建立斷開連線非常耗費資源,所以在HTTP/1.1出現了持久連線,以減少頻繁建立連線的消耗。
<3> 管線化
持久連線使得管線化成為可能,即相當於滑動視窗技術,一次性並行傳送多個請求,而不需要一個接著一個等待響應。
<4>內容協商
伺服器驅動協商
客戶端驅動協商
透明協商:是上面兩種方法的結合
<5>確認使用者身份認證
1 常用的認證方式
密碼
動態令牌:僅本人持有的裝置內顯示的動態密碼
數字證書
生物認證:虹膜資訊
IC卡
2 HTTP/1.1認證方式:
BASIC認證(基本認證)
DIGEST認證(摘要認證)
SSL客戶端認證
FormBase認證(基於表單認證)
FormBase認證是在提供的使用者介面輸入賬號密碼等登入資訊後,傳送給Web應用程式,基於認證結果來判斷認證是否成功。
四.HTTP工作涉及的應用程式
<1>CGI (通用閘道器介面)
CGI是外部應用程式(CGI程式)與WEB伺服器之間的介面標準,按CGI 編寫的程式可以擴充套件伺服器功能。CGI 應用程式能與瀏覽器進行互動,還可通過資料庫API 與資料庫伺服器等外部資料來源進行通訊,從資料庫伺服器中獲取資料。格式化為HTML文件後,傳送給瀏覽器,也可以將從瀏覽器獲得的資料放到資料庫中。幾乎所有伺服器都支援CGI,可用任何語言編寫CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分為標準CGI 和間接CGI兩種。標準CGI 使用命令列引數或環境變量表示伺服器的詳細請求,伺服器與瀏覽器通訊採用標準輸入輸出方式。間接CGI 又稱緩衝CGI,在CGI 程式和CGI 介面之間插入一個緩衝程式,緩衝程式與CGI 介面間用標準輸入輸出進行通訊
Common Gateway Interface(公共閘道器介面),簡稱CGI。在物理上是一段程式,執行在伺服器上,提供同客戶端HTML頁面的介面。例:現在的個人主頁上大部分都有一個留言本。留言本的工作是這樣的:先由使用者在客戶端輸入一些資訊,如評論之類的東西。接著使用者按一下“釋出或提交”(到目前為止工作都在客戶端),瀏覽器把這些資訊傳送到伺服器的CGI目錄下特定的CGI程式中,於是CGI程式在伺服器上按照預定的方法進行處理。在本例中就是把使用者提交的資訊存入指定的檔案中。然後CGI程式給客戶端傳送一個資訊,表示請求的任務已經結束。此時使用者在瀏覽器裡將看到“留言結束”的字樣。整個過程結束。
<2>通訊資料轉發程式
1 代理
作為一種中間人的角色,接收由客戶端傳送的請求並轉發給伺服器,同時也接收伺服器返回的響應並轉發給客戶端。
代理伺服器的基本行為就是接收客戶端傳送的請求後轉發給其他伺服器。代理不改變請求URI,會直接傳送給前方持有資源的目標伺服器
持有資源實體的伺服器稱為源伺服器,從源伺服器返回的響應經過代理伺服器後再傳給客戶端
使用代理伺服器的理由有:利用快取技術減少網路頻寬 的流量,組織內部針對特定網站的訪問控制,以獲取訪問日誌為主要 目的,等等。
代理有多種使用方法,按兩種基準分類。一種是是否使用快取,另一 種是是否會修改報文。
1.快取代理
代理轉發響應時,快取代理(Caching Proxy)會預先將資源的副本 (快取)儲存在代理伺服器上。 當代理再次接收到對相同資源的請求時,就可以不從源伺服器那裡獲取資源,而是將之前快取的資源作為響應返回。
2.透明代理
轉發請求或響應時,不對報文做任何加工的代理型別被稱為透明代理 (Transparent Proxy)。反之,對報文內容進行加工的代理被稱為非透明代理。
2 閘道器
能使通訊線路上的伺服器提供非HTTP協議服務。利用閘道器能提高通訊的安全性,因為可以在客戶端與閘道器之間的通訊線路上加密以確保連線的安全性。比如,閘道器可以連線資料庫,使用SQL語句查詢資料。另外,在Web購物網站上進行信用卡結算時,閘道器可以和信用卡結算系統流動。
3 隧道
可按要求建立一條與其他伺服器的通訊線路,屆時使用SSL等加密手段進行通訊。隧道的目的是確保客戶端能與伺服器進行安全的通訊。隧道本身不會解析HTTP請求,請求保持原樣中轉給之後的伺服器。隧道會在通訊雙方斷開連線時結束。
部分圖片來源於網上