http协议
URL:Uniform Resource Locator,统一资源定位符
URL方案:scheme,如http://,https://
服务器地址:IP:port
资源路径:
示例:http://www.test.com:80/bbs/index.php
基本语法:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
params:参数,如 http://www.test.com/bbs/hello;gender=f
query: 如 http://www.test.com/bbs/item.php?username=tom&title=abc
frag:如 http://www.test.com/bbs/item.php#title-2
相对URL、绝对URL
http协议:
版本:http/0.9、http/1.0、http/1.1、http/2.0
stateless:无状态的协议,服务器无法持续追踪访问者来源。
cookie机制,session机制
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:状态码,三位数字,五大类,1XX、2XX、3XX、4XX、5XX、
reason-phrase:状态码标记状态的简要描述
headers:每个请求或响应报文可包含任意个首部,首部名称:值
entity-body:请求体或响应体,请求或响应时附加的数据,
协议查看或分析的工具:tcpdump,tshark,wireshark
首部分类:
通用首部、请求首部、响应首部、实体首部、扩展首部
curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。curl支持HTTPS认证,并支持HTTP的PSOT、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:使用HTTP1.0
elinks工具:elinks -dump URL
使用mod_deflate模块压缩页面优化传输速度
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
没有压缩前:
未启用压缩前,响应标头的Content-Length为20199,与使用wc计算的长度相同,没有Content-Encoding。
配置httpd,支持压缩:
httpd服务器配置压缩后,响应标头标志了Content-Encoding:gzip,表明使用了gzip压缩,Content-Length为6608,比原文的20199明显缩小。请求标头中Accept-Encoding表明浏览器支持gzip和deflate压缩。
使用curl测试:
HTTPS:
http over ssl = https 默认端口:443/tcp
ssl:v3,很少使用
tls:v1 ,现在互联网上一般都使用这个协议
https://
SSL会话的简单过程描述:
(1)客户端发送可供选择的加密方式,并向服务器请求证书;
(2)服务器端发送证书以及选定的加密方式给客户端
(3)客户端证书验证:
如果信任给其发证书的CA:
(a)验证证书来源的合法性:用CA的公钥解密证书上数字签名;
(b)验证证书的内容的合法性:完整性验证
(c)检查证书的有限期限;
(d)检查证书是否被吊销;
(e)证书中拥有者的名字,与访问的目标主机要一致;
(4)客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
(5)服务器用此密钥加密用户请求的资源,响应给客户端;
注意:SSL会话是基于IP地址创建,所以单IP的主机上,仅可以使用一个https虚拟主机;
配置httpd支持https:
1、为服务器申请数字证书;
测试:通过建立私有CA进行证书发放;
(1)创建私有CA
(2)在服务器创建证书签署请求
(3)CA签证
2、配置httpd支持使用ssl,及使用的证书:
# yum install -y 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 ]
实操:
1、自建CA,升级的openssl配置文件在/usr/local/openssl/ssl/openssl.conf,CA默认配置路径为/usr/local/etc/pki/CA
创建CA私钥:
CA自签证书生成:
Web服务器上生成证书签发请求文件:
CA签发证书:
发放证书到Web服务器上:
2、配置httpd支持ssl
确保mod_ssl模块安装加载
httpd -M | grep ssl
yum install mod_ssl -y
编辑/etc/httpd/conf.d/ssl.conf
3、测试,使用浏览器测试,可以访问到网页:https://192.168.138.138
openssl s_client未成功
4、将CA的自签证书导入系统,在浏览器中Internet选项——内容——证书——受信任的根证书颁发机构,导入CA证书。
(实验未成功,CA验证web.testcc.com证书未成功)
httpd自带的工具程序
htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具;
apachectl:httpd自带的服务控制脚本,支持start,stop等;
apxs:由httpd-devel包提供的,扩展httpd使用第三方模块的工具;
rotatelogs:日志滚动工具
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行;
ab:apache benchmark,压力测试工具
控制httpd服务的脚本,apachectl start | stop | restart | status | fullstatus
apxs,需要安装:yum install httpd-devel -y
apxs - APache eXtenSion tool
http压力测试工具:
ab、 webbench、 http_load
jmeter:
loadrunner:专业级商业压力测试工具
tcpcopy:网易出品
ab [OPTIONS] URL
-n:总的请求数
-c:模拟的并发数
-k:以持久连接模式测试
ulimit -n #:调整当前用户所同时打开的文件数;