超連接:可以在文檔之間跳轉的文本php
早起的Web:僅僅是可以實如今文檔之間跳轉的一種協議
http/0.9:僅支持純文本(超連接) 由純ASCII值組成的
HTML:HyperText Mark Language 超文本標記語言 用來編寫超文本的語言
<h2>Title</h2>
<h2>...</h2>HTML的一組標籤,用來定義裏面的字符的顯示屬性,這組標籤是HTML語言內置的,事先規定好了的,應該將這些字體解析成什麼格式的內容html
Browser:客戶端用戶經過瀏覽器能夠將web服務器提供的超文本進行顯示,其中那些標籤是不會顯示出來的linux
可是若是有兩臺主機上提供的文本的名稱是同樣的,用戶該如何區別這兩個文件呢?nginx
URI:Uniform Resource Indentifier 統一資源標識符 能夠在全局範圍內惟一引用某一個獨立的資源的命名方式web
URL:Uniform Resource Location 統一資源定位符 是統一資源標識符的一個子對象, 用於描述在互聯網上互聯網資源的統一表示格式apache
protocol://HOST:port/path/to/file
協議://主機:端口/路徑/文件名
http://www.qq.com/download/linux.tar.gz編程
web資源:可以經過統一資源定位符惟一的標記,可以讓客戶端訪問的文件
多個資源極可能被整合爲一個html文檔瀏覽器
web對象:跟web資源是同一個概念緩存
HTTP方法(資源訪問的方法):
GET:從服務器獲取資源到本地而且經過瀏覽器進行顯示(早起的HTTP版本例:http0.9只有這一種方法)
PUT:從遠程服務器上直接獲取一個文件到本地
POST:經過表單提交數據到服務器上去的
DELETE:在遠程服務器上刪除一個文件的
HEAD:只返回首部,不返回主體
TRACE
OPTIONS
CONNECTION服務器
MIME:Multipurpose Internet Mail Extension 多用途互聯網郵件擴展
SMTP:Simple Mail Transmission Protocol 只能傳輸純文本的
MIME:能夠將非文本數據在傳輸前可以從新編碼爲文本格式再進行傳輸,而且在接收方能夠用相反的方式將其從新還原爲原來的格式,還可以調用相應的程序來打開此文件
Base64:一種文本編碼格式
動態效果
flash
Java,Applet,JRE
動態網頁:在服務器端存儲的文檔非HTML格式,而是一種編程語言開發的腳本,腳本在接受來自客戶端的參數以後在服務器執行一次,執行完成以後會生成HTML格式的文檔,把生成的文檔發送給客戶端
注:web服務器不會幫你去執行這些腳本,而是經過調用其餘工具來執行。web服務器並不負責處理動態內容
例:web:index.php
web --> procotol --> php(運行index.php)
靜態頁面響應流程:
用戶發來的請求必定是經過網絡協議發送到服務端的,而協議是工做在操做系統的內核中的。當請求到達內核,內核空間通過解析後,發現請求範文的是80端口的套接字,內核就會將這個用戶請求經過套接字轉給用戶空間的web服務器。web服務器發現用戶訪問的是一個網頁文件,服務器端就會陷入內核,從新轉換成內核模式,到磁盤上將這個文件加載過來。當內核找到這個文件後,返回給用戶空間,web服務器發現文件取出來了,就經過套接字再次回到內核空間,經過網絡TCP/IP協議棧返回給客戶端
動態頁面響應流程:
用戶發來的請求必定是經過網絡協議發送到服務端的,而協議是工做在操做系統的內核中的。當請求到達內核,內核空間通過解析後,發現請求範文的是80端口的套接字,內核就會將這個用戶請求經過套接字轉給用戶空間的web服務器。web服務器發現用戶訪問的是一個動態頁面,web服務器就會經過其餘協議啓動一個解釋器的進程,而後解釋器陷入內核,從新轉換成內核模式,到磁盤上去將這個文件加載到解釋器中,而後執行一次,執行以後將執行結果返回給web服務器,並關閉解釋器進程,而後web服務器將這個結果經過套接字再次回到內核空間,經過網絡TCP/IP協議棧返回給客戶端。
一個動態網頁包含了靜態內容(不須要改變的,不須要執行的,例如:圖片)和動態內容(須要執行再返回給用戶)
用戶具體要訪問的哪一個資源的信息記錄在HTTP協議的首部中
HTTP報文:分爲請求報文和響應報文
請求報文語法:
<method> <request-URL> <version>
資源獲取方法 請求的資源是什麼 對應請求資源協議的版本號
<headers>
http協議首部
<entity-body>
報文主體
響應報文語法:
<version> <status> <reason-phrase>
對應請求資源協議的版本號 狀態碼 具體說明status的意義
<headers>
響應報文首部
<entity-body>
報文主體
狀態碼有五類:
1xx:純信息
2xx:「成功」類的信息(200-請求資源正常)
3xx:「重定向」類的信息,資源存在,可是資源已經被挪走了,須要從新發起請求,並給你請求的地址(301-永久重定向、302-臨時重定向、304-沒有發生任何改變,直接使用緩存內容)
4xx:客戶端錯誤類的信息(404-請求了一個不存在的文件)
5xx:服務器端錯誤類的信息
例如:
請求報文
GET / HTTP/1.1
Host:www.qq.com
Connection:keep-alive
響應報文
HTTP/1.1 200 OK
X-Powered-By:PHP/5.2.17
Vary:Accept-Encoding,Cookie,User-Agent 額外標記的變化類的內容
Cache-Control:max-age=3,must-revalidate
Content-Encoding:gzip 內容編碼機制
Content-Length:6931 內容長度
上面兩個報文的第一行一般稱爲報文「起始行(start line)」,後面的標籤格式的內容稱做首部域(Header field),每一個首部域都由名稱(name)和值(value)組成,中間用逗號分隔,另外,響應報文一般還有一個稱做Body的信息主體,即響應給用戶端的內容
Web服務器的主要操做:
一、創建鏈接——接受或拒絕客戶端鏈接請求
二、接收請求——經過網絡讀取HTTP請求報文
三、處理請求——解析請求報文並作出響應的動做
四、訪問資源——訪問請求報文中相關的資源
五、構建響應——使用正確的首部生成HTTP響應報文
六、發送相應——向客戶端發送生成的響應報文
七、記錄日誌——將已經完成的HTTP事務記錄進日誌文件
用戶請求的一個頁面中可能存在着多個web資源,而這每一個資源都是要單獨的去請求的,而且HTTP協議是基於TCP協議工做的,每次創建鏈接都須要三次握手,斷開鏈接時都須要四次斷開,極其的浪費時間和帶寬資源
所以,在HTTP/1.1中:
一、加強了緩存的功能
二、引入長鏈接——客戶端和服務端在獲取一個資源後不是直接斷開,而是等待繼續獲取其餘的資源
Web服務器處理併發鏈接請求的架構方式
1、單線程web服務器(Single-threaded web servers)
此種架構方式中,web服務器一次處理一個請求,結束後讀取並處理下一個請求。在某請求處理過程當中,其它全部的請求將被忽略,所以,在併發請求較多的場景中將會出現嚴重的必能問題。
2、多進程/多線程web服務器
此種架構方式中,web服務器生成多個進程或線程並行處理多個用戶請求,進程或線程能夠按需或事先生成。有的web服務器應用程序爲每一個用戶請求生成一個單獨的進程或線程來進行響應,不過,一旦併發請求數量達到成千上萬時,多個同時運行的進程或線程將會消耗大量的系統資源。
3、I/O多路複用web服務器
爲了可以支持更多的併發用戶請求,愈來愈多的web服務器正在採用多種複用的架構——同步監控全部的鏈接請求的活動狀態,當一個鏈接的狀態發生改變時(如數據準備完畢或發生某錯誤),將爲其執行一系列特定操做;在操做完成後,此鏈接將從新變回暫時的穩定態並返回至打開的鏈接列表中,直到下一次的狀態改變。因爲其多路複用的特性,進程或線程不會被空閒的鏈接所佔用,於是能夠提供高效的工做模式。
4、多路複用多線程web服務器
將多進程和多路複用的功能結合起來造成的web服務器架構,其避免了讓一個進程服務於過多的用戶請求,並能充分利用多CPU主機所提供的計算能力。
代理
Web代理服務器工做於web客戶端和web服務器之間,它負責接收來自於客戶端的http請求,並將其轉發至對應的服務;然後接收來自於服務端的響應,並將響應報文回送至客戶端。
常見的客戶端瀏覽器和服務器端web服務器
客戶端瀏覽器:
一、IE
二、Firefox
三、Chrome
四、Opera
五、Safari
web服務器(www.netcraft.com):
一、Apache
二、IIS
三、nginx
四、lighttpd(德國)
五、thttpd(嵌入式平臺)
應用程序服務器:不只可以解析靜態內容,還可以處理某種特定格式的動態內容 一、IIS 二、Tomcat(apache,Java的應用程序服務器,開源的) 三、Websphere(IBM,專門用來解析Java企業級應用程序的,商業產品) 四、Weblogic(Bea->Oracle,JSP的應用服務器,商業產品) 五、JBoss(RedHat)