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 # 調整能打開的文件數