第一:Web Service基础
@1:补充 TCP、UDP
OSI模型,TCP(应用、表示、会话)资源子网,下四具为通信子网。
前三层在用户进程进行(用户空间用户程序,后四层在内核中。
Ip地址主机至主机(通信双方)
数据链路层mac设备到设备之间的通信
TCP/IP提供进程地址(端口号)
TCP:面向链接在通信前创建虚拟链路(三次握手),通信完成后
还要拆除链路。可提供可靠流协议。0-65535
UDP:用户数据报协议(User dataGram Protocol),无链接协议(
无法保证对方在线)0-65535
套接字socket:IPC的一种实现。目的实现允许不同主机(或同一主机)
上不同进程之间通信。从而实现数据交换。socket API,在1983年实现。
最早4.2BSD版本。是IP地址加端口的组合的结果。
源端口16位,目标端口16位
套接字三种类似:TCP端口的、UDP端口的以有裸套接字(直接通过IP报文)
不使用TCP或UDP端口。
SOCK_STREAM TCP套接字 流行通信
SOCK_DGRAM UDP套接字
SOCK_RAW 裸套接字(IP报文实现应用)
二个主机通信时同层之间有协议,不同层之间上层利用下提供的接口和服务,
下层接口向上层提供服务。多层能够提供模块化
网络IP,将IP切为数据报文进行传送。(为不可靠),传输单元MTU一般
为1500。
客户端与服务器进程通信时产生一组套接字(原I地址+原端口和目标地址+目标端口形式)
客户端的端口随机41952以上,服务器端固定80(http服务)
@2:IP
分类:
A类:1-127 B:128-191 C:192-223 D:组播:224-239 E:240-254
私有地址:
A:10.0.0.0/8 B:172.16.0.0/16—172.31.0.0/16
C:192.168.0.0/24 D:192.168.255.0/24
@3:端口使用限制
由国际互联网地址IANA
0-1024分配给固定使用 22/tcp(ssh) 80/tcp(http),443/tcp(https)
2014-41951 为注册端口,要求不严格,分配给程序注册使用
11211/tcp memory cached 3306 tcp/mysql)
41952-65535 客户端随机使用端口(动态端口),在Linux中
/proc/sys/net/ipv4/ip_local_port_range 可修改(增加端口数)
@3 :TCP协议特性(双向)
tcp发送与接收在不同的信道。(内核的接收速度大于网卡)
一端的发送缓存对应另一端的接收缓冲。TCP功能
三次握手
分段每段有校验和(CRC-32)。
确认、重传、超时、排序(逻辑序号-在数据流中的位置)、
流控(滑动窗口算法-缓存区剩余大小)、
拥塞控制(发送慢启动和拥塞避免算法)【接收的绥中小于发送缓存】
@4:Socket Domain:
根据使用地址使用socket domain,每类套接字至少提供2种socket:流、数据报
AF_INET :Adress Famil .IPV4
AF_INET6: IP V6
AF_UNIX:同一主机不同进程
流提供可靠传递、面向连接、无边界
数据报:不可靠传递,有边界、无连
套接字相关系统调用
socket():创建(向内核申请调用)
bind():绑定,使用套接字
Listen():监听
Accept():接收请求
connect():客户端请求链接建立
write();数据包的发送 read();从缓存接收数据
(send(),recv(),sendto(),recvfrom():
当无请求调用时,将阻塞
第二部分:http协议
第一:HTTP基础
1、 定义
http: hyper text transfer protocol, 80/tcp
html: 编程语言,超文本标记语言;
<html>
<head>
<title>TITLE</title>
</head>
<body>
<h1></h1>
blabla... <a href="http://www.magedu.com/logo.jpg"> blabla
<h2></h2>
</body>
</html>
CSS: Cascading Style Sheet(级联样式表)
js: javascript
MIME: Multipurpose Internet Mail Extesion(支持文协议发送非文本数据,支持多)
http工作在应用层
2、工作机制:
http请求
http响应
Web资源:web resource(请求的内容)
静态文件:.jpg, .gif, .html, .txt, .js, .css, .mp3, .avi
动态文件:.php, .jsp,
媒体:媒体类型解决需要那个外部程序执行。
媒体类型(MIME类型,不同编码方式):major/minor(主类型、次类型)
text/html(超文本)
text/plain(纯文本)
image/jpeg
image/gif
URI: Uniform Resource Identifier(统一资源标识符,标识可被引用的资源)
URI的二种类型:
URL: Uniform Resorce Locator,用于描述某服务器某特定资源的位置;
(统一资源定位符)
URL组成: Scheme://Server:Port/path/to/resource
scheme:方案 server:port(代表进程地址),path做资源映射。
例如:http://www.magedu.com/images/logo.jpg
URN: Uniform Resource Naming(统一资源命名)
3、http协议版本:
HTTP/0.9:原型版本,功能简陋
HTTP/1.0:第一个广泛使用的版本,支持MIME
HTTP/1.1: 增强了缓存功能
spdy(google)
HTTP/2.0:
rfc(请求注解文档)
4、一次完整的http请求处理过程:
(1) 建立或处理连接:接收请求或拒绝请求
(2) 接收请求:【请求报文】
接收来自于网络的请求报文中对某资源的一次请求的过程;
并发访问响应模型(Web I/O):
单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;
多个请求被串行响应;(一个用户请求一个PV)
多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
复用I/O结构:使用复用连接处理器(C10K--1万个并发),一个进程响应n个请求;
多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;
事件驱动:event-driven:一个进程有事件监控器,能够接受多个请求。
基于事件回调机制。
复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;
四个响应模型如下图:
(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息
元数据:请求报文首部(包括很多元数据)
<method> <URL> <VERSION> #方法类似put、get
Host: www.magedu.com 请求的主机名称
Connection:
(4) 访问资源:获取请求报文中请求的资源
web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,
或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为
DocRoot(实现映射 httpd默认 /var/www/html /)
images/1.jpg
外部路径:http://www.magedu.com/images/1.jpg
web服务器资源路径映射方式:
(a) docroot 直接映射,
(b) alias 路径别名
(c) 虚拟主机docroot
(d) 用户家目录docroot
(5) 构建响应报文:把访问到的资源打包,构建响应相应报文,再发给客户端
资源的MIME类型:
显式分类:类型在服务器直接定义完成
魔法分类 :判断类型
协商分类:
URL重定向:(永久重定向、临时重定向)
web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径;
(6) 发送响应报文:
持久:不会断开请求链接
非持久:断开链接,再3次握手和4次断开
(7) 记录日志:供后期分析
第二、http介绍
1、 http服务器程序:
httpd (apache)
nginx
lighttpd
应用程序服务器:
IIS
tomcat, jetty, jboss, resin
webshpere, weblogic, oc4j(oracle)
www.netcraft.com(进行相应统计份额)
2、httpd的安装配置和使用:
httpd: apache
a patchy server = apache (充满补丁的服务器)
ASF: apache software foundation
----该组织其它应用:tomcat、spark
httpd的特性:
高度模块化:core + modules
DSO: Dynamic Shared Object(模块动态加载、卸载)
MPM:Multipath Processing Modules(多路处理模块)
prefork:多进程模型,每个进程响应一个请求;
一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;
即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
每个进程连接的套接字,一个端口一个进程。
worker:多线程模型,每个线程响应一个请求;
一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;
m进程,n线程:m*n
event:事件驱动模型,每个线程响应n个请求;
一个主进程:生成m个子进程,每个进程直接n个请求; m*n
httpd-2.2: event为测试使用
httpd-.24:event可生产使用
3、httpd的功能特性:
虚拟主机
IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口;
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest 摘要认证:file mysql等
支持第三方模块
4、安装httpd: (httpd.apache.org官方站点)
rpm包
源码编译安装
yum list all httpd* 显示httpd版本
第三部分: httpd安装
1、回顾:
MPM:(多路处理模块)
prefork: 多进程模型,每个进程响应一个请求;
worker:多线程模型,第个线程响应一个请求;
event:事件驱动模型,一个线程响应多个请求;
并发服务器响应请求:
单进程I/O模型
多进程I/O模型
复用的I/O模型
多线程模型
事件驱动
复用的多进程I/O模型
httpd的基本配置和应用(2)
httpd.apache.org
2.2
2.4
2、http安装
利用yum list all httpd*,查看以安装安装包
rpm –ql httpd-tools查看安装包配置的相就应包
rpm包安装的httpd的默认工作目录(根目录):/etc/httpd
程序环境
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf
分段配置文件:/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd (在centos 7无此目录,通过systemctl进行管理)
脚本的配置文件:/etc/sysconfig/httpd
模块文件目录: 实际为链接
/etc/httpd/modules --> /usr/lib64/httpd/modules
主程序文件: rpm –ql httpd |grep bin
centos 6主程序文件:
/usr/sbin/httpd (prefork)
/usr/sbin/httpd.worker (worker)
/usr/sbin/httpd.event (event)
centos 7主程序文件:
日志文件目录:
/var/log/httpd
access_log: 访问日志文件
error_log: 错误日志
站点文档目录:
/var/www/html
启动systemctl start httpd(在启动前注意DNS解析)
通过查看/var/log/httpd/目录下的error_log以及ss –tnl查看80端口,
并通过浏览器查看
欢迎页/etc/httpd/conf.d目录中welcome.conf(默认)
/var/www/html htm为网页文件根目录
同时通过tail /var/log/httpd/access_log查看访问目录
第四部分;httpd配置
配置文件:
Directive Value (Directive不区分大小写)
指令 值
# grep "Section" httpd.conf
### Section 1: Global Environment
### Section 2: ‘Main‘ server configuration
### Section 3: Virtual Hosts
‘Main‘ server((主服务器-中型主机)和Virtual Hosts不能同时启用;
默认启用的是‘Main‘ server;
1、指定监听地址和端口
Listen [IP:]80 #修改完成后需要重新启动
(1) IP省略时表示监听本机上所有可用的IP地址;
(2) Listen指令可以出现多次,用于指明多个不同的监听端口或套接字:
Listen 172.16.100.11:80
Listen 172.16.100.11:8080
2、持久连接相关
持久连接:连接建立后,每个资源获取结束不会断开连接,而继续等待其它资源请求并完成传输;
如何断开?
数量限制:如100个
时间限制:如60秒
劣势:对并发访问量较大的服务器,开持久连接会有些请求得不到服务;
改进:减短,httpd-2.4支持毫秒级
非持久连接:每个资源都是单独通过专用的连接进行获取
KeepAlive Off|On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
#默认情况 下以上参数在centos 6环境,7中需要单独配置
测试: (http请求谁请求谁断开)
# telnet Server 80
GET /URL HTTP/1.1
Host: Server (回车二次)
结尾:connection closed 说明是非持久链接
3、MPM
多路处理模块:并发请求响应的不同实现
prefork, worker, event
httpd-2.2 不支持同时编译多个不同的MPM,rpm安装的httpd-2.2提供了
三个文件分别用于实现提供对不同的MPM的支持;确认方法:
# ps aux | grep httpd
默认为/usr/sbin/httpd,其为prefork;
查看模块列表:
httpd -l: 查看静态编译的模块
httpd -M: 查看所有模块,包括静态编译和DSO模块
静态编译说明 已编译进程序,共同可动态装卸载
httpd -t -D DUMP_MODULES 与上相同
更换支持不同的MPM的主程序: (以下参数在centos 6版本中)
编辑/etc/sysconfig/httpd
修改参考如下:
在centos 7版本中已忽略
centos7 :/etc/httpd/conf.modules.d/00-mpm.conf
启用变量:HTTPD
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 8 #默认启动空闲进程 root为主,apach为子进程
MinSpareServers 5 #最少空闲进程
MaxSpareServers 20 #最大空闲进程
ServerLimit 256 # 最大多少进程响应客户请求
MaxClients 256 #最大客户端并发请求
MaxRequestsPerChild 4000 # 每个子进程最大请求数量
</IfModule>
# worker MPM 三级:子进程、线程 、
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 4 #多少个子进程
MaxClients 300
MinSpareThreads 25 #最少空闲线程数
MaxSpareThreads 75
ThreadsPerChild 25 #每个子进程多少个线程
MaxRequestsPerChild 0 #每个子进程最大请求数量 、无限制
</IfModule>
4、DSO 【动态装卸模块】
配置指令模块加载:
LoadModule <module_name> <module_path>
#以centos 6文件中修改httpd.conf文件添加注释即可, 以centos 7环境中
模块路径:可使用相对路径
相对于ServerRoot指令指向的位置而言;(ServerRoot定义起始位置/etc/httpd)
注意:建议使用service httpd reload重新装载配置文件(针对centos 6)
5、定义‘Main‘ server的文档页面路径 (方法适用于centos 6)
默认/var/www/html/
mkdir /data/web/html -pv
httpd -t语法测试
DocumentRoot指令
文档路径映射:
DocumentRoot指向的路径为URL起始的位置
/var/www/html/images/1.jpg
http://server/images/1.jpg
6、站点路径访问控制
访问控制机制:
基于来源地址
基于账号
定义的方式有两种:
文件系统路径:
<Directory "/PATH/TO/SOMEDIR">
...
</Directory>
URL路径:
<Location "/URL">
...
</Location>
7、Directory中的访问控制定义
修改/etc/httpd/conf/httpd.conf
(1) Options
Indexes: 当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,
会将此路径下的所有资源以列表呈现给用户;非常危险,不建议使用;
FollowSymLinks:如果某页面文件是为指向DocumentRoot之外路径上的其它文
件时,将直接显示目标文件的内容;
None: none 所有特性都不启用
All: 所有的都启用;
alloverride Node 影响性能比较严重
(2) 基于来源地址访问控制
参考centos 6
Order: 检查次序
Order Allow Deny:只有明确Allow的来源地址,才允许访问,其它的均为Deny
Order Deny Allow:
Allow from:允许访问的来源地址
Deny from:拒绝访问的来源地址
示例:只允许allow的地址,拒绝100.2
Order Allow Deny
Deny from 172.16.100.2
Allow from 172.16.0.0/16
访问本机页面curl命令用于获取 html的资源
from后可跟上的地址格式:
IP地址;
网络地址:
172.16 #网段
172.16.0.0 #网段
172.16.0.0/16 #网段
172.16.0.0/255.255.0.0 #网段
8、定义默认的主页面
DirectoryIndex index.html index.html.var
自左而右,找到首次匹配到的文件;就将其做为默认主页面返回。
示例:在DirectoryIndex 后面添加相应的html页面地址
9、配置日志
二类为错误日志和访问日志
错误日志: 相对路径: /etc/httpd/目录
ErrorLog logs/error_log
LogLevel warn(日志级别)alert :比这个warn级别的都会记录
访问日志:要定义日志格式 :使用logformat命令;后面为内置宏
log日志三种格式【combinded、common、combinedio】
参考链接:http://httpd.apache.org/docs/
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
日志:tail /var/log/httpd/access_log
%h: Remote host,客户端主机 ,相对服务器来说
%l: Remote logname (from identd, if supplied). 客户用户通过identd登录时使用名称;一般为空-;
%u: Remote user (from auth; may be bogus if return status (%s) is 401),用户认证登录
的名字;无登录机制一般-;
%t: Time the request was received (standard english format),收到客户端请求时的时间;
\": 显示引号本身,而不作为引用符号;
%r:First line of request,请求报文的首行 <method> <url> <version>
%>s:响应状态状态码 五位(1,2,3,4,5开头)
%b: Size of response in bytes, excluding HTTP headers,响应报文的大小,单位为字节
;不包含首部信息;
%{Referer}i:记录Http首部Referer对应的值;即访问入口,从哪个页面跳转至此页面;
如直接指定登陆时记录为空。
%{User-Agent}i:记录http首部User-Agent对应的值;即浏览器类型;
详情: http://httpd.apache.org/docs/2.4/mod/core.html#errorlogformat
10、路径别名
DocumentRoot "/var/www/html"
download
mp3
1.mp3
bbs
index.html
URL: http://www.magedu.com/download/mp3/1.mp3
URL: http://www.magedu.com/bbs/index.html
Alias /URL/ "/path/to/some_directory"
例如:Alias /bbs/ "/web/bbs/htdocs/" 把 BBS路径以 “/web/bbs
URL: http://www.magedu.com/bbs/index.html --> /web/bbs/htdocs/index.html
Alias /images/ "/web/pics/"
URL: http://www.magedu.com/images/a.jgp --> /web/pics/a.jpg
Centos 6在/etc/httpd/conf/httpd.conf中alias中
Centos 7 参考
11、设定默认字符集
AddDefaultCharset UTF-8
常用字符集:GBK, GB2312, GB18030
12、基于用户的访问控制
质询:
WWW-Authenticate: 服务器用401状态拒绝客户端请求,说明需要用户提供用户名
和密码;弹出对话框;
认证:
Authorization:客户端用户填入账号密码后再次发请求至服务器;认证通过,则请求授权;
示例:DocumentRoot "/var/www/html"
images 正常访问
bbs 正常访问
employee/ 不允许访问
安全域:需要用户认证后方能访问的路径
应该有其名称,用于向用户通知此认证的原因等;
http协议支持的认证方式:
basic:基本 (明文)默认
BASE64
digest:摘要
basic认证机制的实现
(1) 定义安全域
创建以下目录:
<Directory "/data/web/html/employee">
Options None #不启用前定义根目录
AllowOverride None #限制权限
AuthType Basic #认证类型
AuthName "Employee Infomation, only for employee" #提示信息
AuthUserFile /etc/httpd/users/.htpasswd #认证信息,需要自己创建
Require user tom jerry #针对一部分用户登陆
Require valid-user #与以上二选一
</Directory>
Require valid-user: 所有位于AuthUserFile文件中定义的用户都允许登录;
Require user user1 user2 ...: 仅允许user1,user2等出现AuthUserFile
文件中定义的特定几个用户登录;
虚拟用户:即非系统用户;
(2) 提供用户的账号文件
htpasswd命令用于维护此文件
htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
-c: 添加第一用户时创建此文件;
-m: 以md5格式加密用户密码存放;
-s: 以sha格式加密用户密码存放;
-D:删除指定用户
示例:接(1)创建/etc/httpd/users/,并生成文件
注意htpasswd第二时需要取消-c选项
(3) 组认证
<Directory "/data/web/html/employee">
Options None
AllowOverride None
AuthType Basic
AuthName "Employee Infomation, only for employee"
AuthUserFile /etc/httpd/users/.htpasswd
AuthGroupFile /etc/httpd/users/.htgroup
Require group GRP1 GRP2 ...
</Directory>
组文件:
每行定义一个组,格式
Grp_Name: User1 User2 ... 只要列出即可
示例:编辑/etc/httpd/users/.htgroup文件
httpd –t 检查语法
13、虚拟主机
一个物理器可以服务于多个站点,每个站点可通过一个或多个虚拟主机来实现;
httpd三种类型的虚拟主机:
基于IP
基于Port
基于FQDN :用户注册,并能解析域内的主机,主机名不能够相同
注意:得首先关闭‘Main‘ server 虚拟主机与Main Server不能同时存在
方法:注释DocumentRoot指令即可;以下方法适用于centos 6环境中
定义虚拟主机的方法:
<VirtualHost "IP:PORT">
ServerName #可随意
ServerAlias #可选
DocumentRoot #必选
</VirtualHost>
<VirtualHost *:80> #表示所有80端口
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
# mkidr –pv /vhost/{a.com,b.org}/htdocs
注意:大多数可用于全局或‘main‘ server中的指令,都可以定义有VirtualHost中;
示例1:基于IP
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
同时编辑每个目录下index.html <h1>内容</h1>
<VirtualHost 172.16.100.21:80>
ServerName www.b.org
DocumentRoot /vhost/b.org/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.31:80>
ServerName www.c.net
DocumentRoot /vhost/c.net/htdocs/
</VirtualHost>
注意:本机要配置上所有IP地址并能够用于通信;
示例2:基于Port
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:808>
ServerName www.b.org
DocumentRoot /vhost/b.org/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:8080>
ServerName www.c.net
DocumentRoot /vhost/c.net/htdocs/
</VirtualHost>
注意:httpd要监听这里指明的所有端口
Listen
示例3:混用IP和Port
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.21:80>
ServerName www.b.org
DocumentRoot /vhost/b.org/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:8080>
ServerName www.c.net
DocumentRoot /vhost/c.net/htdocs/
</VirtualHost>
示例4:基于FQDN
必须需要启用: NameVirtualHost 172.16.100.11:80
<VirtualHost 172.16.100.11:80>
ServerName www.a.com
DocumentRoot /vhost/a.com/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:80>
ServerName www.b.org
DocumentRoot /vhost/b.org/htdocs/
</VirtualHost>
<VirtualHost 172.16.100.11:80>
ServerName www.c.net
DocumentRoot /vhost/c.net/htdocs/
</VirtualHost>
使用cur命令查看
注意:额外经常用于每个虚拟主机的配置有
ErrorLog
CustomLog
<Directory>
<Location>
ServerAlias
14、内置的status页面
<Location /server-status>
SetHandler server-status #httpd内置程序,表示启动
Order deny,allow #启动程序
Deny from all
Allow from 172.16.0.0/16
</Location>
示例:通过172.16.16.100.11/server-status 进行该部
15:Curl命令
Curl是基于URL语法在命令行方式式工作的文件传输工具,它支持FTP、
http https,telnet dict File以及LDAP协议,CURL支持http的post,put
等方法,Ftp上传,kerberos认证,http上传、代理服务器,cookies、用户
名和密码认证,上传和下载文件断开续传、,http代理服务器管道(proxy tunneling),
甚至支持ipv6,socks5代理服务器中,通过http代理服务器上传文件到 FTP服务器。
curl常用 选项
-A/- -user –agent <string>设置用户代理发送给的服务器,模拟自己成为浏览器
模拟自己为chrome 40浏览器
-basic (使用http基本认证) -u 指定用户名和密码
--tcp-nodelay 使用gcp_nodelay选项
-e/- - referer <URL> 来源地址
--cacert <file> CA证书(SSL) 验证服务器端通过ssl
--compressed 要求返回是压缩的格式,gzip等格式返回
-H/- -header <line>自定义头信息传给服务器
-I /- - head 只显示响应报文首部信息(红色为起始行)
--limit-rate <rate>设置传输速度
-u/- - user <user[Password]>设置服务器的用户和密码
-0/- - httpd1.0使用http 1.0 (零)
用户:curl [options] [url…]
TCP拥塞控制,Magle算法
其它工具:elinks(全屏浏览器) 用户网站测试
直接显示获取的内容 -dump不进行交互模式,而直接将URL
的内容输出到标准输出
16、 使用mod_deflate模块压缩页面优化传输速度
适应场景:
节约带宽,需要额外消耗CPU(有浏览器不支持)
压缩比的资源,如文本,(图片、流媒体不适合)
setoutputfilter DEFLATE (setoutputfiler httpd内置)
可将以上文件加到配置文件中(不定义到virtualhost中)
#Mod_deflate configuration
测试命令
压缩格式
17、https
@1:基础
http over ssl=https 与http不同,是二进制、压缩的。利用443端口。
可通过ssl或tls进行加密传输
ssl:v3
tls:v1
https// scheme
@2:SSL会话的简化过程
首先是TCP三次握手,这是https未参与
(1) 客户端发送可供选择的加密方式,并向服务器请求证书。
(2)服务器将证书,及选定的加密方式给客户端,把自己的给客户端
(3)客户端进行证书验证
如信任发证书的CA,验证证书来源的合法性,用CA的公钥解密签名。
如能解密是CA所发。
下一步验证证书的内容的合法性,完全性验证(md5)
下一步检查证书的有效期限
下一步证书是否已被吊销
最后证书中拥有者的名字,与访问的目标主机要一致。
(4)客户端生成临时 会话密钥(对称密钥),并使用服务端的公钥加密此数据
发给服务器(密钥交换),完成密钥交换。
(5)服务器用此密钥加密用户请求的资源,响应给客户端。
CRL证书吊销列表,X.509数字证书的版本,CA证书签发机构,PKI公钥基础设备
会话结束,先拆除SSL会话,断开后再断开TCP链接(四次断开) ,ssl基于IP地址创建。
所以单IP的主机只可以使用一个https主机
@3:配置httpd支持https
(1)服务器申请数字证书
示例:
测试:通过私有CA发证书
(a)创建私有CA (证书服务器172.100
(b)在服务器上创建证书签署请求(web服务器100.11)100.100
(C)CA签证 --100.37(签证服务器)100.104
创建私钥和自签证书
生成自签证书
数据证索引文件touch index.txt
echo 01 >serial序列号
经过以上部分CA自签证书创建完成
下一步完成应用的证书签署请求
注意这里openssl中不指定x509,在输入服务器要与解析一致。生成请求文件
注意二端配置请求一致
返回16.104,证书文件名一般为crt结尾,生成证书文件
生成完成后返回给服务器端使用。如果提示签名不一致。删除
/etc/httpd/ssl文件中内容。
(2)配置httpd支持使用SSL,及使用的证书
#yum –y install mod_ssl
配置文件:/etc/httpd/conf.d/ss.conf
DocumentRoot
ServerName
SSLCertificationFile
SSLCertificateKeyFile
httpd –M |grep ssl 查看未安装
利用 yum info mod_ssl并进行安装
rpm –ql mod_ssl
备份配置文件进行编辑
编辑servername以及相应的DocumentRoot/路径
示例
编辑证书密钥
配置完成重启https服务
(3)测试基于https访问相应的主机
openssl s_client [-connect host:port] [-verify depth] [-cert filename]
测试工具 openssl自带的s_client -connect 那个服务器的那个端口。
-CAfile 指定CA证书位置。
Windows中将PEM文件扩展名修改为crt
18:httpd自带的工具程序
htpasswd : basic认证基于文件实现时,用到的账号密码文件
apachectl stop|start :httpd自带的服务控制脚本
apxs :yum install httpd-devel包:apache第三方扩展工具
rotatelogs:日志滚动工具(自动执行)
示例:access.log
access.log access.1.log
access.log access.1.log access.2.log
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行
ab:apache benchmark
19:http压力测试工具
ab:apache benchmark(模拟测试工具,无法模拟实际)
webbench(额外安装)
httP-Load(额外安装)
jmeter
loadrunner
tcpcopy(网易开发)
@1:ab :Apache HTTP server benchmarking tool
ab [options] URL
-c 并发:模拟多少个并发(并发峰值)
-n 多少个请求
-k 以持久连接模式测试
ulimited -n #调整用户当前同时打开的文件时(内核默认有限制)
ab –n 1000 –c 10 http://www.a.com/rc.txt
concurrency level:并发级别
time taken for tests:测试时长
complete request:完成请求数
failed requests:
write error:
total transerered:总传输数据量(有开销)大于html transfer
html transfered:
requested per second:多少并发下1秒请求数
time per request:完成1000个请求时间
time per request:1000中每个请求的时间
(一个并发一个套接字文件)
利用ulimit –n 3000(修改并发连接数量)
1000个请求,10个并发
第四部分:Http请求和响应报文
1、回顾:
httpd配置
Listen [IP:]Port
KeepAlived (On|off)
MPM(并发响应模型):prefork,worker,event
DSO:LoadModule Httpd -M
DocumentRoot(定义方法)
<Directory>
Options Index FollowSymLinks
Order
Allow From
deny From
< Loction>
DirectoryInex
ErrorLog
CustomLog(指定日志格式)---Logformat
%(Referer)i:引用referer首部的值。
Alias /URL/ “/Path/to/somedir” 别名
基于用户访问控制
认证方法:basic,digest
Authtype basic
AuthName “”
authUserFile
AuthGroupfile
Require User
Require Group
Require valid-user
工具:htpasswd
虚拟主机 :IP ,Port FQDN(由于http报文中包括主机)
2、http协议和httpd的配置
(一)URL
@1:url定义
URL统一资源定位符(Unifrom resource Locator)
组成:URL方案 :scheme
服务器地址:IP:port
资源路径:路径
http://www.magedu.com:80/bbs/index.php,
https://www.magedu.com:443/
http://,https://代表scheme,/bbs/index.php是资源路径
@2:URL基本语法
<scheme>://<user>: <password>@<host>: <port>/<path>;<params>?<query>#<frag>
params: 参数:类似表单的数据
示例:http://www.magedu.com/bbs/hello,gender=f (红标代表是参数,判断)
query:指名查询语句的查询条件
示例:http://www.magedu.com/bbs/item.php?user=tom&titil=abc
frag:片断,页面的标签位置
可以根据三种方法进行负载均衡判断
@3:相对URL(不完整,相对当前位置,一般用于同站点)
绝对URL(跨站使用)
(二)http协议
http:/0.9, http://1.0,http://1.1,http/2.0
1:http协议: 是无状态的(stateless)
服务器无法持续追踪访问者来源(利用cookie与session机制)
某客户端发送数据至服务端时,服务器将cookie部分数据给客户端
每个cookie有作用范围(每个服务器不同)
cookie(重--内容详细;轻--内容比较少)
session:服务器与客户端进程维护的微小数据结构,记录客户端在服务器访问行为
关联到cookie。
2:http事务:http一次请求和响应
请求;request报文 响应:response报文
@1:报文语法格式:
request报文(有统一类型,起始行不同)
<method><request-url><version>
<headers> #后面二个换行
<entity-body>
reponse报文
<version><status><reason-phrase原因短语》
<headers> #后二个换行
<entity-body>
说明:
method:请求方法,标准客户端希望服务器对资源执行的动作
常用:GET HEAD POST
version: http://<major>.<minor> 示例 http://1.1
status:统一三位数字:响应状态码 如200-成功,301-重定向,302,404-失败无资源,
502--失败服务器故障, 标记请求过程中发生的情况。
reason-phrase:状态码所标记的简要描述
headers:请求或响应的报文包括任意个首部,每个首部都有首部名称,后面跟一个
冒号,面后跟上一个可选空格,接一个值。
entity-body(实体部分)有用的数据块,可能为空
1):http请求方法methord(客户端告诉服务器做什么)
Get:从服务器获取一个资源(安全)
HEAD:只从服务器获取文档的首部(有起始行) 、
Post:向服务器发送要处理的数据(放到请求报文的实体部分,提交给服务器端)
Put:与get相反,将请求主题存储在服务器(实体部分包括内容)
DELETE:请求删除服务器上指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:可以请求服务器返回资源支持的方法
协议分析:报文tcpdump,tshark,wireshark
2) status(状态)服务器告诉客户端请求状态信息;5种
1XX:100-102,额外信息提示
2XX:200-206,成功类信息
3XX:300-305 重定向
4XX: 400-415 错误类响应码(因客户端错误)
5XX:500-505 错误类信息:(因服务器端错误)
常用状态码:
200:成功,请求的所有数据通过响应报文的entity-body部分发送。OK
301:请求URL指向资源已经被删除,但响应报文中通过location指明了
资源现在所处的新位置。(永久重定向)move-permantly
302:与301相似,但在响应报文中通过location指明资源现在所处临时
新位置;Found
304:客户端发出条件式请求,但服务器上的资源未发曾发生改变,则通过
响应此响应状态码通知客户端:Not Modified(客户端资源问服务器是否改变)
401:需要输入账号和密码认证后访问资源.Unauthorized
403:请求被禁止:Forbidden
404:服务器无法找到客户端请求资源,Not found
500:服务器内部错误 Internel Server Error
502:代理服务器从后端服务器收到一条伪响应Bad gateway。
请求数据通过代理服务器访问相应的资源利用trace方法
3)Headers:
格式:
Name Values:
响应首部和请求首部信息
首部的分类:
通用首部
请求首部
响应首部
实体首部
扩展首部
第一类: 通用首部:(可用在请求和响应报文当中)
Data :请求和响应报文创建时间
connection:连接方式:keepalive持久连接 ,close
Via:报文经过的中间节点
Cache-control:控制缓存生效机制
Pragme:兼容http1.1版本
第二类:请求首部:
Accept:通知服务器客户端能够接收的媒体类型(MIME)
Accept-Charset:接受的字符集
Accept-Encoding:接受的编码格式如gzip
Accept-Language:接受的语言
Client-IP:
Host:请求的服务器的名称和端口号
Referer:包括当前正在请求的资源的上一级资源。
User-Agent:客户端代理,浏览器类型
条件式请求首部:
Expect: 期望发什么信息
If-Modified-Since:自从指定时间后请求资源是否发性过修改
If-Unmodfied-Sinace:相反
If-None-Mache:本地缓存中存储的文档的Etage(扩展标签)
是否与服务器文档中Etage不匹配
if-match:
安全请求首部:
Authorization:向服务器发送认证信息,如账号和密码
Cookie:客户端向服务器发送cookie
Cookie2:
代理请求首部
Proxy-Authorization:向代理服务器认证
第三类:响应首部
信息性:
age:有效期(响应持续时长)
server: 服务器的软件名称和版本
协商首部:某资源有多种表示方法时使用
Accept_Ranges:服务器接受范围类型
Vary:服务器查看的其它首部列表
安全响应首部:
set-cookie:向客户端设置cookie
set-cookie2:
www-authenticate:来自服务器的对客户端的质询认证表单
第四类:实体首部
提供实体内容的信息
Allow:列出对次实体可使用的请求方法
Location:告诉客户端实体位于何处(重定向时使用)
Content-Encoding:内容编码格式
Content-Language:内容语言
content-length:主体长度
Content-Location:实体真正的位置
Content-Range:实体字节范围
content-Type:主体的对象类型
提供缓存相关内容:
Etag:实体的扩展标签
expires 实体过期时间
Last-Modified最后 次修改的时间