http协议原理知识

时间:2014-08-10 18:52:41   收藏:0   阅读:253

HTTP(Hyper Text Transfer Protocol,超文本传输协议)

    HTTP协议是应用层的一种协议,是一种C/S架构服务,基于TCP/IP协议来通信,监听在TCP的80端口上。下面就开始介绍HTTP协议的相关内容,在开始之前先简单的介绍一下端口类型、TCP协议的功能和状态、Socket通信时的系统调用。

一、常见的端口类型

0~1023:管理员才有权限使用,永久地分配给某应用使用。

1024~41951:只有一部分被注册,分配原则上非特别严格。

41952~65535:这些端口是客户端平时使用最多的

    在linux中,可以通过 /proc/sys/net/ipv4/ip_local_port_range 文件来定义临时端口的起始数字和结束数字。

二、TCP协议的功能

    这主要是实在网络传输过程中的MTU(最大传输单元)决定的,数据必须打包成段才可以传送

    数据打包成段后,需要按序列号排序来发送,保证数据的连贯性

      通过滑动窗口来进行流量的控制。

    解决拥塞控制的办法是:采用慢启动和拥塞避免算法结合使用来控制拥塞

三、TCP的状态

    常见的TCP状态有:CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIME_WAIT, CLOSED。tcp协议通过tcp状态来标记当前处于通信过程的哪个阶段。

四、socket 通信机制

    Socket是IPC通信的一种方式,用于实现在同一主机或者不同主机之间的通信。socket通信在domain中实现,所谓的 domain 是识别一个socket的方法(socket地址格式)。

1、常见的domain:

2、socket的类型:

3、相关的系统调用:

客户端和服务端建立TCP会话的系统调用如下:(图片来自于《HTTP权威指南》书籍)

bubuko.com,布布扣

下面正式开始介绍HTTP协议的相关内容:

五、web资源

    HTTP协议实现的是客户端可以向服务端获得资源,称为web资源。在 HTTP1.0 协议中引入了MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展),使得我们请求的资源不再只是文本资源了。

1、常见资源类型:使用MIME来标记

2、资源名称:URI(Uniform Resource Identifier,统一资源标识)

    实际上,我们使用最多的是URL(统一资源定位符),用来描述一个特定服务器上某资源的特定位置,分为三部分:

例如:http://www.magedu.com:80/download/bash-4.3.1-1.rpm

六、常见的HTTP的方法

    在这里的方法可以理解为服务端和客户端之间的通信的API,也可以理解为函数。(博主自己的理解)

七、HTTP状态码:(常见的)

    所谓的状态码就是一些状态信息的编号,来表示各种不同的状态信息。

1、1xx:信息状态码,在HTTP 1.1协议中引入的

2、2xx:成功状态码

3、3xx:重定向类的状态码

4、4xx:客户端类的错误

5、5xx:服务器类的错误

八、一次Web资源请求的具体过程(服务器的角度)

大致流程如下图:(图片来源与《HTTP权威指南》书籍)

bubuko.com,布布扣

九、web服务器的I/O结构

      多个线程,每个线程响应多个用户请求,event 模型

十、httpd相关的特性

    httpd在这里指的是 apache 这个实现http协议的开源工具。apache历史悠久,在如今同类工具中使用率在50%左右。常见的还有 ngnix,lighttpd,gws等。

1、httpd的特性:

    统称,事实上有多个实现:

        prefork: 每个进程响应一个用户请求,预先生成多个空闲进程;

        worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;

        event: 启动多个线程,每个线程响应N个请求;靠 event-driven这个事件驱动来实现。

2、httpd的功能特性:

十一、HTTP协议的首部

1、常见的首部类型有:

2、具体说明

(1)通用首部

    这是客户端个服务端都可以使用的首部。

通用的信息性首部:

bubuko.com,布布扣

    在HTTP/1.0 中引入了第一个允许HTTP应用程序缓存对象本地副本的首部,这样就不需要总是直接从源服务端获取了。所以出现了缓存首部。

bubuko.com,布布扣

(2)请求首部

    请求首部只是定义在请求报文中的首部。用来说明是谁在发送什么请求,请求来源何处等。服务端可以根据请求首部给出最好的响应。

下图是请求的信息性首部:

bubuko.com,布布扣     

     Accept首部:

bubuko.com,布布扣

    条件请求首部:

bubuko.com,布布扣

安全请求首部:

bubuko.com,布布扣

代理请求首部:

bubuko.com,布布扣

(3)响应首部

    响应报文也有自己的首部集。目的是为了提供给客户端一些额外的信息。

下图是响应的信息性首部:

bubuko.com,布布扣

协商首部:

bubuko.com,布布扣

安全响应首部:

bubuko.com,布布扣

(4)实体首部

    有很多首部可以用来描述HTTP报文的负荷。由于请求和响应的报文中都可能包含实体部分。所以,在这2种类型的报文中都可能出现这些首部。

    实体首部提供了有关实体及其内容的大量信息,能够对资源的使用的各种有效的请求方法。

实体的信息性首部:

bubuko.com,布布扣

实体缓存首部:

bubuko.com,布布扣

内容首部:

bubuko.com,布布扣


    至此,HTTP的相关理论知识,介绍完毕。更多详细介绍没课参考《HTTP权威指南》。


本文出自 “逆水寒” 博客,请务必保留此出处http://guoting.blog.51cto.com/8886857/1538226

http协议原理知识,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!