首部分类
通用首部:请求和响应报文通用
Connection:{close, keep-alive}
Date:报文创建的日期时间
Via:经由,报文传输经过的中间代理服务器;
Cache-Control:定义缓存控制机制;
Pragma:
请求首部:
Accept:可接受的MIME类型;
Accept-language:
Accept-encoding:接受的编码格式,deflate, gzip, ...
Accetp-Charset:接受的字符集格式
Client-IP:
Host:请求的服务器的名称和端口;
Referer:跳转至当前页面上级页面;
User-Agent:客户端代理
条件式请求首部:
Expect:
If-Modified-Since
If-Unmodified-Since
If-None-Match
If-Match
安全请求首部:
Authorization
Cookie:
Cookie2:
响应首部:
信息性首部:
Age:
Server:
协商首部:
Accept-Range:服务端可接受的请求类型的范围;
Vary:其它首部列表;
安全响应首部:
Set-Cookie
Set-Cookie2
WWW-Authencate:认证质询
实体首部:
Content-Encoding
Content-language
Content-Lenth
Content-Location
Content-Type
...
Allow: 允许的请求方法;
Location:资源的真正地址;
缓存相关:
Etag:
Expires:
Last-Modified:
扩展首部:
X-Forwarded-For:
...
《http权威指南》
url:Uniform Resource Locator
URL scheme:协议,http, https, ftp, ...
服务器地址:IP:Port
资源路径:/PATH/TO/SOME_RESOURCE
基本语法格式:
://:@[:]/;?# -
- params:参数,;name=value&name=value
-
- query:查询字符串,?field=value&field=value
-
- frag:页面锚定符;#frag_id
14、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...]
curl的常用选项:
- -A/--user-agent
设置用户代理发送给服务器 -
- --basic 使用HTTP基本认证
-
- --tcp-nodelay 使用TCP_NODELAY选项
-
- -e/--referer
来源网址 -
- --cacert
CA证书 (SSL) -
- --compressed 要求返回是压缩的格式
-
- -H/--header
自定义首部信息传递给服务器 -
- -I/--head 只显示响应报文首部信息
-
- --limit-rate
设置传输速度 -
- -u/--user
设置服务器的用户和密码 -
- -0/--http1.0 使用HTTP 1.0
用法:curl [options] [URL...]
另一个工具:elinks
elinks [OPTION]... [URL]...
-dump: 不进入交互式模式,而直接将URL的内容输出至标准输出;
15、使用mod_deflate模块压缩页面优化传输速度
适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
(2) 压缩适于压缩的资源,例如文件文件;
SetOutputFilter DEFLATE
- # Restrict compression to these MIME types
-
- AddOutputFilterByType DEFLATE text/plain
-
- AddOutputFilterByType DEFLATE text/html
-
- AddOutputFilterByType DEFLATE application/xhtml+xml
-
- AddOutputFilterByType DEFLATE text/xml
-
- AddOutputFilterByType DEFLATE application/xml
-
- AddOutputFilterByType DEFLATE application/x-javascript
-
- AddOutputFilterByType DEFLATE text/javascript
-
- AddOutputFilterByType DEFLATE text/css
- # Level of compression (Highest 9 - Lowest 1)
-
- DeflateCompressionLevel 9
- # Netscape 4.x has some problems.
-
- BrowserMatch ^Mozilla/4 gzip-only-text/html
- # Netscape 4.06-4.08 have some more problems
-
- BrowserMatch ^Mozilla/4\.0[678] no-gzip
- # MSIE masquerades as Netscape, but it is fine
-
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
16、https, http over ssl
SSL会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书;
(2) 服务器端发送证书以及选定的加密方式给客户端;
(3) 客户端取得证书并进行证书验正:
如果信任给其发证书的CA:
(a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;
(b) 验正证书的内容的合法性:完整性验正
(c) 检查证书的有效期限;
(d) 检查证书是否被吊销;
(e) 证书中拥有者的名字,与访问的目标主机要一致;
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
(5) 服务用此密钥加密用户请求的资源,响应给客户端;
注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
回顾几个术语:PKI,CA,CRL,X.509 (v1, v2, v3)
配置httpd支持https:
(1) 为服务器申请数字证书;
测试:通过私建CA发证书
(a) 创建私有CA
(b) 在服务器创建证书签署请求
(c) CA签证
(2) 配置httpd支持使用ssl,及使用的证书;
# yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
- DocumentRoot
-
- ServerName
-
- SSLCertificateFile
-
- SSLCertificateKeyFile
(3) 测试基于https访问相应的主机;
openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
17、httpd自带的应用程序
htpasswd:basic认证基于文件实现,用于生成账号和密码的程序;
htdbm
htdigest
apachectl:httpd自带的服务控制脚本,支持start和stop等子命令;
apxs:- APache eXtenSion tool
rotatelogs:
ab:apache benchmark
webbench, httpload, ...
loadrunner, jmeter (ASF)
tcpcopy,
18、ab - web service的压力测试工具
命令行工具:ab, webbench, httpload, seige, ...
GUI:loadrunner, jmeter
tcpcopy
ab [options] [http[s]://]hostname[:port]/path
请求数:-n requests
并发数: -c concurrency
长连接:-k
MPM:
prefork:进程模型,两级架构,master/worker,每worker处理一个请求;
worker:线程模型,三级架构,maste/worker/thread, 每thread处理一个请求;workers*threads
event:事件驱动模型,两级架构,master/worker,每进程处理多个请求;
MPM是非DSO机制,不支持LoadModule进行切换;
切换:/etc/sysconfig/httpd
定义HTTPD变量的值:
- /usr/sbin/httpd
- /usr/sbin/httpd.worker
- /usr/sbin/httpd.event
prefork的配置:
- StartServers 8
- MinSpareServers 5
- MaxSpareServers 20
- ServerLimit 256
- MaxClients 256
- MaxRequestsPerChild 4000
worker的配置:
- StartServers 4
- MaxClients 300
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 25
- MaxRequestsPerChild 0
基于IP的访问控制机制:
- Order allow, deny
- allow from CLIENTS
- deny from CLIENTS
CLEINTS:
IP,
NETWORK
HOSTNAME
DOMAIN.TLD
虚拟主机:
基于ServerName的虚拟主机,要使用专用指令NameVirtualHost;
# service SysV_Init_Script start|stop|restart|status|reload
# chkconfig SysV_Init_Script on|off