html:编程语言,超文本标记语言
MIME:multipurpose internet mail extesion
工作机制:
http请求
http响应
web资源web:web resourse
静态文件:.jpg,.gif,.txt.js,.css,.mp3,.avi
动态文件:.php,.jsp,
媒体:
媒体类型(MIME类型):major/minor
text/html
text/plain
image/jpeg
image/gif
URI:uniform resource identifier
URL:uniform resource locator,用于描述某服务某特定资源的位置
scheme://server:port/path/to/resource
http://www.magedu.com/images/logo.jpg
URN:uniform resource naming
http协议版本:
HTTP/0.9:原型版本,功能简陋
HTTP/1.0:第一个广泛使用的版本,支持MIME
HTTP/1.1:增强了缓存功能
spdy
HTTP/2.0:
rfc
一次完整的http请求过程:
(1)建立或处理连接,接收请求或拒绝请求
(2)接收请求
接收来自于网路ode请求报文中对某资源的一次请求过程
并发访问模型(web I/O):
单进程I/O结构,启动一个进程处理用户请求,而且每次只处理一个,多个请求被串行响应
多进程I/O结构:并行多个进程,每个进程响应一个请求
复用I/O结构,一个进程响应n个请求
多线程模型:一个进程生成N个线程,每个线程响应一个用户请求,
事件驱动:event-driven
复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求
(3)处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息
元数据:请求报文首部
host:www.magedu.com 请求的主机名称
connection:
(4)访问资源:获取请求报文中请求的资源
web服务器:即存放了web资源的服务器,负责向请求者提供对方请求的静态资源或动态资源
/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)发送响应报文
(7)记录日志
http服务器程序:
httpd(apache)
nginx
lighttpd
应用程序服务器:
IIS
tomcat,jetty,jboss,resin
webshpere,weblogic
httpd送往安装配置和使用:
httpd:apache
a patchy server=apache
ASF:apache software foundation
httpd的特性:
高度模块化:core+modules
DSO:dynamic shared object
MPM:multipath procession modules
prefork:多进程模型,每个进程响应一个请求
一个主进程,负责生成n各子进程,子进程也被称为工作进程,每个子进程处理一个用户请求,即便没有 用户请求
也会提前生成多个空闲进程,随时等待进程的到来,最大不会超过1024个
worker
event
http协议:
http/0.9,http/1.0,http/1.1,http/2.0
http协议:stateless
服务无法持续追踪访问者来源
cookie,session
http事务:
请求:request
响应:response
报文语法格式:
request报文
response报文
method:请求方法,标明客户端希望服务器对资源执行的动作
GET、HEAD、POST
version:
HTTP/
status:
三位数字,如200,301,302,404,502,标记请求处理过程中发生的情况
reason-phrase:
状态码所标记的状态的简要描述
headers:
每个请求或响应报文可包含任意各首部,每个首部都有首部名称,后面跟一个冒号,再跟一个可选空格,接着是一个值
entity-body:请求时附加的数据或响应时附加的数据
method(方法):
GET:从服务器获取一个资源
HEAD:只从服务器获取文档的响应首部
POST:向服务器发送要处理的数据
PUT:将请求的主体部分存储在服务器上
DELETE:请求删除服务器上指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持使用的请求方法
协议查看或分析的工具:
tcpdump,tshark,wireshark
status(状态码):
1XX:100-101,信息提示
2XX:200-206,成功
3XX:300-305,重定向
4XX:400-415,错误类信息,客户端错误
5XX:500-505错误类信息,服务器端错误
常用的状态码:
200:成功,请求的所有数据通过响应报文的entity-body部分发送OK
301:请求的URL直线的资源已经被删除,但在响应报文中通过首部Location指明了资源现在所处的新位置,Moved Permantently
302:与301相似,但在响应报文中通过Location指明资源现在所处的临时新位置,Found
304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端,Not Modified
401:需要输入装好和密码认证方能访问资源,Unauthorized
403:请求被禁止,Forbidden
404:服务器无法找到客户端请求的资源,Not Found
500:服务器内部错误,Internal Server Error
502:dialing服务器从后端服务器受到了一条伪响应,Bad gateway
headers:
格式:
Name:Value
Content-Type |
text/html; charset=utf-8 |
Content-Typetext/html; |
charset=utf-8 |
Cxy_all |
baidu+c32a82d228d0caa092110a27f4a62f01 |
Date |
Mon, 19 Mar 2018 04:01:50 GMT |
Expires |
Mon, 19 Mar 2018 04:01:50 GMT |
Server |
BWS/1.1 |
Set-Cookie |
BDSVRTM=11; path=/ BD_HOME=0; …59; path=/; domain=.baidu.com |
Strict-Transport-Security |
max-age=172800 |
Transfer-Encoding |
chunked |
首部的分类:
通用首部
请求首部
响应首部
实体首部
扩展首部
通用首部:
Date:报文的创建时间
Connection:连接状态,如keep-alive,close
Via:显示报文经过的中间节点
请求首部:
Accept:通过服务器自己可接受的媒体类型
Accept-Charset:
Accept-Encoding:接受编码格式,如zip
Accept-language:接受的语言
Client-IP
Host:请求的服务器名称和端口号
Referer:包含当前正在请求的资源的上一级资源
User-Agent:客户端代理
条件式请求首部:
Expect:
If-Modified-Since:自从指定时间之后,请求的资源是否发生过修改
If-Unmodified-Since:
If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag不匹配
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:实体的扩展标签
Expores:实体的过期时间
Last-Modified:最后一次修改的时间
httpd(2):
centos 6:2.2
centos 7:2.4
安装方式:
rpm
编译安装:
centos 6:
程序环境
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
配置文件:
/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件:
/var/log/httpd
access_log:访问日志
error_log:错误日志
站点文档目录:
/var/www/html
配置文件的组成:
grep "SEssion" /etc/httpd/conf/httpd.conf
### Session 1:global senvironment
### Sesison 2:'main' server configuration
### Session 3:virtual hosts
配置格式:directive value
directive:不区分大小写字符
value:为路径时,取决于文件系统
常用配置:
1.修改监听的IP和port
Listen [IP:]port
/etc/httpd/conf/httpd.conf文件中修改
省略IP表示监听本机所有IP,Listen可重复出现多次
2.持久连接
persistent connection:连接建立,每个资源获取后不会断开连接,而是继续等待其他的请求完成
如何断开?
数量限制:100
副作用:对并发访问控制量较大的服务器,持久连接功能网会使用某些请求得不到响应
折中:使用较短的持久连接时间
httpd-2.4 支持毫秒级持久时间
非持久连接
KeepAlive On|Off
MaxKeepAliveRequests #
KeepAliveTimeout #
测试:
telnet host post
GET ?URL HTTP/1.1
Host:hostname or ip
3.MPM
Multipath process module:多道处理模块
prefork,worker,event
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个:rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持
确认方法:
ps aux | grep httpd
默认为/usr/sbin/httpd,其使用prefork
查看编译的模块列表:
# httpd -l
Compiled in modules:
core.c
mod_so.c
http_core.
查看静态编译及动态装载的模块:
# httpd -M
更换使用的httpd程序
/etc/sysconfig/httpd文件中
HTTPD=
配置所选用的MPM的属性
安装完默认使用prefork模型
StartServers 8 #服务启动后默认开启的进程数
MinSpareServers 5 #最少空闲进程数
MaxSpareServers 20 #最多空闲进程数
ServerLimit 256 #每个进程允许开启最多的子进程数
MaxClients 256 #每个进程最多用户链接数
MaxRequestsPerChild 4000 #长连接时每个用户最多请求数
worker模型:要支持worker模型需要配置/etc/sysconfig/httpd,开启以下行:
HTTPD=/usr/sbin/httpd.worker
StartServers 4 #服务启动默认开启的进程数
MaxClients 300 #最多同时客户连接数
MinSpareThreads 25 #最少空闲进程数
MaxSpareThreads 75 #最好空闲进程数
ThreadsPerChild 25 #每个进程开启的线程数
MaxRequestsPerChild 0
配置服务器支持keep-alived(长连接)
KeepAlive {On|Off} #是否支持长连接
KeepAliveTimeout 2 #长连接超时时间
MaxKeepAliveRequests 50 #超时时间内允许请求的次数
重启服务生效
PV,UV
PV:page view
UV:user view
独立IP量
300*86400=40W+
4.DSO
配置指令实现模块加载
LoadModule
模块路径可使用相对地址
相对于serverroot(/etc/httpd)指向的路径而言
/etc/httpd.modules/
5.定义'Main' server的文旦页面路径
DocumentRoot指向的路径为URL路径的起始位置
Document "/var/www/html"
test/index.html-->http://host:port/test/index.html
6.站点访问控制
可基于两种类型的路径指明对那些资源进行访问控制
文件系统路径:
URL路径:
...
访问控制机制:
基于来源IP地址:
基于用户账号:
7.Directory中"基于来源地址"实现控制访问
(1)options
所有可用特性:index includes FollowSymLinksOwnerMatch execCGI MultiViews
index索引:
followSymLinks:允许跟踪符号链接文件
(2)基于来源地址的访问控制机制
order:检查次序
order allow,deny
order deny,allow
allow from
deny from
来源地址:
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
可以使用通配符
8.定义默认主页面
DirectoryIndex index.html .var
9.日志设定
错误日志:
ErrorLog log/error_log
LogLevel warn
debug,info,notice,warn,error,crit,alert,emerg
访问日志:
customer
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h:客户端IP地址
%l:Remote logname (from identd, if supplied). -表示为空
%u:Remote user,(from auth,May be bogus if return status (%s) is 401 (unauthorized))
%t:Time the request was received,服务器接收到请求的时间
%r:First line of request.请求报文的首行信息
%s:响应状态码
%b:Size of response in bytes,响应报文的大小,单位是字节,不包括响应报文首部
%{VARNAME}i:请求报文当中“referer”首部的值,当前资源的访问入口,即从哪个页面中的超链接跳转而来。
%{User-Agent}i:请求报文中“User-Agent”首部的值,即发出请求用到的应用程序
10.路径别名
DocumentRoot "/www.htocs"
http://www.magedu.com/download/bash.rpm
-->/www/htocs/download/bash.rpm
Alias /URL/ "path/to/somedir/"
Alias /bbs/ "forum/htdocs"
http://www.magedu.com/bbs/index.html
-->/forum/htdocs/bbs/
11.设定默认字符集
AddDefaultCharset UTF-8
GBK,GB2312,GB18030
12.基于用户的访问控制
认证质询:
www-Authenticate:响应码为401,拒绝客户点请求,并说明客户端提供账号和密码
认证:
Authorization:客户端用户填入账号和密码后再次发送请求报文,认证通过则服务器端发送响应资源
认证类型:
basic:明文
digest:消息摘要
安全域:
需要认证后方能访问的路径
应该通过形成对其进行标识,并用于改制用户认证的原因
用户的账号和密码存储于何处:
虚拟账号,仅用于访问服务时用到的认证标识
存储:
文本文件
SQL数据库
ldap
nis
basic认证:
(1)定义安全域
Options None
AllowOverride None
AuthType Basic
AuthName "string"
AuthUserFile "path/to/HTTPD_user_passwd_file"
Require user username1 username2 ...
(2)提供账号和密码存储(文本文件)
使用htpasswd命令进行管理
htpassws [options] passwordfile username
-c:自动创建passwordfile,因此,仅应该在添加第一个用户时使用
-m:md5加密用户密码
-s:shal加密用户密码
-D:删除指定用户
(3)基于组进行认证
Options None
AllowOverride None
AuthType Basic
AuthName "string"
AuthUserFile "path/to/HTTPD_user_passwd_file"
AuthGroupFile "path/to/HTTPD_GROUP_file"
Require group group1 group2 ...
要提供用户账号文件和组文件
13 虚拟主机
有三种实现方案:
基于ip:
为每个虚拟主机准备至少一个ip地址
基于port:
为每个虚拟主机准备至少一个专用port,实践中很少使用
基于hostname
为每个虚拟主机尊卑至少一个专用hostname
可混合使用上述三种方式中 任意方式:
注意:
一般虚拟主机莫与中心主句混用,所以,要使用虚拟主机,先禁用中心主机
禁用中心主机:注释DocumentRoot
每个虚拟主机都有专用配置:
ServerName
DocumentRoot ""
ServerAlias:虚拟主机的别名:
ErrorLog
CustomLog
示例1:基于ip
ServerName web1.magedu.com
DocumentRoot "/vhosts/web1.htdocs"
ServerName web2.magedu.com
DocumentRoot "/vhosts/web12.htdocs"
访问通过172.16.100.6:80和172.16.100.7:80
示例2:基于port
ServerName web3.magedu.com
DocumentRoot "/vhosts/web3.htdocs"
ServerName web4.magedu.com
DocumentRoot "/vhosts/web4.htdocs"
访问通过172.16.100.6:80和172.16.100.6:8080
示例3:基于hostname
ServerName web1.magedu.com
DocumentRoot "/vhosts/web1.htdocs"
ServerName web2.magedu.com
DocumentRoot "/vhosts/web2.htdocs"
ServerName web3.magedu.com
DocumentRoot "/vhosts/web3.htdocs"
14.内置的status页面
Sethandler server-status
Order deny,allow
Deny from all
Allow from 172.16
基于账号实现访问控制
httpd-2.2
curl命令:
curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
curl [options] [URL...]
curl的常用选项:
-A/--user-agent
-basic:使用HTTP基本认证
--tcp-nodelay:使用TCP——NODELAY选项
-e/--referer:来源网址
用法:curl [options] [URL…]
另一个工具:elinks
SSL会话简化过程:
(1)客户端发送可供选择的加密方式,并向服务器请求证书
(2)服务器端发送证书以及选定的加密方式给客户端
(3)客户端取得证书并进行证书验证
如果信任给其发证书的CA
(a)验证证书来源的合法性,用CA的公钥解密证书上数字签名
(b)验证证书的内容的合法性,完整性验证
(c)检查证书的有效期限
(d)检查证书是否被吊销
(e)证书终于拥有者的名字,与访问的目标主机要一致
(4)客户端生成临时会话秘钥(对称秘钥),并使用服务器端的公钥加密此数据发送给服务器,完成秘钥交换
(5)服务器用此秘钥加密用户请求的资源,响应给客户端
注意:SSL会话是基于IP地址创建,所以单IP的合租记上,仅可以使用一个https虚拟主机
配置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