1. 程式人生 > >Linux進階:httpd服務(三)

Linux進階:httpd服務(三)

http事務:

請求:request 響應:response

request報文
<method> <request-URL> <version>
<headers>

<entity-body>

response報文
<version> <status> <reason-phrase>
<headers>

<entity-body>

method: 請求方法,標明客戶端希望伺服器對資源執行的動作
GET、HEAD、POST
version:
HTTP/<major>.<minor>
status:
三位數字,如200,301, 302, 404, 502; 標記請求處理過程中發生的情況;
reason-phrase:
狀態碼所標記的狀態的簡要描述;
headers:
每個請求或響應報文可包含任意個首部;每個首部都有首部名稱,後面跟一個冒號,而後跟上一個可選空格,接著是一個值;
entity-body:請求時附加的資料或響應時附加的資料;

method(方法):
GET:從伺服器獲取一個資源;
HEAD:只從伺服器獲取文件的響應首部;
POST:向伺服器傳送要處理的資料;
PUT:將請求的主體部分儲存在伺服器上;
DELETE:請求刪除伺服器上指定的文件;
TRACE:追蹤請求到達伺服器中間經過的代理伺服器;
OPTIONS:請求伺服器返回對指定資源支援使用的請求方法;

協議檢視或分析的工具:tcpdump, tshark, wireshark

一、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

二、headers:

1、格式: Name: Value 2、迴應報文:

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

3、請求報文:

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
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

首部的分類:

1、通用首部:

Date: 報文的建立時間
Connection:連線狀態,如keep-alive, close
Via:顯示報文經過的中間節點
Cache-Control:控制快取
Pragma:

2、請求首部:

Accept:通過伺服器自己可接受的媒體型別;
Accept-Charset:
Accept-Encoding:接受編碼格式,如gzip
Accept-Language:接受的語言

Client-IP: 
Host: 請求的伺服器名稱和埠號
Referer:包含當前正在請求的資源的上一級資源;
User-Agent:客戶端代理

2.1、條件式請求首部:

Expect:
If-Modified-Since:自從指定的時間之後,請求的資源是否發生過修改;
If-Unmodified-Since:
If-None-Match:本地快取中儲存的文件的ETag標籤是否與伺服器文件的Etag不匹配;
If-Match:

2.2、安全請求首部:

Authorization:向伺服器傳送認證資訊,如賬號和密碼;
Cookie: 客戶端向伺服器傳送cookie
Cookie2:

2.3、代理請求首部:

Proxy-Authorization: 向代理伺服器認證

3、 響應首部:

3.1、資訊性:

Age:響應持續時長
Server:伺服器程式軟體名稱和版本

3.2、協商首部:某資源有多種表示方法時使用

Accept-Ranges:伺服器可接受的請求範圍型別
Vary:伺服器檢視的其它首部列表;

3.3、安全響應首部:

Set-Cookie:向客戶端設定cookie;
Set-Cookie2: 
WWW-Authenticate:來自伺服器的對客戶端的質詢認證表單

3.4、實體首部:

Allow: 列出對此實體可使用的請求方法
Location:告訴客戶端真正的實體位於何處
Content-Encoding:
Content-Language:
Content-Length: 主體的長度
Content-Location: 實體真正所處位置;
Content-Type:主體的物件型別

3.5、快取相關:

ETag:實體的擴充套件標籤;
Expires:實體的過期時間;
Last-Modified:最後一次修改的時間

三、status頁面

2.2版本鍵入conf中的指令:

LoadModule  status_module  modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.20
</Location>

2.4版本鍵入conf中的指令:

<Location status>
SetHandler server-status
Require ip 172.20   允許訪問status的ip
</Location>

四、curl工具

curl是基於URL語法在命令列方式下工作的檔案傳輸工具,它支援FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議 。curl支援HTTPS認證,並且支援HTTP的POST、PUT等方法, FTP 上傳, kerberos認證,HTTP上傳,代理伺服器,cookies,使用者名稱/密碼 認證, 下載檔案斷點續傳,上載檔案斷點續傳, http代理伺服器管道( proxy tunneling),還支援IPv6,socks5代理伺服器,通過http代理服務 器上傳檔案到FTP伺服器等,功能十分強大

  • curl [options] [URL...]
-A/--user-agent <string> 設定使用者代理髮送給伺服器
-e/--referer <URL> 來源網址
--cacert <file> CA證書 (SSL)
-k/--insecure 允許忽略證書進行 SSL 連線

curl工具常用選項:
--compressed 要求返回是壓縮的格式
-H/--header <line>自定義首部資訊傳遞給伺服器
-i 顯示頁面內容,包括報文首部資訊
-I/--head 只顯示響應報文首部資訊
-D/--dump-header <file>將url的header資訊存放在指定檔案中
--basic 使用HTTP基本認證
-u/--user <user[:password]>設定伺服器的使用者和密碼
-L 如果有3xx響應碼,重新發請求到新位置
-O 使用URL中預設的檔名儲存檔案到本地
-o <file> 將網路檔案儲存為指定的檔案中
--limit-rate <rate> 設定傳輸速度
-0/--http1.0 數字0,使用HTTP 1.0
-v/--verbose 更詳細
-C 選項可對檔案使用斷點續傳功能
-c/--cookie-jar <file name> 將url中cookie存放在指定檔案中
-x/--proxy <proxyhost[:port]> 指定代理伺服器地址
-X/--request <command> 向伺服器傳送指定請求方法
-U/--proxy-user <user:password> 代理伺服器使用者和密碼
-T 選項可將指定的本地檔案上傳到FTP伺服器上
--data/-d 方式指定使用POST方式傳遞資料
-b name=data 從伺服器響應set-cookie得到值,返回給伺服器
  • elinks工具:

elinks [OPTION]... [URL]...

-dump: 非互動式模式,將URL的內容輸出至標準輸出
-source:列印原始碼

五、httpd自帶工具程式

rotatelogs:日誌滾動工具

按天滾動可能會出現每天容量不一樣,按大小滾動 access.log --> access.log, access.1.log --> access.log, acccess.1.log, access.2.log

  -v       Verbose operation. Messages are written to stderr.
  -l       Base rotation on local time instead of UTC.
  -L path  Create hard link from current log to specified path.
  -p prog  Run specified program after opening a new log file. See below.
  -f       Force opening of log on program start.
  -t       Truncate logfile instead of rotating, tail friendly.
  -e       Echo log to stdout for further processing.
  -c       Create log even if it is empty.

六、httpd的壓力測試工具

ab, webbench, http_load, seige Jmeter開源 Loadrunner商業,有相關認證 tcpcopy:網易,複製生產環境中的真實請求,並將之儲存

ab [OPTIONS] URL 來自httpd-tools包 -n:總請求數 -c:模擬的並行數 -k:以持久連線模式測試 ulimit–n # 調整能開啟的檔案數