- http-2.2常見配置
- http協(xié)議
- curl和elinks工具
一残炮、http-2.2常見配置
- httpd配置文件的組成:分為三部分
grep "Section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment //全局配置
### Section 2: 'Main' server configuration //主服務(wù)器配置
### Section 3: Virtual Hosts //虛擬主機(jī)配置
- 配置格式:directive value (指令 值)
directive:不區(qū)分字符大小寫
value:當(dāng)為路徑時(shí)喧兄,是否區(qū)分大小寫取決于文件系統(tǒng)
(一)顯示服務(wù)器版本信息
-
設(shè)置格式:ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
- ServerTokens Prod[uctOnly]: Server: Apache
- ServerTokens Major: Server: Apache/2
- ServerTokens Minor: Server: Apache/2.0
- ServerTokens Min[imal]: Server: Apache/2.0.41
- ServerTokens OS: Server: Apache/2.0.41 (Unix)
- ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2师抄,被注釋時(shí)默認(rèn)狀態(tài)為Full
建議將ServerTokens值設(shè)為Prod
(二)修改監(jiān)聽的IP和Port
-
設(shè)置格式:Listen [IP:]PORT
- 省略IP表示為0.0.0.0
- Listen指令至少一個(gè)簿废,可重復(fù)出現(xiàn)多次
Listen 80
Listen 8080 - 修改監(jiān)聽socket第晰,重載服務(wù)進(jìn)程方可生效
注意:必須有端口號(hào)設(shè)置颓屑,否則服務(wù)啟動(dòng)失敗
實(shí)驗(yàn):只允許從192.168.136.229:8080端口訪問http服務(wù)
vim /etc/httpd/conf/httpd.conf
Listen 192.168.136.229:8080
httpd -t
service httpd reload
curl -I 192.168.136.229:80
curl -I 192.168.136.229:8080
curl -l 172.18.250.44:80
(三)持久連接
定義:連接建立棕叫,每個(gè)資源獲取完成后不會(huì)斷開連接仗岸,而是繼續(xù)等待其它的請求完成允耿,默認(rèn)關(guān)閉持久連接
開啟持久連接需要設(shè)置斷開條件:數(shù)量限制、時(shí)間限制
設(shè)置格式:
KeepAlive On|Off
KeepAliveTimeout 15:時(shí)間限制扒怖,單位為秒
MaxKeepAliveRequests 100:數(shù)量限制實(shí)驗(yàn):設(shè)置開啟持久連接较锡,時(shí)間限制150秒(為了方便做實(shí)驗(yàn)設(shè)置時(shí)間比較長,實(shí)際根據(jù)情況設(shè)置)姚垃,數(shù)量限制100
vim /etc/httpd/conf/httpd.conf
KeepAlive On
KeepAliveTimeout 150
MaxKeepAliveRequests 100
telnet 192.168.136.229 80
GET /index.html HTTP/1.1
HOST:3.3.3.3 //目前服務(wù)器只管理一個(gè)域名念链,故可以隨便寫
GET /hello.txt HTTP/1.1
HOST:5.5.5.5
(四)MPM(Multi-Processing Module)多路處理模塊
(1)MPM分類:prefork, worker, event
- httpd-2.2不支持同時(shí)編譯多個(gè)模塊,所以只能編譯時(shí)選定一個(gè)
- rpm安裝的包提供三個(gè)二進(jìn)制程序文件积糯,分別用于實(shí)現(xiàn)對不同MPM機(jī)制的支持
- /usr/sbin/httpd: prefork
- /usr/sbin/httpd.worker: worker
- /usr/sbin/httpd.event: event (test)
- 查詢當(dāng)前使用的MPM機(jī)制
ps aux | grep httpd
(2)模塊
- 查看靜態(tài)編譯的模塊
httpd -l
- 查看靜態(tài)編譯及動(dòng)態(tài)裝載的模塊
httpd -M
- 動(dòng)態(tài)模塊加載:不需重啟即生效
- 動(dòng)態(tài)模塊路徑:/usr/lib64/httpd/modules/
(3)切換使用的httpd程序
//切換至work模式
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker //將行前的注釋符#刪除
httpd -t
service httpd restart
(4)prefork的默認(rèn)配置
vim /etc/httpd/conf/httpd.conf
<IfModule prefork.c>
StartServers 8 //啟動(dòng)開啟的進(jìn)程數(shù)
MinSpareServers 5 //最少空閑進(jìn)程數(shù)
MaxSpareServers 20 //最大空閑進(jìn)程數(shù)
ServerLimit 256 //最多進(jìn)程數(shù)掂墓,不能超過MaxClient,最大能設(shè)置為20000
MaxClients 256 //最大并發(fā)數(shù)
MaxRequestsPerChild 4000 //子進(jìn)程最多能處理的請求看成,達(dá)到設(shè)置值子進(jìn)程被父進(jìn)程終止君编,釋放內(nèi)存
</IfModule>
(5)worker的默認(rèn)配置
vim /etc/httpd/conf/httpd.conf
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 //無限制
</IfModule>
啟動(dòng)時(shí)開啟4個(gè)進(jìn)程,每個(gè)進(jìn)程開啟25個(gè)線程川慌,共100個(gè)線程螟碎,但最多空閑75個(gè)線程,需要結(jié)束1個(gè)進(jìn)程共25個(gè)線程藐俺,故開啟服務(wù)后實(shí)際只能開到3個(gè)進(jìn)程共75個(gè)線程
(五)DSO(Dynamic Shared Object):動(dòng)態(tài)加載模塊
加載動(dòng)態(tài)模塊配置文件:
/etc/httpd/conf/httpd.conf配置指定模塊加載格式:
LoadModule <mod_name> <mod_path>模塊文件路徑使用相對路徑:
相對于ServerRoot(默認(rèn)/etc/httpd)實(shí)驗(yàn):取消加載模塊auth_basic_module
vim /etc/httpd/conf/httpd.conf
#LoadModule auth_basic_module modules/mod_auth_basic.so //行前增加注釋符#
httpd -t
service httpd reload
httpd -M | grep auth_basic_module
(六)定義Main server的文檔頁面路徑
設(shè)置格式:DocumentRoot "/path"
DocumentRoot指向的路徑為URL路徑的起始位置注意:SELinux和iptables的狀態(tài)影響設(shè)置是否生效
實(shí)驗(yàn):將URL路徑的起始位置修改為/app
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/app" //修改此行的值為/app
httpd -t
service httpd reload
echo "/app/index.html" > /app/index.html //在/app目錄下創(chuàng)建html文件
curl 192.168.136.229
(七)定義站點(diǎn)主頁面
設(shè)置格式:DirectoryIndex index.html index.html.var
當(dāng)URL并未明確目錄內(nèi)的文件時(shí)百拓,根據(jù)設(shè)置中的文件依次查詢
實(shí)驗(yàn):當(dāng)訪問bbs目錄,設(shè)置主頁面為index文件
mkdir /app/bbs
echo "/bbs/index" > /app/bbs/index
curl 192.168.136.229/bbs/ //403 Forbidden 錯(cuò)誤
vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index //行尾添加index
httpd -t
service httpd reload
curl 192.168.136.229/bbs/
設(shè)置DirectoryIndex的值包含index前
設(shè)置DirectoryIndex的值包含index后
(八)站點(diǎn)訪問控制常見機(jī)制
訪問控制機(jī)制有兩種:客戶端來源地址琴拧,用戶賬號(hào)
(1)被訪問控制的資源描述方式:
-
文件系統(tǒng)路徑:
- 目錄匹配
<Directory "/path"> ... </Directory>
- 文件匹配
<File "/path/file"> ... </File>
- 文件正則表達(dá)式匹配
<FileMatch "PATTERN"> ... </FileMatch>
-
URL路徑:
- URL匹配:
<Location " "> ... </Location>
- URL正則表達(dá)式匹配
<LocationMatch" "> ... </LocationMatch>
(2)基于源地址的訪問控制:
1)Options:后跟1個(gè)或多個(gè)以空白字符分隔的選項(xiàng)列表
選項(xiàng)前的+降瞳,-表示增加或刪除指定選項(xiàng)
常見選項(xiàng):
Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時(shí),返回索引列表給用戶
FollowSymLinks:允許訪問符號(hào)鏈接文件所指向的源文件
None:全部禁用
All:全部允許-
實(shí)驗(yàn):取消DirectoryIndex的值包含index蚓胸,訪問/bbs目錄時(shí)不顯示403錯(cuò)誤而是該目錄下的文件
vim /etc/httpd/conf.d/bbs.conf //建立獨(dú)立配置文件 <Directory "/app/bbs"> Options lndexes </Directory> httpd -t service httpd reload
2)AllowOverride
-
指定目錄下的.htaccess(由AccessFileName指定)文件中哪些訪問控制相關(guān)的指令可以生效
- 只對<directory>語句有效
- AllowOverride All:所有指令都有效
- AllowOverride None:所有指令都無效
- AllowOverride AuthConfig Indexes:只有AuthConfig 和Indexes指令可以生效
實(shí)驗(yàn):在/app/bbs/目錄下建立.htaccess文件挣饥,授予本目錄FollowSymLinks的權(quán)限。
echo "Options FollowSymLinks" > /app/bbs/.htaccess
ln -s /etc/issue /app/bbs/issue.link
httpd -t
service httpd reload
curl 192.168.136.229/bbs/issue.link //403錯(cuò)誤沛膳,因?yàn)檫€沒有AllowOverride授權(quán)
vim /etc/httpd/conf.d/bbs.conf
<Directory "/app/bbs">
Options Indexes
AllowOverride FollowSymLinks
</Directory>
httpd -t
service httpd reload
curl 192.168.136.229/bbs/issue.link //成功
AllowOverride授權(quán)前
AllowOverride授權(quán)后
3)Order和Allow扔枫、Deny
-
Order:定義生效次序;寫在后面的表示默認(rèn)法則
- Order allow,deny:后面設(shè)置出現(xiàn)沖突锹安,以deny為法則
- Order deny,allow:后面設(shè)置出現(xiàn)沖突短荐,以allow為法則
Allow|Deny from IP
實(shí)驗(yàn):
只允許IP為192.168.136.230的主機(jī)訪問服務(wù)器的html文件
vim /etc/httpd/conf.d/allowdeny.conf
<files "*.html">
order deny,allow
allow from 192.168.136.230
deny from 192.168.136
</files>
httpd -t
service httpd reload
當(dāng)192.168.136.230的配置出現(xiàn)沖突倚舀,默認(rèn)以order行中靠后的allow為默認(rèn)法則
故允許192.168.136.230訪問服務(wù)器的html文件
192.168.136.0的配置沒有出現(xiàn)沖突,故不允許網(wǎng)段的其他主機(jī)訪問服務(wù)器的html文件
不允許IP為192.168.136.230的主機(jī)訪問服務(wù)器的html文件
vim /etc/httpd/conf.d/allowdeny.conf
<files "*.html">
order allow,deny
allow from 192.168.136.230
deny from 192.168.136
</files>
httpd -t
service httpd reload
當(dāng)192.168.136.230的配置出現(xiàn)沖突搓侄,默認(rèn)以order行中靠后的deny為默認(rèn)法則
故不允許192.168.136.230訪問服務(wù)器的html文件
192.168.136.0的配置沒有出現(xiàn)沖突瞄桨,故仍舊不允許網(wǎng)段的其他主機(jī)訪問服務(wù)器的html文件
(九)日志設(shè)置
日志類型:
訪問日志:/etc/httpd/logs/access_log
錯(cuò)誤日志:/etc/httpd/logs/error_log-
訪問日志:
定義日志格式:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
使用日志格式:
CustomLog logs/access_log combined
日志格式標(biāo)識(shí)符含義
%h:客戶端IP地址
%l:遠(yuǎn)程用戶,啟用mod_ident才有效讶踪,通常為減號(hào)“-”
%u:驗(yàn)證(basic芯侥,digest)遠(yuǎn)程用戶,非登錄訪問時(shí)乳讥,為一個(gè)減號(hào)“-”
%t:服務(wù)器收到請求時(shí)的時(shí)間
%r:First line of request柱查,即表示請求報(bào)文的首行;記錄了此次請求的“方法”云石,“URL”以及協(xié)議版本
%>s:響應(yīng)狀態(tài)碼
%b:響應(yīng)報(bào)文的大小唉工,單位是字節(jié);不包括響應(yīng)報(bào)文http首部
%{Referer}i:請求報(bào)文中首部“referer”的值汹忠;即從哪個(gè)頁面中的超鏈接跳轉(zhuǎn)至當(dāng)前頁面的
%{User-Agent}i:請求報(bào)文中首部“User-Agent”的值淋硝;即發(fā)出請求的應(yīng)用程序
實(shí)驗(yàn):自定義訪問日志的格式,包含客戶端IP宽菜、請求文件在硬盤的路徑谣膳、時(shí)間、請求的URL
/etc/httpd/conf/httpd.conf
LogFormat "%h %f %t %U" hello
CustomLog logs/access_log hello
httpd -t
service httpd reload
(十)設(shè)定默認(rèn)字符集
設(shè)置格式:
AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030
實(shí)驗(yàn):將默認(rèn)字符集改為GB2312
vim /etc/httpd/conf/httpd.conf
AddDefaultCharset GB2312
httpd -t
service httpd reload
(十一)定義路徑別名
設(shè)置格式:
Alias /URL/ "/PATH/"
實(shí)驗(yàn):當(dāng)?shù)卿?92.168.136.229/bbs時(shí)铅乡,在服務(wù)器訪問磁盤/app/forum目錄而不是默認(rèn)的/app/bbs目錄
vim /etc/httpd/conf.d/bbs.conf
Alias /bbs /app/forum
mkdir /app/forum
echo "/app/forum/index.html" > /app/forum/index.html
httpd -t
service httpd reload
curl 192.168.136.229/bbs/
(十二)基于用戶的訪問控制
(1)認(rèn)證的相關(guān)概念
認(rèn)證質(zhì)詢(WWW-Authenticate):響應(yīng)碼為401继谚,拒絕客戶端請求,并說明要求客戶端提供賬號(hào)和密碼
認(rèn)證(Authorization):客戶端用戶填入賬號(hào)和密碼后再次發(fā)送請求報(bào)文阵幸;認(rèn)證通過時(shí)花履,則服務(wù)器發(fā)送響應(yīng)的資源
認(rèn)證方式兩種:
basic:明文
digest:消息摘要認(rèn)證,兼容性差安全域:需要用戶認(rèn)證后方能訪問的路徑挚赊;應(yīng)該通過名稱對其進(jìn)行標(biāo)識(shí)诡壁,以便于告知用戶認(rèn)證的原因
用戶的賬號(hào)和密碼
虛擬賬號(hào):僅用于訪問某服務(wù)時(shí)用到的認(rèn)證標(biāo)識(shí)
存儲(chǔ):文本文件,SQL數(shù)據(jù)庫荠割,ldap目錄存儲(chǔ)妹卿,nis等
(2)basic認(rèn)證
-
basic認(rèn)證配置格式:
- 定義安全域
<Directory "/path"> AuthType Basic //認(rèn)證方式 AuthName "String" //認(rèn)證提示字符串 AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" //認(rèn)證文件路徑 Require user username1 username2 ... //允許訪問安全域的用戶 </Directory>
允許賬號(hào)文件中的所有用戶登錄訪問:
Require valid-user
- 使用htpasswd命令生成存儲(chǔ)賬號(hào)密碼的文件
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username -c:自動(dòng)創(chuàng)建文件,僅應(yīng)該在文件不存在時(shí)使用 -m:md5格式加密 -s:sha格式加密 -D:刪除指定用戶
實(shí)驗(yàn):只允許用戶tom, jerry登錄192.168.136.229/secret目錄
//1. 定義安全域
mkdir /app/secret
echo "/app/secret/index.html" > /app/secret/index.html
vim /etc/httpd/conf.d/auth.conf
<Directory /app/secret>
AuthType basic
AuthName "secret zone"
AuthUserFile "/etc/httpd/conf.d/authuser"
Require user tom jerry
</Directory>
//2. 生成存儲(chǔ)用戶密碼的文件
htpasswd -c /etc/httpd/conf.d/authuser tom //-c:第一次創(chuàng)建文件用
htpasswd -s /etc/httpd/conf.d/authuser jerry //-s:SHA加密
htpasswd -s /etc/httpd/conf.d/authuser john
//3. 測試
httpd -t
service httpd reload
使用瀏覽器, curl, links測試
(3)基于組賬號(hào)認(rèn)證
- 組賬號(hào)認(rèn)證配置格式:
- 定義安全域
<Directory "/path"> AuthType Basic AuthName "String" AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" AuthGroupFile "/PATH/HTTPD_GROUP_FILE" Require group grpname1 grpname2 ... //允許訪問安全域的組 </Directory>
- 創(chuàng)建用戶賬號(hào)和組賬號(hào)文件
組文件:每一行定義一個(gè)組
GRP_NAME: username1 username2 ...
(4)遠(yuǎn)程客戶端和用戶驗(yàn)證的控制
Satisfy ALL|Any
ALL:驗(yàn)證條件需要都通過才可以
Any:驗(yàn)證條件有一個(gè)滿足即可實(shí)驗(yàn):允許用戶組webgrp1中的用戶(tom, jerry)或來自192.168.136.230的主機(jī)登錄192.168.136.229/admin目錄
//1. 定義安全域
mkdir /app/admin
echo "/app/admin/index.html" > /app/admin/index.html
vim /etc/httpd/conf.d/auth.conf
<Directory /app/admin>
AuthType basic
AuthName "admin zone"
AuthUserFile "/etc/httpd/conf.d/authuser"
AuthGroupFile "/etc/httpd/conf.d/authgrp"
Require group webgrp1
Order deny,allow
allow from 192.168.136.230
deny from 192.168.136
Satisfy Any
</Directory>
//2. 定義組賬號(hào)文件
/etc/httpd/conf.d/authgrp
webgrp1: tom jerry
webgrp2: john
//3. 測試
httpd -t
service httpd reload
使用瀏覽器, curl, links測試
(十三)虛擬主機(jī)
-
有三種實(shí)現(xiàn)方案:
- 基于ip:為每個(gè)虛擬主機(jī)準(zhǔn)備至少一個(gè)ip地址
- 基于port:為每個(gè)虛擬主機(jī)使用至少一個(gè)獨(dú)立的port
- 基于FQDN:為每個(gè)虛擬主機(jī)使用至少一個(gè)FQDN
- 注意:一般虛擬機(jī)不要與main主機(jī)混用涨共;因此,要使用虛擬主機(jī)宠漩,一般先禁用main主機(jī)
- 禁用方法:注釋中心主機(jī)的DocumentRoot指令即可
虛擬主機(jī)的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot "/path"
</VirtualHost>
建議:上述配置存放在獨(dú)立的配置文件中
其它可用指令:
ServerAlias:虛擬主機(jī)的別名举反;可多次使用
ErrorLog:錯(cuò)誤日志
CustomLog:訪問日志實(shí)驗(yàn)1:實(shí)現(xiàn)基于IP的虛擬主機(jī)
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.136.10:80>
DocumentRoot "/app/website1"
</VirtualHost>
<VirtualHost 192.168.136.20:80>
DocumentRoot "/app/website2"
</VirtualHost>
<VirtualHost 192.168.136.30:80>
DocumentRoot "/app/website3"
</VirtualHost>
//2. 建立網(wǎng)頁文件目錄
mkdir /app/website{1..3}
echo "/app/website1/index.html" > /app/website1/index.html
echo "/app/website2/index.html" > /app/website2/index.html
echo "/app/website3/index.html" > /app/website3/index.html
//3. 建立相應(yīng)的IP地址
ip a a 192.168.136.10 dev eth1
ip a a 192.168.136.20 dev eth1
ip a a 192.168.136.30 dev eth1
//4. 測試
service httpd reload
curl 192.168.136.10
curl 192.168.136.20
curl 192.168.136.30
- 實(shí)驗(yàn)2:實(shí)現(xiàn)基于端口的虛擬主機(jī)
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
Listen 81
Listen 82
Listen 83
<VirtualHost 192.168.136.40:81>
DocumentRoot "/app/website1"
</VirtualHost>
<VirtualHost 192.168.136.40:82>
DocumentRoot "/app/website2"
</VirtualHost>
<VirtualHost 192.168.136.40:83>
DocumentRoot "/app/website3"
</VirtualHost>
//2. 建立相應(yīng)的IP地址
service network restart //清空上一個(gè)實(shí)驗(yàn)臨時(shí)增加的IP
ip a a 192.168.136.40 dev eth1
//3. 測試
service httpd reload
curl 192.168.136.40:81
curl 192.168.136.40:82
curl 192.168.136.40:83
- 實(shí)驗(yàn)3:實(shí)現(xiàn)基于FQDN的虛擬主機(jī),每個(gè)虛擬主機(jī)都有一個(gè)配置文件
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.hello.com
DocumentRoot "/app/website1"
CustomLog logs/www.hello.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerName www.hi.cn
DocumentRoot "/app/website2"
CustomLog logs/www.hi.cn-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerName www.bye.net
DocumentRoot "/app/website3"
CustomLog logs/www.bye.net-access_log common
</VirtualHost>
httpd -t
service httpd reload
//2. 配置DNS服務(wù)器或者編輯hosts文件
//3. 測試
curl www.hello.com
curl www.hi.cn
curl www.bye.net
(十四)status頁面
需要加載status_module模塊
配置格式:
LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16 //只允許172.16.0.0網(wǎng)段主機(jī)訪問status頁面
</Location>
ExtendedStatus On 顯示擴(kuò)展信息
- 實(shí)驗(yàn):只允許192.168.136.0/32網(wǎng)段的主機(jī)訪問192.168.136.229的status頁面
vim /etc/httpd/conf.d/status.conf
LoadModule status_module modules/mod_status.so //默認(rèn)在/etc/httpd/conf/httpd.conf文件中開啟
<Location /status>
SetHandler server-status
Order allow,deny
Allow from 192.168.136.
</Location>
ExtendedStatus On
httpd -t
service httpd reload
二扒吁、http協(xié)議
(一)http協(xié)議特點(diǎn)
- http協(xié)議:stateless 無狀態(tài)
服務(wù)器無法持續(xù)追蹤訪問者來源 - 解決http協(xié)議無狀態(tài)方法
cookie 客戶端存放
session 服務(wù)端存放
(二)http報(bào)文
-
請求報(bào)文由請求行火鼻、首部行和實(shí)體主體組成
- 格式:
<method> <request-URL> <version> <headers> <entity-body>
-
響應(yīng)報(bào)文由狀態(tài)行室囊、首部行和實(shí)體主體組成
- 格式:
<version> <status> <reason-phrase> <headers> <entity-body>
-
報(bào)文組成簡要描述:
- method
請求方法,標(biāo)明客戶端希望服務(wù)器對資源執(zhí)行的動(dòng)作:GET魁索、HEAD融撞、POST等 - version
HTTP/<major>.<minor> - status
三位數(shù)字,如200粗蔚、301尝偎、302、404鹏控、502致扯,標(biāo)記請求處理過程中發(fā)生的情況 - reason-phrase:
狀態(tài)碼所標(biāo)記狀態(tài)的簡要描述 - headers
每個(gè)請求或響應(yīng)報(bào)文可包含任意個(gè)首部;每個(gè)首部都有首部名稱当辐,后面跟一個(gè)冒號(hào)抖僵,而后跟一個(gè)可選空格,接著是一個(gè)值 - entity-body
請求時(shí)附加的數(shù)據(jù)或響應(yīng)時(shí)附加的數(shù)據(jù)
- method
(三)method方法
- GET:從服務(wù)器獲取一個(gè)資源
- HEAD:只從服務(wù)器獲取文檔的響應(yīng)首部
- POST:向服務(wù)器輸入數(shù)據(jù)缘揪,通常會(huì)再由網(wǎng)關(guān)程序繼續(xù)處理
- PUT:將請求的主體部分存儲(chǔ)在服務(wù)器中耍群,如上傳文件
- DELETE:請求刪除服務(wù)器上指定的文檔
- TRACE:追蹤請求到達(dá)服務(wù)器中間經(jīng)過的代理服務(wù)器
- OPTIONS:請求服務(wù)器返回對指定資源支持使用的請求方
(四)status(狀態(tài)碼)
-
分類:
- 1xx:100-101信息提示
- 2xx:200-206成功
- 3xx:300-305重定向
- 4xx:400-415錯(cuò)誤類信息,客戶端錯(cuò)誤
- 5xx:500-505錯(cuò)誤類信息找筝,服務(wù)器端錯(cuò)誤
-
常用狀態(tài)碼
- 200:成功蹈垢,請求數(shù)據(jù)通過響應(yīng)報(bào)文的entity-body部分發(fā)送;OK
- 301:請求的URL指向的資源已經(jīng)被刪除呻征;但在響應(yīng)報(bào)文中通過首部Location指明了資源現(xiàn)在所處的新位置耘婚;Moved Permanently(永久重定向)
- 302:響應(yīng)報(bào)文Location指明資源臨時(shí)新位置;Moved Temporarily(臨時(shí)重定向)
- 304:客戶端發(fā)出了條件式請求陆赋,但服務(wù)器上的資源未曾發(fā)生改變沐祷,則通過響應(yīng)此響應(yīng)狀態(tài)碼通知客戶端;Not Modified
- 401:需要輸入賬號(hào)和密碼認(rèn)證方能訪問資源攒岛;Unauthorized
- 403:請求被禁止赖临;Forbidden
- 404:服務(wù)器無法找到客戶端請求的資源;Not Found
- 500:服務(wù)器內(nèi)部錯(cuò)誤灾锯;Internal Server Error
- 502:代理服務(wù)器從后端服務(wù)器收到了一條偽響應(yīng)兢榨,如無法連接到網(wǎng)關(guān);Bad Gateway
- 503:服務(wù)不可用顺饮,臨時(shí)服務(wù)器維護(hù)或過載吵聪,服務(wù)器無法處理請求;Service Unavailable
- 504:網(wǎng)關(guān)超時(shí)兼雄;Gateway Timeout
(四)首部
分類:通用首部吟逝、請求首部、響應(yīng)首部赦肋、實(shí)體首部块攒、擴(kuò)展首部
通用首部:
Date:報(bào)文的創(chuàng)建時(shí)間
Connection:連接狀態(tài)励稳,如keep-alive, close
Via:顯示報(bào)文經(jīng)過的中間節(jié)點(diǎn)(代理,網(wǎng)關(guān))
Cache-Control:控制緩存囱井,如緩存時(shí)長
MIME-Version:發(fā)送端使用的MIME版本請求首部:
Accept:通知服務(wù)器自己可接受的媒體類型
Accept-Charset:客戶端可接受的字符集
Accept-Encoding:客戶端可接受編碼格式驹尼,如gzip
Accept-Language:客戶端可接受的語言
Client-IP:請求的客戶端IP
Host:請求的服務(wù)器名稱和端口號(hào)
Referer:跳轉(zhuǎn)至當(dāng)前URL的前一個(gè)URL
User-Agent:客戶端代理,瀏覽器版本條件式請求首部:
Expect:允許客戶端列出某請求所要求的服務(wù)器行為
If-Modified-Since:自從指定的時(shí)間之后庞呕,請求的資源是否發(fā)生過修改
If-Unmodified-Since:與上面相反
If-None-Match:本地緩存中存儲(chǔ)的文檔的ETag標(biāo)簽是否與服務(wù)器文檔的Etag不匹配
If-Match:與上面相反安全請求首部:
Authorization:向服務(wù)器發(fā)送認(rèn)證信息新翎,如賬號(hào)和密碼
Cookie:客戶端向服務(wù)器發(fā)送cookie
Cookie2:用于說明請求端支持的cookie版本代理請求首部:
Proxy-Authorization:向代理服務(wù)器認(rèn)證信息響應(yīng)首部:
Age:從最初創(chuàng)建開始,響應(yīng)持續(xù)時(shí)長
Server:服務(wù)器程序軟件名稱和版本協(xié)商響應(yīng)首部:某資源有多種表示方法時(shí)使用
Accept-Ranges:服務(wù)器可接受的請求范圍類型
Vary:服務(wù)器查看的其它首部列表安全響應(yīng)首部:
Set-Cookie:向客戶端設(shè)置cookie
Set-Cookie2:與上面相似
WWW-Authenticate:來自服務(wù)器對客戶端的質(zhì)詢列表實(shí)體首部:
Allow:列出對此資源實(shí)體可使用的請求方法
Location:告訴客戶端真正的實(shí)體位于何處
Content-Encoding:對主體執(zhí)行的編碼
Content-Language:理解主體時(shí)最適合的語言
Content-Length:主體的長度
Content-Location:實(shí)體真正所處位置
Content-Type:主體的對象類型千扶,如text
緩存相關(guān):
ETag:實(shí)體的擴(kuò)展標(biāo)簽
Expires:實(shí)體的過期時(shí)間
Last-Modified:最后一次修改的時(shí)間
三料祠、curl和elinks工具
(一)curl工具
語法:curl [options] [URL...]
選項(xiàng):
-A/--user-agent <string>:設(shè)置用戶代理(瀏覽器)發(fā)送給服務(wù)器
-e/--referer <URL>:來源網(wǎng)址(從哪個(gè)網(wǎng)址跳轉(zhuǎn)過來)
--cacert <file>:CA證書(SSL)
-k/--insecure:允許忽略證書進(jìn)行SSL 連接
--compressed:要求返回壓縮的格式
-H/--header <line>:自定義首部信息傳遞給服務(wù)器
-i:顯示頁面內(nèi)容,包括報(bào)文首部信息
-I/--head:只顯示響應(yīng)報(bào)文首部信息
-D/--dump-header <file>:將url的header信息存放在指定文件中
--limit-rate <rate>:設(shè)置傳輸速度
--basic:使用HTTP基本認(rèn)證
-u/--user <user[:password]>:設(shè)置服務(wù)器的用戶和密碼
-L:如果有3xx響應(yīng)碼澎羞,重新發(fā)請求到新位置
-o <file>:將網(wǎng)絡(luò)文件保存為指定的文件中
-O:使用URL中默認(rèn)的文件名保存文件到本地
-0/--http1.0:使用HTTP 1.0
-C:可對文件使用斷點(diǎn)續(xù)傳功能
-c/--cookie-jar <file name>:將url中cookie存放在指定文件中
-x/--proxy <proxyhost[:port]>:指定代理服務(wù)器地址
-X/--request <command>:向服務(wù)器發(fā)送指定請求方法
-U/--proxy-user <user:password>:代理服務(wù)器用戶和密碼
-T:將指定的本地文件上傳到FTP服務(wù)器上
--data/-d:指定使用POST方式傳遞數(shù)據(jù)實(shí)驗(yàn):curl工具使用
curl -A "Internet Explorer 12" 192.168.136.229
curl -e "www.baidu.com" 192.168.136.229
curl -H host: www.hello.com 192.168.136.229
curl -D head.txt 192.168.136.229
curl --limit-rate 2048 -O ftp://172.18.0.1/pub/ISOs/CentOS-7-x86_64-Everything-1708.iso
curl -I -L www.360buy.com
-A選項(xiàng):偽造瀏覽器和-e選項(xiàng):偽造轉(zhuǎn)發(fā)地址
-H選項(xiàng):存在虛擬主機(jī)時(shí)髓绽,指定host首部信息返回不同結(jié)果
-D選項(xiàng):保存相應(yīng)報(bào)文首部信息到文件
--limit-rate選項(xiàng):限制下載速度,單位B/s妆绞; -O 按照默認(rèn)文件名存儲(chǔ)
-L選項(xiàng):強(qiáng)制重定向顺呕,下面的例子可以看到兩次重定向跳轉(zhuǎn)過程
(二)elinks工具:
語法:elinks[OPTION]... [URL]...
選項(xiàng):
-dump:非交互式模式,將URL的內(nèi)容輸出至標(biāo)準(zhǔn)輸出(只輸出網(wǎng)頁文本內(nèi)容)
-source:打印源碼