一、網絡傳輸基礎
1. 套接字:兩類
1) Unix Sock: 一種本地文件系統
2) Socket: IP port (IP:port或IP.port)
2. 傳輸層協議:
1) 有鏈接的協議:TCP
2) 無連接的協議: UDP
3. 套接字類型:
1) TCP 套接字
2) UDP 套接字
3) raw 套接字
4. C/S(client / server)模型:包含以下兩部分
1) 通信子網:傳輸層協議
2) 應用層協議: 如:http, https, smtp, pop, imap, ftp, ldap
二、 HTTP協議介紹:
1. http: hypertext transport protocol (超文本傳輸協議,最早用來傳輸html文檔)
2. html: hypertext mark language (超文本標記語言)
3. Client: Browser
4. Server: http Server
5. html格式的文件和CSS(Cascading Style Sheet)樣式表
<html> <head> <title></title> </head> <body> <h1></h1> <p></p> <h2></h2> <p></p> </body> </html>
6. 關于動態頁面: 需要在服務器端或者客戶端運行腳本
7. 一個頁面中:可能會包含多個頁面對象,使用URL和URI標記
1) URI: Uniform Resource Indentifier
2) URL: Uniform Resource Locator
三、 關于HTTP協議與服務;
1. 協議版本
http/0.9: 1991, 僅用于傳輸html文檔
http/1.0: 支持多媒體數據的處理,使用keep-alive機制,有緩存功能
http/1.1: 擁有更多請求方法,更加精細的緩存控制,擁有持久連接
2. http協議特點:
是一種無狀態協議(stateless)協議 ,一次HTTP駛入結束后,連接即行斷開
加速方式:
并行請求
持久連接
四、 HTTP報文:
1. HTTP事務:一次請求以及與其對應的響應
2. HTTP方法:GET, PUT, HEAD, POST(遞交表單),DELETE
3. HTTP請求: request
HTTP請求報文:
報文格式:
<method><request-URL><version> <headers> ## 空兩行 <entity-body>
HTTP響應:response
HTTP響應報文:
報文格式:
<version><status><reason-phrase> <headers> ## 空兩行 <entity-body>
4. 各元素的含義:
<method>: 請求方法, 希望服務器端執行的動作,如GET、HEAD、POST等
<request-url>: 請求的資源,可以是相對路徑,也是完整的URL
<version>:協議版本,格式HTTP/<major>.<minor>,如http/1.0
<headers>:HTTP首部
<status>: 狀態碼
<reason-phrase>:原因短語,數字狀態碼易讀信息
<entity-body>: 主體部分
5. 首部
1) 通用首部:請求和響應都可以使用的首部
2) 請求首部
Client-IP: 客戶端IP, 此時是應用層,所以還需要指
Host: 請求的主機名和端口號,虛擬主機環境下用于不同的虛擬主機
Referer: 請求當前資源的上一級URL
User-Agent: 用戶代理,使用什么工具發出的請求
Accept請求首部: 用戶表明客戶自己更傾向于支持的能力
Accept: 指明服務器能發送的媒體類型
Accept-Charset: 支持使用的字符集
Accept-Encoding: 支持使用的編碼方式
Accept-Language: 支持使用的語言
條件請求首部:
Expect:
If-Modified-Since: 是否在指定時間以來修改過此資源
If-None-Match: 與擴展標簽相關
跟安全相關的請求首部:
Authorization: 客戶端提交給服務端認證數據,如賬號和密碼
Cookie/Cookie2: 客戶端發送給服務器端的身份標識
3) 響應首部
Age: 響應持續的時間
Server: 服務器向客戶端表明,服務器程序名稱版本
協商相關響應首部:
Accept-Ranges: 對當前資源來說,服務器所能夠接受的范圍類型
Vary: 首部列表,服務器會根據列表中內容挑選出最適合的版本發給客戶端
跟安全相關的響應首部;
Set-Cookie/Set-Cookie2: 服務器端在某客戶端第一次請求時,發給的的令牌
WWW-Authentication: 質詢,要求客戶端提供賬號和密碼
4) 實體首部:用于指定實體屬性
Location: 資源的新位置
Allow: 允許對此實體請求的方法 (回應options請求)
內容相關實體首部:
Content-Encoding: 編碼格式
Content-Language: 編碼語言
Content-Length: 長度
Content-Location: 資源重定向時候使用
Content-Range: 內容范圍
Content-Type: 類型
緩存相關內容首部:
ETag: 實體標簽
Expires: 過期期限
Last-Modifed: 上一次的修改時間
5) 擴展首部:非標準首部,可能是由程序開發者創建
6. HTTP請求方法:
GET: 請求獲取一個資源,需要服務器發送
HEAD: 跟GET 形似,但其不需要服務器發送資源,只傳回響應首部即可
POST: 支持HTML表單提交,表單中包含用戶填入的數據,這些數據會發送到服務器端,由服務器存儲至某個位置(例如發送處理程序)
PUT:與GET相反,向服務器寫入文檔, 例如發布系統
DELETE: 請求刪除URL指向的資源
OPTIONS: 探測服務器端對某自愿所支持的請求方法
TRACE:跟蹤請求要經過的防火墻,代理或者網關
7. HTTP狀態碼:
1xx: 信息性狀態碼
2xx:成功狀態碼
200: OK
201: Created
3xx:重定向狀態碼
301:Moved Permanently, 在響應報文中使用首部“Location: URL”指定資源現在所處的位置;
302:Found, 在響應報文中使用首部“Location: URL”指定臨時資源位置;
304:Not Modified, 條件式請求中使用;
4xx:客戶端類的錯誤
403:Forbidden,請求被服務器拒絕
404:Not Found,服務器無法找到請求的URL
405:Method Not Allowed,不允許使用此方法請求相應的URL
5xx:服務器類的錯誤
500:Internal Server Error,服務器內部錯誤;
502:Bad Gateway,代理服務器從上游收到了一條偽響應;
503:Service Unavailable,服務器此時無法提供服務,但將來可能可用;
五、一次web請求的基本過程
1. 建立連接
2. 接收請求
3. 處理請求
4. 訪問資源
5. 構建響應
6. 發送響應
7. 記錄日志
六、Web服務器輸入/輸出結構:
1. 單線程I/O結構
2. 多線程I/O結構
3. 復用的I/O結構:單個線程響應多個請求
4. 復用多線程I/O結構:多個線程,每個線程響應多個請求
原創文章,作者:以馬內利,如若轉載,請注明出處:http://www.www58058.com/3718
贊,tcp/ip數據流分析吊爆了