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 # 調整能開啟的檔案數