http知识汇总

一、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结构的扩展。


你可能感兴趣的:(知识汇总,http/httpd)