4。1 例項總圖

在客戶端執行wget客戶端程式,在伺服器執行squid代理伺服器程式。客戶端透過代理伺服器的中專,獲得Internet上主機

http://www。

baidu。com

的首頁文件。

【閱讀】《Linux高效能伺服器程式設計》——第四章:TCPIP案例通訊,訪問Internet上的Web伺服器

4。2 部署代理伺服器

4。2。1 HTTP代理伺服器的工作原理

在HTTP通訊鏈上,客戶端和目標伺服器之間通常是存在某些中專代理伺服器,其提供對目標資源的中專訪問。

一個HTTP請求可能被多個地阿里伺服器轉發,後面的伺服器稱為前面伺服器的上游伺服器。

代理伺服器分為

正向代理伺服器

、反向代理伺服器和透明代理伺服器。

正向代理伺服器要求客戶端自己設定代理伺服器的地址,客戶的每次請求都將直接傳送到該代理伺服器。

反向代理被設定在伺服器端,指使用代理伺服器來接收Internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從內部伺服器上得到的結果返回給客戶端。

透明代理

只能設定在閘道器上,可以看作正向代理的一種特殊情況。

代理服務通常還提供快取目標資源的功能,以便於使用者下次訪問同一資源時速度增快。

【閱讀】《Linux高效能伺服器程式設計》——第四章:TCPIP案例通訊,訪問Internet上的Web伺服器

4。2。2 部署squ

id代理伺服器

修改squid伺服器的配置檔案 /etc/squid3/squid。conf:

acl localnet src 192。168。1。0/24

http_access allow localnet

4。3 使用tcpdump抓取傳輸資料包

將資料包按照邏輯劃分: - 代理伺服器訪問DNS伺服器以查詢

域名

對應的IP地址; - 代理伺服器查詢路由去MAC地址的ARP請求和應答; - wget客戶都安和代理伺服器之間的HTTP通訊; - 代理伺服器和Web伺服器之間的HTTP通訊。

4。4 訪問DNS伺服器

【閱讀】《Linux高效能伺服器程式設計》——第四章:TCPIP案例通訊,訪問Internet上的Web伺服器

squid程式透過讀取 /etc/resolv。conf 檔案獲得DNS伺服器的IP地址,然後將控制權轉交給核心UDP模組;

UDP模組將DNS查詢報文分裝成UDP資料報,將源埠號和目標埠號加入UDP資料報頭部,呼叫IP服務;

IP模組將UDP資料報封裝成IP資料報,將源端IP地址和DNS伺服器的IP地址加入到IP資料報頭部;

IP模組查詢

路由表

以確定如何傳送IP資料報,透過路由器轉發;

乙太網驅動程式將IP資料報封裝成乙太網幀傳送給路由器。

4。5 本地名稱查詢

Linux將目標主機名及其對應的IP地址儲存在 /etc/hosts 配置檔案中。

4。6 HTTP通訊

【閱讀】《Linux高效能伺服器程式設計》——第四章:TCPIP案例通訊,訪問Internet上的Web伺服器

4。6。1 HTTP請求

GET

http://www。baidu。com/index。html

HTTP

/

1。0

User-Agent

Wget/1。12 (linux-gnu)

Host

www。baidu。com

Connection

close

HTTP請求方法

| 請求方法 | 含 義 |

| :——: | :——: |

| GET | 申請獲取資源,且不對伺服器產生任何其他影響 |

| HEAD | 類似GET方法,不過進要求伺服器返回頭部資訊,不需要傳輸任何實際內容 |

| POST |

客戶端

向伺服器提交資料的方法,此方法可能會影響伺服器;伺服器可能會根據收到的資料動態建立新的資源,可能會更新原有的資源 |

| PUT | 上傳某個資源 |

| DELETE | 刪除某個資源 |

| TRACE | 要求目標伺服器返回原始HTTP請求內容,可用來檢視

中間伺服器

對HTTP請求的影響 |

| OPTIONS | 檢視伺服器對某個特定URL都支援那些請求方法 |

| CONNECT | 用於某些代理伺服器,將請求的連線轉化為一個安全隧道 |

| PATCH | 對某個資源做部分修改 |

在上述方法中,HEAD、GET、OPTIONS和TARCE為安全方法,其不對伺服器產生影響。POST、PUT、DELETE和PATCH對伺服器產生影響;

GET、HEAD、OPTIONS、TRACE、PUT和DELETE等請求方法被認為是等冪的,即多次連續、重複的請求和只發送一次該請求具有完全相同的效果。但POST方法多次傳送同樣的請求會影響伺服器上的資源;

Linux上的命令HEAD、GET和POST和HTTP協議中同名請求方法相同,適合用來快速測試Web伺服器;

4。6。1 HTTP應答

HTTP

/

1。0

200

OK

Server

BES/1。0

Content-Length

8024

Content-Type

text/html;charset =gbk

Set-Cookie

BAIDUID=A5B6C72D68CF639CE8896FD79A03FBDB; expires=Wed,04 -Jul-42 00:10:47 GMT; path=/; domain=。baidu。com

Via

1。0 localhost (squid/3。0 STABLE18)

第一行是狀態行,包括HTTP協議的版本號、狀態碼和狀態資訊;

| 狀態型別 | 狀態碼和狀態資訊| 含 義 |

| :——: | :——: | :——: |

| 1xx資訊 | 100 Continue | 伺服器接收到客戶端的請求行和頭部資訊,告訴客戶端繼續傳送資料部分。客戶端需要先發送100-continue頭部欄位告訴伺服器自己還有資料要傳送 |

| 2xx成功 | 200 OK | 請求成功 |

| 3xx重定向 | 301 Moved Permanently | 資源被轉移,請求將被重定向 |

| 3xx重定向 | 302 Found | 通知客戶端資源能在其他地方找到,需要使用GET方法獲得 |

| 3xx重定向 | 304 Not Modified | 被申請的資源沒有更新,和之前獲得的相同 |

| 3xx重定向 | 307 Temporary Redirect | 通知客戶端資源可以在其他地方找到,可以使用原始請求相同的請求方法來訪問目標資源 |

| 4xx客戶端錯誤 | 400 Bad Request | 通知客戶請求錯誤 |

| 4xx客戶端錯誤 | 401 Unauthorized | 請求需要認證資訊 |

| 4xx客戶端錯誤 | 403 Forbidden | 訪問本伺服器禁止 |

| 4xx客戶端錯誤 | 404 Not Found | 資源沒找到 |

| 4xx客戶端錯誤 | 407 Proxy Authentication Required | 客戶端需要先獲得代理伺服器的認證 |

| 5xx伺服器錯誤 | 500 Internal Server Error |

通用伺服器錯誤

|

| 5xx伺服器錯誤 | 503 Server Unavailable | 暫時無法訪問伺服器 |

2~7行是HTTP應答頭部欄位;

(注:表格內容由於是md文件,所以顯示有問題~可自行復制到Typora等軟體上檢視)