天天看點

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

    Linux:httpd服務(一)

    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:片段,一小片或一部分資源的名字,此元件在用戶端使用,用#分隔

    Linux:httpd服務(一)

網站通路量

  • 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、支援第三方子產品