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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章