1. 程式人生 > >Linux進階:httpd服務(一)

Linux進階:httpd服務(一)

Socket套接字:IP和埠的組合

HTTP

  • http:Hyper text transfer protocol 超文字(包含連線的檔案,點選地址會跳轉到令一個資源)傳輸協議
    埠:80/TCP 主要傳輸html編碼的資料
    http是應用層協議,基於傳輸層的tcp協議傳輸
  • html:Hyper text markup language 超文字標記語言,程式語言
    html示例
    <html>
     <head>
          <title>html語言</title>
     </head>
     </body>
          <img src="http://www.dushan.com/bixin/2018101017/dadda.png">
          <h1>歡迎</h1>
          <p><a href=http://www.dushan.com>達達</a>哈哈</p>
     </body>
    </html>
    
  • CSS:Cascading Style Sheet 層疊樣式表
  • js :JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的指令碼語言,用來給HTML網頁增加動態功能。

static:客戶端請求什麼,服務端傳送什麼
dynamic:客戶端請求什麼,服務端程式碼執行一遍,把傳送結果

瞭解:RESTful API

HTTP協議介紹

  • http/0.9 1991原型版本
    只有一個命令GET,GET /index.html ,伺服器只能迴應HTML格式字串,不能迴應別的格式

  • http/1.0 1996年5月 支援cache,MIME,method
    1、每個TCP連線只能傳送一個請求,傳送資料完畢,連線關閉,再發送其他資源,重新建立新連結。
    2、引用了POST命令和HEAD命令
    3、頭資訊是ASCII碼,後面資料可為任何格式,伺服器迴應是會告訴客戶端,資料是什麼格式,即content-type欄位作用,這些資料型別總稱為MIME多用途網際網路郵件擴充套件,每個值包括一級型別和二級型別,預定義的型別,也可自定義型別,常見的major/minor;text/xml,text/html;images/jpg,images/png。可傳輸圖片音訊多媒體資訊。
    例:資料+元資料(表示型別)
    123數值表示 7位二進位制可以表示
    123字串表示 3個8位需24位表示

  • http/1.1 1997年1月
    1、引入持久連線,不用宣告connection:keep-alive,對於同一域名,大多數瀏覽器運輸同時建立6個持久連線。
    2、引入管道機制,同一個TCP連線裡,客戶端可以同時傳送多個請求。
    3、新增方法PUT、PATCH、OPTIONS、DELETE
    4、同一個TCP連線裡,所有的資料通訊是按次序進行的。伺服器只能順序處理迴應,前面的迴應慢,會有許多請求排隊,造成"隊頭堵塞"(Head-of-line blocking)
    5、為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連線。網頁優化技巧,如合併指令碼和樣式表、將圖片嵌入CSS程式碼、域名分片(domain sharding)等
    6、HTTP 協議不帶有狀態,每次請求都必須附上所有資訊。請求的很多欄位都是重複的,浪費頻寬,影響速度

  • http/2.0:2015年
    Spdy:2009年,谷歌研發,解決HTTP/1.1 效率不高問題
    1、頭資訊和資料體都是二進位制,稱為頭資訊幀和資料幀
    複用TCP連線,在一個連線裡,客戶端和瀏覽器都可以同時傳送多個請求或迴應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通訊稱為多工(Multiplexing)
    2、引入頭資訊壓縮機制(header compression),頭資訊使用gzip或compress壓縮後再發送;客戶端和伺服器同時維護一張頭資訊表,所有欄位都會存入這個表,生成一個索引號,不傳送同樣欄位,只發送索引號,提高速度
    3、HTTP/2 允許伺服器未經請求,主動向客戶端傳送資源,即伺服器推送(server push)

HTTP工作機制

  • 工作機制:
    http請求:http request
    http響應:http response
    一次http事務:請求<-->響應

  • Web資源:web resource(Web Resource-URI-URL每個資源都需要單獨請求)
    一個網頁由多個資源構成,開啟一個頁面,會有多個資源展示出來,但是每個資源都要單獨請求。因此,一個“Web 頁面”通常並不是單個資源,而是一組資源的集合
    1、靜態檔案:無需服務端做出額外處理
    檔案字尾:.html, .txt, .jpg, .js, .css, .mp3, .avi
    2、動態檔案:服務端執行程式,返回執行的結果
    檔案字尾:.php, .jsp,.asp

  • 提高HTTP連線效能
    1、並行連線:通過多條TCP連線發起併發的HTTP請求 1.1支援
    2、持久連線:keep-alive,長連線,重用TCP連線,以消除連線和關閉的時延,以事務個數和時間來決定是否關閉連線 1.1支援
    3、管道化連線:通過共享TCP連線發起併發的HTTP請求 2.0支援
    4、複用的連線:交替傳送請求和響應報文(實驗階段) 2.0支援

