http

http

  • http:hyper text transfer protocol, 應用層協議, 80/tcp, 文本協議

  • html:hyper text mark language, 是一種編程語言,超文本標記語言;

    • html格式示例:

      <html>
        <head>
            <title>TITLE</title>
        </head>
        <body>
            <h1></h1>
                <p> blabla... <a > bla... </a> </p>
            <h2> </h2>
        </body>
      </html>
  • http協議版本:

    • http/0.9:原型版本,功能簡陋

      • 只允許客戶端從服務器下載文件;
    • http/1.0: cache, MIME, method,

      • MIME:Multipurpose Internet Mail Extesion,可實現把非文本信息編碼成文本格式的數據,由僅傳遞文本數據的協議傳到目的端之后再還原回來
      • method:GET, POST, HEAD,PUT, DELETE,TRACE, OPTIONS
    • http/1.1:增強了緩存功能;
    • http/2.0
  • http工作模式:

    • 一次完整的http事務:請求<–>響應

      • http請求報文:http request
        http響應報文: http response
    • 一次完整的http請求處理過程:
      (1) 建立或處理TCP連接:接收請求或拒絕請求;
      (2) 接收請求:接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程;
      (3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;
      (4) 訪問資源:獲取請求報文中請求的資源;服務器訪問本地資源;
      (5) 構建響應報文
      (6) 發送響應報文
      (7) 記錄日志:記錄訪問網站的信息;

    • 接收請求的模型:
      并發訪問響應模型:當一個用戶進行完一次請求時,服務端使用已完成的套接字來進行維持之后的資源傳送;

      1. 單進程I/O模型:啟動一個進程處理用戶請求;這意味著,一次只能處理一個請求,多個請求被串行響應;
      2. 多進程I/O結構:父進程接收請求,由父進程并行啟動多個子進程,每個子進程響應一個請求;
      3. 復用的I/O結構:一個進程響應n個請求;

        • 多線程模式:一個進程生成n個線程,一個線程處理一個請求;
        • 事件驅動(event-driven):使用事件回調機制,一個進程直接處理n個請求;
      4. 復用的多進程I/O結構:啟動多個(m)個進程,每個進程生成(n)個線程;響應的請求的數量:m*n
    • 處理請求:分析請求報文的http請求報文首部

      • http協議:
        http請求報文首部
        http響應報文首部
      • 請求報文首部的格式:

        <method> <URL> <VERSION>
        HEADERS: (name: value)
        <request body>
    • 訪問資源:獲取請求報文中請求的資源

      • web資源:web resource

        • 靜態資源(不對數據做任何處理,原樣不動的發給客戶端;): .jpg, .png, .gif, .html, txt, .js, .css, .mp3, .avi
        • 動態資源(用戶請求的資源,服務端通過執行程序做出處理,發送給客戶端的是程序的運行結果;因此,不同的用戶、不同的請求會得到不同的結果;): .php, .jsp

          注意:一個頁面中展示的資源可能有多個;每個資源都需要單獨請求;

        • 資源的標識機制:URL
          Uniform Resource Locator:用于描述服務器某特定資源的位置;

          例如:  http://www.sina.com.cn/index.html
          Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]
          
          文檔路徑映射:
          DocumentRoot /var/www/html/
      • web服務器,即存放了web資源的主機,負責向請求者提供對方請求的靜態資源,或動態資源運行生成的結果;這些資源通常應該放置于本地文件系統某路徑下;此路徑稱為DocRoot;

        http://www.magedu.com/images/logo.jpg
        
        /var/www/html/: images/logo.jgp
      • web服務器的資源路徑映射方式:
        (a) docroot
        (b) alias
        (c) 虛擬主機的docroot
        (d) 用戶家目錄的docroot
    • http請求處理中的連接模式:

      • 保持連接(長連接):keep-alive
        時間
        數量
      • 非保持連接(短連接)

URL:Unifrom Resource Locator

  • 基本語法:
    <scheme>://[<user>[:<password>]@]<host>:<port>/<path>[;<params>][?<query>][#<frag>]

    • URL方案:scheme
    • 服務器地址:ip:port
    • 資源路徑:/<path>

      http://www.magedu.com:80/bbs/index.php, 
      https://www.magedu.com:443/
    • params: 參數;不需要查詢數據庫
      http://www.magedu.com/bbs/hello;gender=f
    • query:查詢字符串;通常向動態資源傳遞數據庫查詢時的條件
      http://www.magedu.com/bbs/item.php?username=tom&title=abc
    • frag:片段;同一頁面的不同位置顯示
      https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Installation_Guide/index.html#ch-Boot-x86
  • 相對URL:同一個站點內的其他資源的引用;
    絕對URL:可以是同一個站點內的資源引用;也可以跨站點的資源引用;

