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>
-
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/0.9:原型版本,功能簡陋
-
http工作模式:
-
一次完整的http事務:請求<–>響應
-
http請求報文:http request
http響應報文: http response
-
http請求報文:http request
-
一次完整的http請求處理過程:
(1) 建立或處理TCP連接:接收請求或拒絕請求;
(2) 接收請求:接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程;
(3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;
(4) 訪問資源:獲取請求報文中請求的資源;服務器訪問本地資源;
(5) 構建響應報文
(6) 發送響應報文
(7) 記錄日志:記錄訪問網站的信息; -
接收請求的模型:
并發訪問響應模型:當一個用戶進行完一次請求時,服務端使用已完成的套接字來進行維持之后的資源傳送;- 單進程I/O模型:啟動一個進程處理用戶請求;這意味著,一次只能處理一個請求,多個請求被串行響應;
- 多進程I/O結構:父進程接收請求,由父進程并行啟動多個子進程,每個子進程響應一個請求;
-
復用的I/O結構:一個進程響應n個請求;
- 多線程模式:一個進程生成n個線程,一個線程處理一個請求;
- 事件驅動(event-driven):使用事件回調機制,一個進程直接處理n個請求;
- 復用的多進程I/O結構:啟動多個(m)個進程,每個進程生成(n)個線程;響應的請求的數量:m*n
-
處理請求:分析請求報文的http請求報文首部
-
http協議:
http請求報文首部
http響應報文首部 -
請求報文首部的格式:
<method> <URL> <VERSION> HEADERS: (name: value) <request body>
-
http協議:
-
訪問資源:獲取請求報文中請求的資源
-
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
時間
數量 - 非保持連接(短連接)
-
保持連接(長連接):keep-alive
-
一次完整的http事務:請求<–>響應
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
-
GET:從服務器獲取一個資源;
-
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
-
首部的分類:
- 通用首部:既可以用在請求報文,也可用于響應報文;
- 請求首部
- 響應首部
- 實體首部
- 擴展首部
-
通用首部:
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:最后一次修改的時間
-
緩存相關:
-
Response Headers 響應首部
-
原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77496