http 協議系統學習 :)

http 是什麼 ?

基於 TCP/IP 通訊協議獲取網絡資源 ( html, css ... ).php

http 協議 ( Hyper Text Transfer Protocol 超文本傳輸協議 ) 用於從萬維網 ( www ) 中傳輸超文本到本機瀏覽器的傳送協議, 互聯網的基礎協議.css

有什麼角色

1、 客戶端 ( user-agent ) :html

  • 一般由瀏覽器來扮演, 也能夠是應用程序, 爬蟲等.web

  • 瀏覽器發送一個請求到 web 服務器獲取 html 文檔, 解析文檔中的資源信息再發送其它請求獲取到 css 樣式或腳本進行頁面渲染, 以及一些其它的資源 ( 圖片或視頻 ... ), 瀏覽器最後會整合資源顯示.數據庫

2、 web 服務端跨域

  • 負責接收處理請求 ( requests ), 返回響應 ( response ) 所請求的文檔.瀏覽器

  • 它能夠是負載平衡 ( 負載均衡 ) 的一組服務組成的計算機集羣, 也能夠是某個複雜的軟件, 經過向其它計算機 ( 如緩存, 數據庫服務器, 電子商務服務器 ) 發起請求獲取資源.緩存

    負載平衡 ( 負載均衡 ): 經過多個計算機、網絡鏈接、CPU、磁盤驅動器或其它資源中分配負載, 以達到最優化的資源使用、最大化的吞吐率、最小化的響應時間、同時避免過載的目的, 經常使用於解決高併發和高可用問題.安全

  • Server 不必定是機器, 但機器上能夠有多個 Server, 在 http/1.1 和 Host 頭部能夠共享一個 IP 地址.服務器

3、 代理 ( Proxies )

處於瀏覽器和服務器之間, 大都在傳輸層上 ( 即應用層 ), 主要有以下幾種做用 :

  1. 緩存 :可公開也可私有, 如瀏覽器緩存
  2. 過濾 :如病毒掃描, 家長控制
  3. 負載加載 : 多個服務器服務不一樣請求
  4. 認證 :對不一樣資源權限管理
  5. 日誌記錄 :容許存儲歷史信息

4、 特性

  • 支持客戶 / 服務器模式 .
  • 簡單快速 : 請求時只需發送請求方法和路徑 .
  • 靈活 : 容許傳輸任何類型的數據對象, 由 Content-Type 標記 .
  • 無鏈接 :每次鏈接只能處理一個請求, 收到客戶端應答後會斷開鏈接, 目的節省傳輸時間.
  • 無狀態 :對事務處理無記憶能力, 優在於不會形成沒必要要的鏈接佔用, 缺在於每次請求都有會大量的重複數據.

5、 請求方法

  • get :請求獲取指定資源

  • post : 想指定資源提交數據進行處理請求 ( 如提交表單或上傳文件 ... ), 有可能會建立新的資源或修改已有資源

    get 受 url 長度限制, 並非 http 協議規範限制的, 而是瀏覽器和服務器限制的

    post 理論上無長度限制, 出於安全考慮, 服務器會在實現時作一些限制

  • put : 只對已在的指定資源總體更新

  • patch` : 用於資源部分更新, 當資源不存在時, 會建立一個新的資源

  • delete : 刪除指定資源

  • connect : http/1.1 協議中將鏈接改成管道方式的代理服務器, 一般用於 SSL 加密服務器的連接與非加密的 http 代理服務器的通訊

  • head : 用於查看服務器性能, 只獲取響應頭信息, 不會返回內容部分 ( 響應主體 )

  • trace : 用於 http 請求的測試或診斷, 返回服務器收到的請求

  • options : 用於查看服務器性能, 測試服務器功能是否正常, 請求服務器返回該資源所支持的全部 http 請求方法 .

    JavaScript XMLHttpRequest 對象進行 CORS 跨域資源共享時, 用此方法發送嗅探請求, 以判斷是否有對目的資源訪問權限

6、 狀態碼

  • 1** : 信息, 服務器收到請求, 須要請求者繼續執行操做
  • 2** : 成功接受並處理
  • 3** : 重定向, 需進一步操做才能完成請求
  • 4** : 客戶端錯誤
  • 5** : 服務器錯誤

7、 Cookie

保存在本地的服務器數據, 會在下次請求攜帶上訪問服務器, 一般用於告知服務器兩個請求是否源於同一瀏覽器, 如保持登陸狀態 ( http 是無狀態的 )

// 設置 Cookie
setcookie('cookie[name]', 'value');

// 刷新輸出 Cookie 
if (isset($_COOKIE['cookie'])) { // isset 檢測變量是否已設置而且非 NULL
    foreach ($_COOKIE['cookie'] as $name => $value) {
        $name  = htmlspecialchars($name); // htmlspecialchars 將特殊字符轉 html 實體
        $value = htmlspecialchars($value);

        echo "$name : $value <br>";
    }
}

主要應用

  • 會話狀態管理 ( 如登陸狀態、購物車、遊戲分數 ... )
  • 個性化設置 ( 用戶自定義設置、主題 ... )
  • 行爲跟蹤 ( 跟蹤分析用戶行爲 ... )

缺點

  • 因爲會附加每一個 http 請求中, 會增長流量
  • http 請求中 Cookie 是明文傳遞, 除非是 https, 不然有安全問題
  • Cookie 大小限制 4kb 左右, 對應複雜的存儲需求遠遠不夠

分類

  • 持久 Cookie 保存在硬盤, 消失須要用戶清理或到了過時時間

    過時時間的設定只與客戶端相關 : Set-Cookie: id=a3fWa; Expires=Wed, 25 Dec 2018 08:20:00 GMT;

  • 非持久 Cookie 保存在內存裏, 瀏覽器關閉後自動刪除, 僅在會話期內有效, 無需指定過時時間 ( Expires ) 或有效期 ( Max-Age )

    注意 : 有些瀏覽器有會話恢復功能, 即便瀏覽器關閉了, 會話期 Cookie 也會保存着

相關文章
相關標籤/搜索