一、http相关知识点:
http协议:是一种无状态(stateless)协议。
一次http事务结束后,链接立即断开;可见每次请求都要进行3次握手,4次断开,效率太低。
加速方式:
并行请求:浏览器一次发多个请求,服务器一次返回多个响应,现在的浏览器多线程的都支持并行请求。
并行链接有缺陷:每个事务都会打开/关闭一条新的链接,会耗费时间和带宽。由于TCP的慢启动特性,每条新链接的性能都会有所降低。可打开的并行链接数实际上是有上线的。
持久链接也叫保持链接:一次请求后不立即断开连接,等此页面的所有请求都得到响应后在断开。
持久链接的缺陷:如果持久时间过长,会导致其他请求被堵塞,造成其他客户端的请求一直无法访问,因此需要设置断开持久链接的条件超时和最大请求数,只要满足任何一个就会断开持久链接。对于http/1.0要想使用KeepAlive特性,在请求时必须手动指定Connection :keep-alive;对于http/1.1,在请求时默认Connection :keep-alive,无需手动指定。
1、http协议的版本:
http/0.9:1991年的版本,仅用于传输html文档,不可传输图片、声音等二进制文件。
http/1.0:引入了MIME(Multipurpose Internet Mail Extension
base64:将二进制数据编码成文本发送,并能够让接收方还原为原来的格式。)
可见1.0已经支持多媒体数据的处理;开始引入缓存功能,不过缓存控制较差;
并引入了keep-alive(保持链接)。
http/1.1:支持更多的请求方法,更精细的缓存控制,并支持持久链接。
注意:对于http/1.0要想使用KeepAlive特性,在请求时必须手动指定Connection :keep-alive
对于http/1.1,在请求时默认Connection :keep-alive,无需手动指定。
2、http的请求方法:
安全的方法:GET、HEAD
POST
PUT、DELETE、TRACE
扩展方法:LOCK、COPY、MOVE
GET:请求获取一个资源,需要服务器发送
HEAD:跟GET相似,但其不需要服务发送资源而仅传送响应首部。
POST:支持HTML表单提交。
PUT:跟GET相反,向服务写入文档,例如发布系统。
DELETE:请求删除URL指向的资源,“危险”。
TRACE:跟踪请求要经过的防火墙,代理或者网关等。
3、http的状态码:
1**:信息状态码。
2**:成功状态码。
200:成功
201:created。
3**:重定向状态码。
4**:客户端类错误。
403 :Forbidden 无权限,请求被服务器拒绝。
404 :Not Found 不存在
405 :Method Not Allowed ,不允许使用此方法请求相应的URL
5**:服务器类错误。
500:Internal Server Error:服务器内部错误。
502:Bad Gateway,代理服务器错误。
503:Service Unavailable,服务器此时无法响应。
4、http报文格式:
http事务:一次请求以及与其对应的响应。
http方法:GET、PUT、HEAD、POST、DELETE等。
http请求:客户端发送http请求报文。
请求报文格式:
<method><request-URL><version>
<headers>(请求首部,其格式为Name:Value)
空白行
<entity-body>(请求主题)
http响应:服务器端返回http响应报文。
响应报文格式:
<version><status>(响应的状态码)<reason-phrase>(状态码的说明信息)
<headers>
空白行
<entity-body>
5、http首部:
A、通用首部:请求和响应都可以使用的首部。
a、Connection:定义C/S之间关于请求/响应的相关选项。
对于http/1.0要想使用KeepAlive特性,在请求时必须手动指定Connection :keep-alive
对于http/1.1,在请求时默认Connection :keep-alive,无需手动指定。
b、Via:显示了报文经过的中间节点。
c、Cache-Control:缓存指示。
d、Pragma:
B、请求首部:请求可以使用的首部。
Client-IP:
Host:请求的主机名和端口号,虚拟主机环境下用到。
Referer:用于指明了当前资源的上一个资源的URL,常用于"防盗链"。
例如:一个页面a.html中有一个超链接的href为b.html;
如果在a.html页面中点击b.html则b.html的Referer为a.html
User-Agent:用户代理,使用什么工具发出的请求。
如IE浏览器,FireFox浏览器以及搜索引起的爬虫等等。
Accept请求首部:用户标明客户自己更倾向于支持对的方式。
Accept-Charset:支持使用的字符集。
Accept-Encoding:支持使用的编码方式。
Accept-Language:支持使用的语言。
条件请求首部:
Expect:期望的格式
If-Modified-Since:是否在指定时间内以来修改过此资源。
If-None-Match
跟安全相关的请求首部:
Authorization:客户端提交给服务器端的认证数据,如账号和密码。
Cookie:客服端发送给服务器端的身份标识。
C、响应首部:响应可以使用的首部。
Age:响应持续时间。
Server:向客户端标明服务器程序名称和版本。
Accept-Ranges:
对当前资源来讲,服务器所能接受的范围类型,如压缩,有的浏览器支持压缩有的不支持。
Set-Cookie:
服务器端在某客户端第一次请求时发给的令牌。
D、扩展首部:
非标准首部,可能是由程序开发者创建的,例如:X-Forward-For
E、实体首部:
用来指定实体属性。
location:资源的新位置。
Allow:告诉客户端允许对此资源使用的请求方法。
Expires:过期期限
Last-Modified:上次修改时间
二、一次web请求的基本过程:由客户端发起请求,进而由内核空间接收请求,进而由内核交给用户空间处理请求,处理过程中内核访问资源,交由用户空间来构建响应,进而交由内核空间发送响应,并记录日志。可见整个过程中经历了由内核空间到用户空间,再有用户空间变为内核空间的。访问的资源时是由内核空间完成的。为了提高效率可以减少资源内核空间和用户空间间的转换。
1、建立连接
2、接收请求
3、处理请求
4、访问资源
5、构建响应
6、发送响应
7、记录日志
注:通过分析日志记录可以获得UV(User View)和PV(Page View);UV:在单位时间内多少个独立IP访问;PV:在单位时间内访问页面的次数。
三、http的Client、Server、Application Server:
1、http-Client:IE、Firefox、chrome、Opera、Safari等。
2、http-Server:Httpd、Nginx、lighttpd、gws等,主要负责静态页面。
3、http-Application Server:IIS tomcat、jetty、resin等,主要负责动态页面。
注:访问http://www.netcraft.com 查看http-Server市场调查软件占有率。
四、Web服务器I/O结构:处理的是一次web请求的基本过程的“接收请求”。
1、单进程I/O结构:
Http服务器只有一个进程即单进程,所以一次只能服务一个请求,其他请求必须排队。可见效率低下。
2、多进程I/O结构:
为了服务多个请求,http服务器启动多个进程,能满足多个用户的请求,但服务器资源有限,所以启动的多进程数量有限,可见也不能处理太多请求。
3、复用的I/O结构:
单个进程响应多个请求(单进程开启多个线程来响应多个请求)。
4、复用多进程I/O结构:
多个进程,每个进程响应多个请求,是复用的I/O结构的扩展。