http協議

  • http/0.9, http/1.0, http/1.1, http/2.0

  • http協議:stateless

    • 無狀態:服務器無法持續追蹤訪問者來源
    • 引用機制來追蹤同一用戶:cookie, session
      cookie:當客戶端第一次訪問時,服務端會發送一個數據cookie,此數據有作用范圍
  • http事務:
    請求:request
    響應:response

    • 報文語法格式:

      • request報文

        <method> <request-URL> <version>
        <HEADERS>
        
        <entity-body>
      • response報文

        <version> <status> <reason-phrase>
        <HEADERS>
        
        <entity-body>
      • method: 請求方法,標明客戶端希望服務器對資源執行的動作;
        GET、HEAD、POST、PUT(DAV)、DELETE、TRACE、OPTIONS
      • version:HTTP/<major>.<minor>
      • status:三位數字,如200,301, 302, 404, 502; 標記請求處理過程中發生的情況;
      • reason-phrase:對于status狀態碼所標記的狀態的簡要描述;
      • headers:每個請求或響應報文可包含任意個首部;每個首部都有首部名稱,后面跟一個冒號,而后跟上一個可選空格,接著是一個值;
      • entity-body:請求時附加的數據或響應時附加的數據;
  • 報文語法格式詳解:

    • method(方法): 客戶端告訴服務器端

      • GET:從服務器獲取一個資源;
        HEAD:只從服務器獲取文檔的響應首部;
        POST:向服務器發送要處理的數據;
        PUT:將請求的主體部分存儲在服務器上;
        DELETE:請求刪除服務器上指定的文檔;
        TRACE:追蹤請求到達服務器中間經過的代理服務器;
        OPTIONS:請求服務器返回對指定資源支持使用的請求方法;
        協議查看或分析的工具:tcpdump, tshark, wireshark
    • status(狀態碼): 服務器端告訴客戶端

      • 1xx:100-101, 信息提示
        2xx:200-206, 成功類
        3xx:300-305, 重定向
        4xx:400-415, 錯誤類信息,客戶端的錯誤
        5xx:500-505, 錯誤類信息,服務器端的錯誤

      • 常用的狀態碼:
        200: 成功,請求的所有數據通過響應報文的entity-body部分發送;OK
        301: 請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明了資源現在所處的新位置;這種屬于永久重定向;Moved Permanently
        302: 與301相似,但在響應報文中通過Location指明資源現在所處臨時新位置;這種屬于臨時重定向;Found
        304: 客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應此響應狀態碼通知客戶端;Not Modified
        401: 需要輸入賬號和密碼認證方能訪問資源;Unauthorized
        403: 請求被禁止;Forbidden
        404: 服務器無法找到客戶端請求的資源;Not Found
        500: 服務器內部錯誤;Internal Server Error
        502: 代理服務器從后端服務器收到了一條偽響應;Bad Gateway
        原因:代理服務器的上級給代理服務器發過來了一個錯誤信息,導致代理服務器無法回應客戶端;Bad Gateway
        正向代理:代理客戶端訪問互聯網;反向代理:代理服務器處理客戶端請求;

    • headers:
      格式:Name: Value

      • Response Headers 響應首部

        Cache-Control:public, max-age=600
        Connection:keep-alive
        Content-Type:image/png
        Date:Tue, 28 Apr 2015 01:43:54 GMT
        ETag:"5af34e-ce6-504ea605b2e40"
        Last-Modified:Wed, 08 Oct 2014 14:46:09 GMT
      • Request Headers 請求首部

        Accept:image/webp,*/*;q=0.8
        Accept-Encoding:gzip, deflate, sdch
        Accept-Language:zh-CN,zh;q=0.8
        Cache-Control:max-age=0
        Connection:keep-alive
        Cookie: ...
        Host:access.redhat.com
        If-Modified-Since:Wed, 08 Oct 2014 14:46:09 GMT
        If-None-Match:"5af34e-ce6-504ea605b2e40"
        Referer:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Installation_Guide/index.html
        User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
      • 首部的分類:

        1. 通用首部:既可以用在請求報文,也可用于響應報文;
        2. 請求首部
        3. 響應首部
        4. 實體首部
        5. 擴展首部
      • 通用首部:
        Date: 報文的創建時間;通常在請求報文中
        Connection:連接狀態,如keep-alive, close
        Via:顯示報文經過的中間節點
        Cache-Control:控制緩存
        Pragma

      • 請求首部:
        Accept:通知服務器自己可接受的媒體類型;
        Accept-Charset:接受的字符集
        Accept-Encoding:接受的編碼格式,如gzip,deflate,sdch
        Accept-Language:接受的語言,告訴服務器可接受的語言

        Client-IP: 客戶端IP
        Host: 請求的服務器名稱和端口號
        Referer:包含當前正在請求的資源的上一級資源;
        User-Agent:客戶端代理

        • 條件式請求首部:
          Expect:
          If-Modified-Since:自從指定的時間之后,請求的資源是否發生過修改;
          If-Unmodified-Since:與上述相反,是否沒發生過修改;
          If-None-Match:本地緩存中存儲的文檔的ETag標簽是否與服務器文檔的Etag不匹配;
          If-Match:與上述相反,

        • 安全請求首部:
          Authorization:向服務器發送認證信息,如賬號和密碼;
          Cookie: 客戶端向服務器發送cookie
          Cookie2:

        • 代理請求首部:
          Proxy-Authorization: 向代理服務器認證

      • 響應首部:

        • 信息性首部:
          Age:響應持續時長;
          Server:服務器程序軟件名稱和版本;安全起見,移除此項

        • 協商首部:某資源有多種表示方法時使用
          Accept-Ranges:服務器可接受的請求范圍類型
          Vary:服務器查看的其它首部列表;

        • 安全響應首部:
          Set-Cookie:向客戶端設置cookie;客戶端第一次訪問服務端時,服務端向客戶端發送一個cookie
          Set-Cookie2
          WWW-Authenticate:來自服務器的對客戶端的質詢認證表單

      • 實體首部:
        Allow: 列出對此實體可使用的請求方法
        Location:告訴客戶端真正的實體位于何處

        Content-Encoding:內容的編碼格式
        Content-Language:內容使用的語言
        Content-Length: 主體的長度
        Content-Location: 實體真正所處位置;
        Content-Type:主體的對象類型

        • 緩存相關:
          ETag:實體的擴展標簽;
          Expires:實體的過期時間;
          Last-Modified:最后一次修改的時間

原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77496

(0)
ss
上一篇 2017-06-04 21:31
下一篇 2017-06-04 21:33

相關推薦

  • vim shell 練習作業題

    vim練習題 1. 復制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符   :%s/^[[:blank:]]\+//g 【注意要把/etc/profile復制到/tmp下,cp  /etc/profile  /tmp(盡量不要修改原文件)】 2. 復制/etc/rc.d…

    2017-08-07
  • 06文本工具簡單介紹

    在Linux系統中,一個核心理念就是:一切皆文件。正確的對系統中文本的編輯配置與管理是Linux系統得以穩定運行的一個重要大前提。 因此Linux系統中的文件與管理特別重要,下面簡單說一下在對文件處理過程中經常用到的一些命令工具。 文本查看命令:cat,tac,rev,more,less cat [option]…[file]… -E…

    Linux干貨 2016-10-31
  • 條件判斷、文件查找與壓縮

    一、條件判斷 1.條件選擇if語句   選擇執行:   注意:if語句可嵌套 (1).單分支if 判斷條件:then   條件為真的分支代碼fi (2).雙分支if 判斷條件; then   條件為真的分支代碼else   條件為假的分支代碼fi (3).多分…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班21期+第9周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; [root@localhost test]# ./exercise3.sh  be eable to login us…

    Linux干貨 2016-08-05
  • varnish學習總結

    什么是web cache?   Web緩存是指一個Web資源(如html頁面,圖片,js,數據等)存在與Web服務器和客戶端(瀏覽器)直接的副本。緩存會根據進來的請求保存輸出內容的副本;當下一個請求到來的時候,如果是相同的URL,緩存會根據緩存機制決定是直接使用副本響應訪問請求還是向源服務器再次發送請求。       …

    Linux干貨 2015-07-15
  • 進程管理工具:ps,top,htop,dstat

    進程列表查看,系統資源使用情況查看,比如CPU占用情況,內存使用情況,網絡IO,硬盤IO等等。本文介紹的幾款工具幫您實現。 進程是指運行中的程序的一個副本,進程的有關信息映射在/proc/#下,ps等工具通過加工/proc/下文件而顯示出進程列表。 linux內核屬于搶占式多任務式,內核將CPU處理時間按時間片分配給各個進程,這里有一個優先級的問題,優先級越…

    Linux干貨 2016-09-22
欧美性久久久久