您的位置:首页 > 理论基础 > 计算机网络

HTTP协议简述

2015-10-01 11:11 405 查看
HTTP(HyperText Transfer Protocol):超文本传送协议

1、HTTP操作过程

HTTP是一个应用层协议,使用TCP连接进行可靠的传送。HTTP本身是无连接的,就是说虽然HTTP采用了 TCP连接,但通信双方在交换HTTP报文之前不需要先建立HTTP连接。

HTTP协议是无状态的:同一个客户第二次访问同一个服务器时,服务器的响应与第一次访问时相同。这种无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。

浏览器请求一个万维网文档收到整个文档所需要的时间:

首先需要HTTP建立服务器和客户端的TCP连接。这需要使用三次握手,当三次握手的前两部分完成时,HTTP请求作为第三次握手的第三个报文数据发送给万维网服务器。服务器收到HTTP请求报文时,酒吧所请求的文档作为响应报文返回给客户。

如图:请求一个万维网文档所用时间:(RTT(Round Trip Time)由三部分组成:链路的传播时间、末端系统的处理时间、路由器缓存中的排队和处理时间)



















HTTP/1.0的主要缺点就是每请求一个文档就要有两倍的RTT开销

HTTP/1.1很好解决这个问题,使用了持续连接。所谓持续连接就是万维网在发送响应仍然在一段时间内保持这条连接,使同一个客户和服务器可以在这条连接上传送后续的HTTP请求报文和响应报文。

持续连接有两种工作方式:非流水线式和流水线式

非流水线式:客户收到前一个响应后才能发出下一个请求。

流水线方式:客户在收到HTTP响应之前就能够接着发送新的请求。

2、代理服务器

代理服务器(proxy server)是一种网络实体,又称为万维网高速缓存。代理服务器把最近的一些请求的响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求和暂时存放的请求相同,就返回暂存的响应,而不用按照URL的地址再去英特网访问该资源。代理服务器可以在客户端或服务器端工作,也可以在中间系统工作。

3、HTTP报文结构

HTTP有两类报文:

①、请求报文——从客户向服务器发送请求报文

②、响应报文——从服务器到客户端的回答

HTTP是面向文本的,因此报文中的每一个字段都是一些ASCII码,因此各个字段的长度都是不确定的。

请求报文结构:



















响应报文结构:



















HTTP请求报文的一些特点:

1、请求行有三个内容:方法、请求资源的URL、请求版本

常用的请求报文中的方法:

OPTION : 请求一些选项的信息,请求查询服务器的性能或者查询与资源相关的选项和需求

GET:请求读取由URL所标志的信息,从服务器读取文档,GET方法要求服务器将URL定位的资源放在响应报文的正文中,回送给客户端

HEAD:请求读取由URL所标志的信心的首部,读取文档的信息而不是文档本身,来自服务器的响应不包括文档的正文

POST:给服务器添加信息(e.g.注释),提供信息给服务器

PUT:在指明的URL下存储一个文档,把新的或者需要替换的文档存放在服务器时,报文正文是需要存放的信息,URL是存放的位置。

DELETE:删除指明的URL所标志的资源

TRACE:用来进行回环测试的请求报文,请求服务器回送收到的请求信息, 主要用于测试或者诊断

CONNECT:用于代理服务器,以文档化但当前并未实现的一个方法,预留做隧道处理。

HTTP/1.0定义了三种基本方法:GET,POST,HEAD

HTTP/1.0增加了5种可能的方法:OPTION,TRACE,DELETE,PUT,CONNECT

2、首部行(请求和响应基本相同)

由关键字/值对组成,每行一对,关键字和值之间用冒号(:)分割。

常见的通用信息首部:

Connection:允许客户端和服务器指定与请求/响应相关的选项

Date:提供时间和日期,说明报文的创建时间

MIME-Version:给出发送端使用的MIME版本

请求信息首部:

Client-IP:提供运行客户端的IP地址

From:提供客户端用户的Email

Host:提供接收请求的服务器的主机名和端口

Referer:提供了包含当前请求URI的文档的URL(HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。)

User-Agent:产生当前请求的浏览器的类型

Accept:客户端可识别的内容类型列表(Accept首部为客户端提供了一种将其喜好和能力告知服务器的方式,包括他们想要什么,可以使用什么,以及最重要的,他们不想要什么。这样服务器就可以根据这些额外信息,对要发送的内容做出更明智的决定。Accept首部会使连接的两端都受益。客户端会得到他们想要的内容,服务器则不会浪费其时间和带宽来发送客户端无法使用的东西。)

类型有,Accept-Language,Accept-Encoding,Accept-Charset等

3、响应报文

状态码分为5类33种:

1XX:信息响应,如请求收到了或者正在进行处理

2XX:处理成功响应,表示动作被成功接收

3XX:重定向响应,为了完成指定的动作,必须接收进一步处理

4XX:客户端错误,如请求中包含语法错误或者请求无法实现

5XX:服务器错误,如服务器不能正确执行一个正确的请求

原因短语是状态码的可读性短语:

常见的有:OK, Bad Request,Not Found,Server Error

HTTP1.1的改进:

1、持久连接

2、新增加几种资源请求

3、身份认证

4、支持缓存

5、支持块编码

6、内容协商

7、高效使用IP地址

参考书籍:

计算机网络高级软件编程技术(第二版)——吴功宜等

计算机网络(第五版)——谢希仁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: