http 協(xié)議

一、URL

  1. URL與URI

    • URL - 統(tǒng)一資源定位符

    • URI - 統(tǒng)一資源標識符

    • URL與URI的區(qū)別

      所有的URL都是URI,但URI不一定是URL

  2. 完整的URL

  • 完整的url具有哪些元素

       網(wǎng)絡協(xié)議://IP地址:端口號/路徑;參數(shù)?查詢數(shù)據(jù)#錨點
    
       網(wǎng)絡協(xié)議 - 
       IP地址 - 每個電腦都有0.0.0.0每個
       端口號 - 電腦開放給外部電腦訪問接口
       路徑 - 相對路徑和絕對路徑
       參數(shù) - 某些方案會使用參數(shù)來指定輸入?yún)?shù)
       查詢地址 - 
         key=value&key=value
       錨點 -
    
  • 一般使用時

      http://www.baidu.com/news
      http://137.0.0.1:8080?key=value
      http://localhost:80#mylink
    

二、Http協(xié)議

  1. 網(wǎng)絡協(xié)議

     客戶端與服務端之間的協(xié)議
    
  2. 主流協(xié)議

      http、socket、ftp、pop3
    
  3. http協(xié)議

    • 多用與b/s架構(gòu)

    • 問題

          短連接:每次客戶端與服務端交互時,先建立連接,交互完畢后,關閉連接
      
          無狀態(tài):服務端只能記得住當次請求狀態(tài)
      
    • 版本
      http:1.0 - 目前主流版本
      http:1.1 - 較新版本(向下兼容)
      http:2.0 - 最新版本

三、http 請求協(xié)議

  1. 客戶端發(fā)送一個請求,應該有如下三個部分:

    • 請求行: 請求方法、請求url 狀態(tài)碼、(http協(xié)議版本)

    • 請求頭部: 說明服務器要使用的附加信息

    • 請求主體: 提交給服務器的請求數(shù)據(jù)

  2. HTTP客戶端請求內(nèi)容詳解

    1)請求行 - 請求的信息

     請求類型 - get、post (put...)
    
     請求地址 
    
        如果是get請求,參數(shù)應該拼到url的后面url?key=value,但請求體為空
    
        如果是post請求,url后面不拼參數(shù),參數(shù)放在請求體中
        
     狀態(tài)碼 - 服務器端的狀態(tài)
    

    2)請求頭 - 反映給服務端的信息

     格式為 key:value,key:value,...
          
     accept - 表示瀏覽器可接受的MIME類型
     accept-Encoding - 瀏覽器能夠進行解碼的數(shù)據(jù)編碼方式
    
     accept-language - 表示服務端接受的語言
    
       zh-cn:簡體中文
       zh-tw:繁體中文
       zh - 中文
       us -英文
    
     connection - 表示當前鏈接狀態(tài)
    
     keep-alive - 保持連接
    
     host - 請求的服務器網(wǎng)址;
    
     referer - 表示當前的請求來源
    
       實現(xiàn)防盜鏈接(Referer)
    
     user-agent 獲取到用戶瀏覽器信息 
    
     cache-control -緩存控制
         
           max-age 設置最大活動周期,設置緩存保存的最大時間的單位為秒,為0代表不緩存
    
     cookie - 將cookie自動攜帶到請求頭
    
     content-type:互聯(lián)網(wǎng)媒體類型;使用post請求必須設置這個屬性
    
         也叫做MIME類型,在Http協(xié)議消息頭中,使用Content-Type來表示具體請求中的媒體類型信息。
    
         <form>元素提交時默認的類型
        一般文件上傳時默認為application/x-www.form-urlencoded
    
     Content-Length:請求內(nèi)容的長度
    
        對于POST請求來說Content-Length必須出現(xiàn)
    

    3)請求體 - 存放請求參數(shù)

     如果為post請求,有值,如果為get請求為空
    

四、http響應協(xié)議

  1. 服務端給客戶端響應信息,應該有如下三部分

    • 響應行:協(xié)議版本 狀態(tài)碼 原因短語

    • 響應頭部:

    • 響應主題: 返回給客戶端的響應數(shù)據(jù),可能是字符數(shù)據(jù),也可能是字節(jié)數(shù)據(jù)

  2. HTTP服務端響應內(nèi)容詳解

    1)響應行

      狀態(tài)碼
      協(xié)議版本
    

    2)響應頭

      Allow:服務器支持哪些請求方法
    
         GET、POST
    
      Content-Encoding 文檔的編碼(Encode)
    
      Cache-Control: 告訴客戶端,服務端的緩存配置
    
      Connection - 表示當前的連接狀態(tài)
    
        keep-alive 表示保持連接
    
      content-length 響應數(shù)據(jù)的長度(大小)
    
      content-type - 響應數(shù)據(jù)的mime類型
    
         一般情況下:text/html
         
      Date - 當前響應的日期時間
    
      keep-alive 設置保持連接的超時和最大存活時間
         timeout=5 max=99
    
      server - 服務器端的信息
    

    3)響應體

      服務器返回給客戶端的數(shù)據(jù)主體
    

