web3(httpd2.4)

http协议:

事务:request/response

request:

<method> <URL> <version>

HEADERS

<body>

response:

<version> <status> <reason-phrase>

HEADERS

<body>

HEADERS:

Name: Value1, Value2, …

首部分类 

通用首部

请求首部

响应首部

实体首部

扩展首部

通用首部:请求和响应报文通用

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 

基本语法格式:

<scheme>://<user>:<passowrd>@<host>[:<port>]/<path>;<params>?<query>#<frag>

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 <string> 设置用户代理发送给服务器

–basic 使用HTTP基本认证

–tcp-nodelay 使用TCP_NODELAY选项

-e/–referer <URL> 来源网址

–cacert <file> CA证书 (SSL)

–compressed 要求返回是压缩的格式

-H/–header <line>自定义首部信息传递给服务器

-I/–head 只显示响应报文首部信息

–limit-rate <rate> 设置传输速度

-u/–user <user[:password]>设置服务器的用户和密码

-0/–http1.0 使用HTTP 1.0

用法:curl [options] [URL…]

另一个工具:elinks

elinks  [OPTION]… [URL]…

-dump: 不进入交互式模式,而直接将URL的内容输出至标准输出; 

15、使用mod_deflate模块压缩页面优化传输速度

适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;

(2) 压缩适于压缩的资源,例如文件文件;

SetOutputFilter DEFLATE

# mod_deflate configuration

 

# 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签证

blob.png

(2) 配置httpd支持使用ssl,及使用的证书;

# yum -y install mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot

ServerName

SSLCertificateFile

SSLCertificateKeyFile

blob.png

(3) 测试基于https访问相应的主机;

# openssl  s_client  [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

    blob.png

    blob.png

    blob.png

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 

blob.png

        blob.png

MPM:

prefork:进程模型,两级架构,master/worker,每worker处理一个请求;

worker:线程模型,三级架构,maste/worker/thread, 每thread处理一个请求;workers*threads

event:事件驱动模型,两级架构,master/worker,每进程处理多个请求;

httpd-2.2与httpd-2.4的不同之处 

MPM是非DSO机制,不支持LoadModule进行切换;

切换:/etc/sysconfig/httpd

定义HTTPD变量的值:

/usr/sbin/httpd

/usr/sbin/httpd.worker

/usr/sbin/httpd.event

prefork的配置:

<IfModule prefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers   20

ServerLimit      256

MaxClients       256

MaxRequestsPerChild  4000

</IfModule>

worker的配置:

<IfModule worker.c>

StartServers         4

MaxClients         300

MinSpareThreads     25

MaxSpareThreads     75

ThreadsPerChild     25

MaxRequestsPerChild  0

</IfModule>

基于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

类似文章