URI

  • URI: Uniform Resource Identifier 統一資源標識,分為URL和URN
    1、URN: Uniform Resource Naming,統一資源命名
    示例:P2P下載使用的磁力連結是URN的一種實現
    magnet:?xt=urn:btih:660557A6890EF888666
    2、URL: Uniform ResorceLocator,統一資源定位符,用於描述某伺服器某特定資源位置
    3、兩者區別:URN如同一個人的名稱,而URL代表一個人的住址。換言之,URN定義某事物的身份,而URL提供查詢該事物的方法。URN僅用於命名,而不指定地址

  • URL組成

    <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
    

    1、scheme:方案,訪問伺服器以獲取資源時要使用哪種協議

    2、user:使用者,某些方案訪問資源時需要的使用者名稱

    3、password:密碼,使用者對應的密碼,中間用:分隔

    4、Host:主機,資源宿主伺服器的主機名或IP地址

    5、port:埠,資源宿主伺服器正在監聽的埠號,很多方案有預設埠號

    6、path:路徑,伺服器資源的本地名,由一個/將其與前面的URL元件分隔 (docroot)

    7、params:引數,指定輸入的引數,引數為名/值對,多個引數,用;分隔

    8、query:查詢,傳遞引數給程式,如資料庫,用?分隔,多個查詢用&分隔

    9、frag:片段,一小片或一部分資源的名字,此元件在客戶端使用,用#分隔

網站訪問量

  • IP(獨立IP):即Internet Protocol,指獨立IP數。一天內來自相同客戶機IP地址只計算一次,記錄遠端客戶機IP地址的計算機訪問網站的次數,是衡量網站流量的重要指標

  • PV(訪問量):即Page View, 頁面瀏覽量或點選量,使用者每次重新整理即被計算一次,PV反映的是瀏覽某網站的頁面數,PV與來訪者的數量成正比,PV並不是頁面的來訪者數量,而是網站被訪問的頁面數量

  • UV(獨立訪客):即Unique Visitor,訪問網站的一臺電腦為一個訪客。一天內相同的客戶端只被計算一次。可以理解成訪問某網站的電腦的數量。網站判斷來訪電腦的身份是通過來訪電腦的cookies實現的。如果更換了IP後但不清除cookies,再訪問相同網站,該網站的統計中UV數是不變的

  • 網站統計:http://www.alexa.cn/rank/

  • QPS:request per second,每秒請求數

  • PV,QPS,併發連線數換算公式

    1、QPS= PV* 頁⾯衍⽣連線次數/ 統計時間(86400)
    2、併發連線數=QPS* http平均響應時間
    3、峰值時間:每天80%的訪問集中在20%的時間裡,這20%時間為峰值時間
    4、峰值時間每秒請求數(QPS)=( 總PV數*頁面衍生連線次數)*80% ) / ( 每天秒數* 20% )
    

一次完整的HTTP請求處理過程

1、建立連線
接收或拒絕連線請求

2、接收請求
接收客戶端請求報文中對某資源的一次請求的過程
Web訪問響應模型(Web I/O)

單程序I/O模型:啟動一個程序處理使用者請求,而且一次只處理一個,多個請求被序列響應
多程序I/O模型:並行啟動多個程序,每個程序響應一個連線請求
複用I/O結構:啟動一個程序,同時響應N個連線請求
實現方法:多執行緒模型和事件驅動
多執行緒模型:一個程序生成N個執行緒,每執行緒響應一個連線請求
事件驅動:一個程序處理N個請求
複用的多程序I/O模型:啟動M個程序,每個程序響應N個連線請求,同時接收M*N個請求

3、處理請求
伺服器對請求報文進行解析,並獲取請求的資源及請求方法等相關資訊,根據方法,資源,首部和可選的主體部分對請求進行處理
元資料:請求報文首部

請求報文分三部分
第一部分star line: 客戶端用什麼方式(GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS)請求哪個資源,並且http是哪個版本
第二部分HEADERS:格式name:value
第三部分body:

4、訪問資源
伺服器獲取請求報文中請求的資源web伺服器,即存放了web資源的伺服器,負責向請求者提供對方請求的靜態資源,或動態執行後生成的資源
資源放置於本地檔案系統特定的路徑:DocRoot
DocRoot>/var/www/html
/var/www/html/images/logo.jpg