五、擴展內(nèi)容

  1. 請求類型

    get/post/head/put/delete/options/trace
    
  2. 標準API - 標準的請求方式

    get - 獲取數(shù)據(jù)
    post - 修改數(shù)據(jù)
    put - 新增數(shù)據(jù)
    delete - 刪除數(shù)據(jù)
    
  3. 狀態(tài)碼

    1XX - 服務器的信息
    2XX - 表示請求成功
      200:請求成功
      201:成功創(chuàng)建連接
      202:接受請求            
    3XX - 表示重定向
      302:表示重定向
      304:表示服務端資源沒有變化,訪問緩存
        問題 - 這次請求沒有真正低訪問服務器端
      305:使用代理
    4XX - 客戶端錯誤
      400:錯誤的請求
      404:網(wǎng)頁找不到
      403:拒絕訪問
      405:請求類型不允許
    5XX - 服務端錯誤
      500:服務端錯誤
      502:路徑錯誤
      504:請求超時
      505:http版本不支持
    
  4. MIME類型 - 文件類型

    MIME類型是如何定義的
      //定義MIME類型
      <mime-mapping>
          //文件的擴展名
          <extension>jpg</extension>
          //對應的MIME類型
          <mime-type>image/jpeg</mime-type>
       </mime-mapping>
    
     常見的MIME類型
    
      html - text/html
      htm  - text/html
      css  - text/css
      js   - text/javascript
      json - application/json
      jpg  - image/jpeg
      text - text/plain
    
  5. 請求參數(shù)

    1)get請求類型

       將請求數(shù)據(jù) - url?key=value(瀏覽器地址)
    
       安全性低
    
       請求地址的長度是有限制的
    
       請求數(shù)據(jù)中包含中文的話,需要轉(zhuǎn)碼
    

    2)post請求類型

       瀏覽器地址欄url,不包含請求類型
    
       安全性相對比較高
    
       對請求數(shù)據(jù)的長度沒有要求
    
       請求數(shù)據(jù)中包含中文的話,可以不轉(zhuǎn)碼,對中文的處理相對比較好
    
  6. 控制HTTP頭部方法

    可以配置每個HTML文件的HTTP-EQUIV標簽控制緩存

    <meta http-equiv="Cache-Control" content="no-cache">
    

    在PHP頁面中控制響應頭

     header("Content-Type: image/jpeg");
    

六、緩存工作原理

  1. 客戶端可以自動保存已經(jīng)訪問過的文檔的副本,這些副本就成為“文檔緩存”

  2. 當客戶端再次發(fā)送針對同一個URL的請求時,如果本地有“已緩存的副本”,就可以直接從本地存儲設備而不是遠程服務器提取該文檔了。

  3. 數(shù)據(jù)緩存有下列優(yōu)點

    • 減少了冗余的數(shù)據(jù)傳輸,節(jié)省客戶端流量費用
    • 緩解服務器帶寬瓶頸的問題,服務器可以節(jié)省出更多的帶寬
    • 降低了對服務器的資源消耗和運行要求
    • 降低了由于遠距離而造成的加載延時

緩存邏輯

發(fā)送請求 ——> 判斷是否有緩存 ——> 有緩存,判斷緩存是否過期 ,如果過期不用 ——> 如果不過期,跟服務器進行驗證,判斷是否是最新數(shù)據(jù),如果不是,需要更新緩存,更新后從緩存獲取。

七、http基本優(yōu)化



網(wǎng)站性能優(yōu)化最主要的就是要減少HTTP請求及每次響應中內(nèi)容的長度。可以從連接過程中的下列方面加以考慮:

  1. 域名解析
盡可能減少域名解析次數(shù)——減少跨站外部資源的引用
  1. 創(chuàng)建連接
努力減少連接創(chuàng)建次數(shù)——使用Keep-Alive避免重復連接
  1. 發(fā)送請求
盡力減少請求次數(shù)——合理設置Expires時間、資源合并
  1. 等待響應
提高服務器端運行速度——提高數(shù)據(jù)運算及查詢速度
  1. 接收響應
盡可能減小響應數(shù)據(jù)長度——啟用壓縮

八、安全的HTTP協(xié)議

  1. HTTP協(xié)議本質(zhì)上屬于“明文傳輸”,可能被竊聽和篡改,政府、銀行等機密應用需要需要“安全版本的HTTP”:http協(xié)議默認端口80

  2. HTTPS協(xié)議將消息發(fā)送給TCP層之前,先交給了一個安全層(由SSL或TLS協(xié)議實現(xiàn)),安全層負責對消息進行加密和解密操作。https協(xié)議默認端口443

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容