HTTP雜記

HTTP部分:

目錄:

基礎概念
    Web基礎
    URL
    請求和響應報文
HTTP 方法
    GET:獲取資源
    POST:傳輸實體主體
    HEAD:獲取報文首部
    PUT:上傳文件
    DELETE:刪除文件
    OPTIONS:查詢支持的方法
    RACE:追蹤路徑
    CONNECT:要求用隧道協議連接代理
HTTP 狀態碼
    2XX 成功
    3XX 重定向
    4XX 客戶端錯誤
    5XX 服務器錯誤
HTTP首部
    通用首部字段
    請求首部字段
    響應首部字段
    實體首部字段
具體應用
    Cookie
    緩存
    持久連接
    編碼
    分塊傳輸
    多部分對象集合
    範圍請求
    內容協商
    虛擬主機
    通信數據轉發
HTTPs
    加密
    認證
    完整性
各個 HTTP 版本的對比
    HTTP/1.0 與 HTTP/1.1 的區別
    HTTP/1.1 與 HTTP/2.0 的區別

正文

基礎概念:
    web基礎:
        http:超文本傳輸協議;
        www的三種技術:html、http、url。
        rfc:互聯網的設計文檔。

    url:
        url統一資源定位符,

        格式:
        http://user:[email protected]:80/dir/index.htm?uid=1#ch1
        協議方案名+登錄信息認證+服務器地址+服務器端口號+帶層次的文件路徑+查詢字符串+片段標識


    請求和響應報文
        請求報文:
            方法+url+協議版本+請求首部字段+內容實體。

        響應報文:
        協議版本+狀態碼+狀態碼的原因短語+響應首部字段+主體。



HTTP方法:
    客戶端發送的請求報文第一行爲請求行,包含了方法字段。

    get:獲取資源;
    post:傳輸實體主體。

    post主要目的不是獲取資源,而是傳輸實體主體數據。

    get和post的請求都能使用額外的參數,
    但是get的參數是以查詢字符串出現在url中,
    而post的參數存儲在實體主體部分。


    get的傳參方式相比於post安全性較差,
    因爲get傳的參數在url是可見的。
    可能會泄漏私密信息。
    並且get只支持ASCII字符,
    如果參數爲中文則可能會出現亂碼,
    而post支持標準字符集。


    head:獲取報文首部。
        和get方法一樣,但是不返回報文實體主體部分。
        主要用於確認url的有效性
        以及資源更新的日期時間等。

    put:上傳文件
        由於自身不帶驗證機制,
        任何人都可以上傳文件,
        因此存在安全性問題,
        一般web網站不使用該方法。

    delete:刪除文件
        與put功能相反,同樣不帶驗證機制。

    options:查詢支持的方法
        查詢指定的url能夠支持的方法。
        會返回allow。

    trace:追蹤路徑
        服務器會將通信路徑返回給客戶端。
        一般不會使用。

    connect:要求用隧道協議連接代理。
        用隧道協議進行tcp通信。
        通常使用ssl安全套接字
        和tls傳輸層安全協議
        把通信內容加密後經網絡隧道傳輸。

http狀態碼:
    服務器返回的響應報文中第一行爲狀態行,
    包含了狀態碼以及原因短語,
    來告知客戶端請求的結果。

    2XX:成功
    3XX:重定向
    4XX:客戶端錯誤
    5XX:服務器錯誤


http首部:
    http報文包含了首部和主體兩部分。
    有4中類型的首部字段:
    通用首部字段、
    請求首部字段、
    實體首部字段、
    響應首部字段。



具體應用
    cookie
    http協議是無狀態的,
    主要是爲了讓http協議儘可能簡單,
    使他能夠處理大量事務。
    引入cookie來保存狀態信息。
    cookie狀態信息保存在客戶端瀏覽器中,
    不是服務器上。


    session和cookie的區別:
    session是服務器用來跟蹤用戶的一種手段,
    每個session都有一個唯一標識:
    session ID。
    當服務器創建了一個session時,
    給客戶端發送的響應報文裏就包含了
    set-cookie字段,
    其中有一個名爲sid的鍵值對,
    這個鍵值對就是session id,
    客戶端收到後就把cookie保存在瀏覽器中,
    並且之後發送的請求報文都包含session ID。
    http就是session和cookie這兩種方式一起合作來
    實現跟蹤用戶狀態的,
    而session用於服務器端,
    cookie用於客戶端。

    瀏覽器禁用cookie的情況
    會使用url重寫技術,在url後面加上sid=xxx

    使用cookie實現用戶名和密碼的自動填寫。
    網站腳本會自動從cookie中讀取用戶名和密碼,
    從而實現自動填寫。


    緩存
    有兩種緩存方法:讓代理服務器進行緩
    和讓客戶端瀏覽器進行緩存。