web伺服器資源路徑對映方式:
(a) docroot
(b) alias
(c) 虛擬主機docroot
(d) 使用者家目錄docroot

5、構建響應報文:
一旦Web伺服器識別除了資源,就執行請求方法中描述的動作,並返回響應報文。響應報文中包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體

1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:
描述了響應主體MIME型別的Content-Type首部
描述了響應主體長度的Content-Length
實際報文的主體內容
2)URL重定向:web服務構建的響應並非客戶端請求的資源,而是資源另外一個訪問路徑
永久重定向:http://www.360buy.com
臨時重定向:http://www.taobao.com
3)MIME型別:
Web伺服器要負責確定響應主體的MIME型別。多種配置伺服器的方法可將MIME型別與資源管理起來
魔法分類:Apache web伺服器可以掃描每個資源的內容,並將其與一個已知模式表(被稱為魔法檔案)進行匹配,以決定每個檔案的MIME型別。這樣做可能比較慢,但很方便,尤其是檔案沒有標準副檔名時
顯式分類:可以對Web伺服器進行配置,使其不考慮檔案的副檔名或內容,強制特定檔案或目錄內容擁有某個MIME型別
型別協商:有些Web伺服器經過配置,可以以多種文件格式來儲存資源。在這種情況下,可以配置Web伺服器,使其可以通過與使用者的協商來決定使用哪種格式(及相關的MIME型別)"最好"

6、傳送響應報文
Web伺服器通過連線傳送資料時也會面臨與接收資料一樣的問題。伺服器可能有很多條到各個客戶端的連線,有些是空閒的,有些在向伺服器傳送資料,還有一些在向客戶端回送響應資料。伺服器要記錄連線的狀態,還要特別注意對持久連線的處理。對非持久連線而言,伺服器應該在傳送了整條報文之後,關閉自己這一端的連線。對持久連線來說,連線可能仍保持開啟狀態,在這種情況下,伺服器要正確地計算Content-Length首部,不然客戶端就無法知道響應什麼時候結束了

7、記錄日誌
最後,當事務結束時,Web伺服器會在日誌檔案中新增一個條目,來描述已執行的事務

HTTP伺服器應用

  • http伺服器程式
    1、httpd apache
    2、nginx 現也已支援lua
    3、lighttpd 最早支援lua指令碼動態引擎配置

  • 應用程式伺服器
    1、IIS .asp
    2、tomcat .jsp
    3、jetty 開源的servlet容器,基於Java的web容器
    4、Resin CAUCHO公司,支援servlets和jsp的引擎
    5、webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)

  • 市場佔有率統計 www.netcraft.com

Httpd介紹

  • httpd (d:doemon守護程序)
    20世紀90年代初,國家超級計算機應用中心NCSA開發
    1995年開源社群釋出apache(後解散由社群等人維護 a patchy server,有bug就打補丁,所以叫充滿補丁的服務)
    ASF: apache software foundation apache軟體基金會
    FSF:Free Software Foundation 自由軟體基金會

  • 特性:
    1、高度模組化:core + modules
    2、DSO: Dynamic Shared Object 動態加/解除安裝
    3、MPM:multi-processing module多路處理模組

MPM工作模式

1、prefork:多程序I/O模型,每個程序響應一個請求,預設模型
一個主程序:生成和回收n個子程序,建立套接字,不響應請求
多個子程序:工作work程序,每個子程序處理一個請求;系統初始時,預先生成多個空閒程序,等待請求,最大不超過1024個

2、worker:複用的多程序I/O模型,多程序多執行緒,IIS使用此模型
一個主程序:生成m個子程序,每個子程序負責生個n個執行緒,每個執行緒響應一個請求,併發響應請求:m*n

3、event:事件驅動模型(worker模型的變種)
一個主程序:生成m個子程序,每個程序直接響應n個請求,併發響應請求:m*n,有專門的執行緒來管理這些keep-alive型別的執行緒,當有真實請求時,將請求傳遞給服務執行緒,執行完畢後,又允許釋放。這樣增強了高併發場景下的請求處理能力

httpd功能特性

1、虛擬主機 (每一個站點靠一個主機來服務)
支援三種類型主機:
IP(不同的IP服務於不同的站點)
Port(不同的埠服務於不同的站點)
FQDN(不同的主機名來對映不同的站點)

2、CGI:Common Gateway Interface,通用閘道器介面

3、反向代理

4、負載均衡

5、路徑別名

6、豐富的使用者認證機制
basic 要素
digest 摘要

7、支援第三方模組