HTTP协议简介
2015-08-02 09:48
507 查看
HTTP是一个基于请求和响应模式的无状态,应用层的协议,常基于TCP的连接方式,广泛应用于B/S(浏览器/服务器)模式。
2、 客户端发送请求报文,请求相关URL
3、 服务器接收到请求之后,返回应答,即响应报文
4、 客户端将内容显示在浏览器上,然后断开连接
2、 简单快速:客户像服务器请求服务时,只需要传送请求方法和路径(常用的有GET HEAD POST方式)
3、 灵活:HTTP允许传输任意类型的数据对象,其类型由content-Type加以标志
4、 链接:限制每次连接只处理一个请求,处理完就断开链接。由于HTTP基于TCP协议,因此当客户端连续请求时,这种处理方式导致时间开销较大(需多次建立TCP连接),这种情形下采用长连接会比较有效。
5、 无状态:是指协议对于事务处理没有记忆能力,如果客户端请求同样的资源,需重传需要的数据。
补充:
a) 关于长连接和短连接:
客户端的长连接不可能无限期持续着,这样会造成服务器的并发量太大,因此需要有一个超时时间timeout(keep-alive表示持续连接),如
另外还可能指定max =xxx,指示这个长连接最多接收XXX此请求就断开。如果没有指定超时时间,服务端也可以执行四次挥手断开链接。总之,服务端为了控制并发量,需要有相应的解决措施。
b) 关于服务端如何判断传输结束:
判断传输的数据量是否达到Content-Length大小;没有Content-Length字段的采用chunked编码来判断,在传输的最后会有一个空的chunked块。
另外,为了控制客户端并发量,有的服务器只支持一个客户端只能有一个连接。常见的情形就是不支持多线程下载。
c) 流水线技术
指在一个TCP连接内,多个HTTP请求可以并行(像流水线一样),即在下一个HTTP请求的应答完成之前就发起;现在还有很多技术瓶颈待解决,因此应用的还不广泛。如果使用流水线技术,那么客户端多连接并不能提高效率(都是带宽充分利用),除非需要抢占资源。
这里顺便提一下抓包软件wireshark,该软件可以抓取通过网卡的数据包。对于http协议而言,当http报文太大,到传输层就要进行TCP分片传输,然后到目的端再进行组装。在早些时候的wireshark软件中,分析出来的就是tcp包,而不是http报文(过滤选项过滤不出http),在1.12版本中已经可以过滤出来了,对分析而言方便了不少。
图 1 请求报文格式
请求方法有如下几种:
GET:请求获取Request-URI所标识的资源
POST:在Request-URI所表示的资源的消息报头附加新的数据
HEAD:请求获取由 Request-URI所标识的资源的响应消息报头(常用于测试超链接的有效性,是否可用)
PUT: 请求服务器存储一个资源
DELETE:请求服务器删除Request-URI所标识的资源
TRACE:请求回送收到的请求消息
CONNECT: 保留
OPTIONS:请求查询服务器的性能,或查询资源相关选项
请求的URL为主机名(域名)后的请求资源的URI,如http://host[:port][/abs_path],其中port缺省为80,abs_path为请求的URL,当只请求主域名的话,URL为/
图 2 响应报文格式
状态码是一个三位整数,其中第一位定义的响应的类型:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
用wireshark抓取请求www.baidu.com的http报文,其请求报文和响应报文如下:
图 3 请求报文
图 4 响应报文
从请求报文中可以看出请求报文没有主体部分(图中没标出,可以自己实践一下)响应码可以看出资源重定向了。当成功获取请求,响应码为200 ok
http工作流程
1、 首先客户端和服务器建立tcp连接。2、 客户端发送请求报文,请求相关URL
3、 服务器接收到请求之后,返回应答,即响应报文
4、 客户端将内容显示在浏览器上,然后断开连接
http报文特点
1、 支持客户/服务器模式 C/S2、 简单快速:客户像服务器请求服务时,只需要传送请求方法和路径(常用的有GET HEAD POST方式)
3、 灵活:HTTP允许传输任意类型的数据对象,其类型由content-Type加以标志
4、 链接:限制每次连接只处理一个请求,处理完就断开链接。由于HTTP基于TCP协议,因此当客户端连续请求时,这种处理方式导致时间开销较大(需多次建立TCP连接),这种情形下采用长连接会比较有效。
5、 无状态:是指协议对于事务处理没有记忆能力,如果客户端请求同样的资源,需重传需要的数据。
补充:
a) 关于长连接和短连接:
客户端的长连接不可能无限期持续着,这样会造成服务器的并发量太大,因此需要有一个超时时间timeout(keep-alive表示持续连接),如
另外还可能指定max =xxx,指示这个长连接最多接收XXX此请求就断开。如果没有指定超时时间,服务端也可以执行四次挥手断开链接。总之,服务端为了控制并发量,需要有相应的解决措施。
b) 关于服务端如何判断传输结束:
判断传输的数据量是否达到Content-Length大小;没有Content-Length字段的采用chunked编码来判断,在传输的最后会有一个空的chunked块。
另外,为了控制客户端并发量,有的服务器只支持一个客户端只能有一个连接。常见的情形就是不支持多线程下载。
c) 流水线技术
指在一个TCP连接内,多个HTTP请求可以并行(像流水线一样),即在下一个HTTP请求的应答完成之前就发起;现在还有很多技术瓶颈待解决,因此应用的还不广泛。如果使用流水线技术,那么客户端多连接并不能提高效率(都是带宽充分利用),除非需要抢占资源。
这里顺便提一下抓包软件wireshark,该软件可以抓取通过网卡的数据包。对于http协议而言,当http报文太大,到传输层就要进行TCP分片传输,然后到目的端再进行组装。在早些时候的wireshark软件中,分析出来的就是tcp包,而不是http报文(过滤选项过滤不出http),在1.12版本中已经可以过滤出来了,对分析而言方便了不少。
HTTP报文格式
HTTP报文分为请求报文和响应报文两种,其报文格式分别如下:请求报文
请求报文包含请求行、首部行、空行及主体,格式如下:图 1 请求报文格式
请求方法有如下几种:
GET:请求获取Request-URI所标识的资源
POST:在Request-URI所表示的资源的消息报头附加新的数据
HEAD:请求获取由 Request-URI所标识的资源的响应消息报头(常用于测试超链接的有效性,是否可用)
PUT: 请求服务器存储一个资源
DELETE:请求服务器删除Request-URI所标识的资源
TRACE:请求回送收到的请求消息
CONNECT: 保留
OPTIONS:请求查询服务器的性能,或查询资源相关选项
请求的URL为主机名(域名)后的请求资源的URI,如http://host[:port][/abs_path],其中port缺省为80,abs_path为请求的URL,当只请求主域名的话,URL为/
响应报文
响应报文包含状态行、首部行、空行及主体图 2 响应报文格式
状态码是一个三位整数,其中第一位定义的响应的类型:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
实例分析
讲了那么多,现在实际分析一下:用wireshark抓取请求www.baidu.com的http报文,其请求报文和响应报文如下:
图 3 请求报文
图 4 响应报文
从请求报文中可以看出请求报文没有主体部分(图中没标出,可以自己实践一下)响应码可以看出资源重定向了。当成功获取请求,响应码为200 ok