持久連接:
    當瀏覽器訪問一個包含多張圖片的
    html頁面時,除了請求訪問html頁面資源,
    還會請求圖片資源,
    如果每進行一次http通信就要斷開一次
    tcp連接,連接建立和斷開的開銷會很大。
    持久連接只需要進行一次tcp連接
    就能進行多次http通信。


    持久連接需要使用connection首部字段進行管理。

編碼:
    編碼主要是爲了對實體進行壓縮。

分塊傳輸:
    分塊傳輸可以把數據分割成多塊,
    讓瀏覽器逐步顯示頁面。

範圍請求:
    如果網絡出現中斷,
    服務器只發送了一部分數據,
    範圍請求使得客戶端能夠只請求未發送的那部分數據,
    從而避免服務器端重新發送所有數據。 


內容協商:
    通過內容協商返回最合適的內容,
    例如根據瀏覽器的默認語言返回中文界面
    還是英文界面。


虛擬主機:
    使用虛擬主機技術,使得一臺服務器擁有多個域名,
    並且在邏輯上可以看成多個服務器。



通信數據轉發:

    代理:
    代理服務器接收客戶端的請求,並且轉發給其他服務器。
    代理服務器一般是透明的,
    不會改變url。
    使用代理的主要目的是:
    緩存、網絡訪問控制以及記錄訪問日誌。


    網關:
    與代理服務器不同的是,
    網關服務器會將http轉化爲
    其他協議進行通信,
    從而其他非http服務器的服務。

    隧道:
    使用ssl等加密手段,
    爲客戶端和服務器端之間建立一提哦啊安全的通信線路。





https:

    http有以下安全性問題:
    1.通信使用明文,內容可能會被竊聽;
    2.不驗證通信方的身份,因此可能遭遇僞裝;
    3.無法證明報文的完整性,所以有可能已遭篡改。


https並不是新協議,
而是http先和ssl通信,
再由ssl和tcp進行通信。
通過使用ssl,https提供了加密、認證
和完整性保護。

加密:
有兩種加密方式:對稱密鑰加密和公開密鑰加密。對稱密鑰加密的加密和解密使用同一密鑰,而公開密鑰加密使用一對密鑰用於加密和解密,分別爲公開密鑰和私有密鑰。公開密鑰所有人都可以獲得,通信發送方獲得接收方的公開密鑰之後,就可以使用公開密鑰進行加密,接收方收到通信內容後使用私有密鑰解密。
對稱密鑰加密的缺點:無法安全傳輸密鑰;公開密鑰加密的缺點:相對來說更耗時。
HTTPs 採用 混合的加密機制,使用公開密鑰加密用於傳輸對稱密鑰,之後使用對稱密鑰加密進行通信。(下圖中,共享密鑰即對稱密鑰)


認證:
通過使用 證書 來對通信方進行認證。證書中有公開密鑰數據,如果可以驗證公開密鑰的確屬於通信方的,那麼就可以確定通信方是可靠的。
數字證書認證機構(CA,Certificate Authority)頒發的公開密鑰證書,可以通過 CA 對其進行驗證。
進行 HTTPs 通信時,服務器會把證書發送給客戶端,客戶端取得其中的公開密鑰之後,就可以開始加密過程。
使用 OpenSSL 這套開源程序,每個人都可以構建一套屬於自己的認證機構,從而自己給自己頒發服務器證書。瀏覽器在訪問該服務器時,會顯示“無法確認連接安全性”或“該網站的安全證書存在問題”等警告消息。
客戶端證書需要用戶自行安裝,只有在業務需要非常高安全性時才使用客戶端證書,例如網上銀行。


完整性:
ssl提供摘要功能來驗證完整性。
發佈了127 篇原創文章 · 獲贊 83 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章