7.3 HTTP协议
超文本传输协议(Hyper Text Transfer Protocol简称 HTTP)是互联网上应用最广泛的一种网络协议,是一种互联网应用的面向对象的协议,由于其简捷、快速的方式。适用于分布式超媒体信息系统。
目前在WWW中使用最多的是由RFC2616定义的HTTP1.1版本,HTTPng的建议以提出,它将成为下一代协议。
7.3.1协议特点Web系统的基础就是HTTP协议,它是一个基于请求与响应模式的、无状态的、由于层的协议、。由于HTTP只定义传输的内容是什么,不定义如何传输所以理解的HTTP,只需要理解协议的数据结构以及代表的意义即可。
HTTP协议的主要特点有以下几点
1、支持客户/服务器模式
简单来讲是由HTTP客户端发起一个请求,建立一个到服务器指定的端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送来的请求。一旦收到请求,服务器将客户端做出应答。
2、简单快速
客户向服务器请求服务时,只需要传送请求方法和路径即可。请求方法常用的有GET、POST、HEAD、PU、DELETE等,而每种请求方法都规定了不同的类型进行联系,其中GET请求的应用最为广泛。由于HTTP协议简单,使得HTTP服务器的规模小,因而通信速速很快。
3、灵活
允许传输任意类型的数据对象(ASCII文本、二进制流等)传输数据的具体类型在Content-type域中加以标记。
4、无链接:是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后立即断开连接。采用这种方式可以节省传输时间。
5、无记忆状态
是指协议对事物处理没有记忆能力。一方面缺少状态意味着如果后续处理需要前面的信息,则它必须重传。这样会导致每次连接传送的数据量增大,另一个方面由于服务不需要利用先前信息,从而实现较快应答。
7.3.2 HTTP连接方式
是基于TCP的连接方式,建立连接的方式有非持久和持久连接。绝大数的Web开发,都是构建在HTTP协议之上的Web应用。在HTTP1.1中使用非持久连接,HT-TP1.1默认使用了持久连接。
1、非持久连接
非持久连接就是每次连接只处理一个请求消息和一个响应消息。具体步骤如下:
1)首先HTTP客户端与服务器中的HTTP服务器建立一个TCP连接。HTTP服务器提供默认端口80监听来自HTTP客户的连接建立请求。
2)HTTP客户经由TCP连接相关联的本地套接字出发一个HTTP请求消息。
3)HTTP服务器经由TCP连接相关联的本地套接收这个请求消息,再从服务器主机的内存或硬盘中取出对象,经由同一个套接字向客户端发出包含该对象的响应消息。
4)HTTP服务器告知TCP关闭这个TCP连接(TCP要等客户收到这个响应消息后,才会真正终止这个连接)
5)HTTP客户经由同一个套接字接收这个响应消息,TCP连接随后终止。
6)给每一个引用的对象,重复上述1-5步骤
客户端和服务器之间每完成一个HTTP事务,需要建立一个TCP连接来传输报文。也就是说每次服务器发出一个对象后,相应的TCP连接就被关闭,每个连接都不能持续传输其他对象。由于TCP的连接具有慢启动的特性,换言之就是使用过的连接会比新建立的连接熟读快一些。如果同时处理不同客户发送的请求时,对Web服务器来说,无疑是严重增加了负担,同样也会造成网络使用效率的降低,这也是非持久连接最大的缺点。
2、持久连接
是指每个连接可以处理多个请求和响应事务。具体操作如下:
在HTTP1.1版本中持久连接设置默认行为,除非有其他的标识,否则服务器发出响应后TCP悔连接持续打开,后续的请求和响应都可以通过这个连接进行发送。
7.3.3HTTP报文结构
分为有请求报文和响应报文两种,它们都有五个成员组成
1、请求报文
指从客户端到服务器发送请求,报文结构如下:
第一行成员:请求行(Request-Line)
第二个成员:通用头(General-Header)
第三个成员:请求头(Request-Header)
第四个成员:实体头(Entity-Header)
第五个成员:实体主体(Entity-Body)
请求行以方法字段开始,后面分别是URL字段和HTTP协议版本字段,必须以CRLF结尾(也就是回车换行)SP是分隔符(空行)
2、响应报文
是指服务器端到客户端做出应答,报文结构如下:
第一成员:状态行(Status-Line)
第二个成员:通用头(General-Header)
第三个成员:请求头(Request-Header)
第四个成员:实体头(Entity-Header)
第五个成员:实体主体(Entity-Body)
状态码由3个数字组成,表示请求是否被理解或满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用,客户机无须用来检查或显示语法,常见的HTTP状态码见表7-2
7.3.4HTTP请求
主要由以下3个部分构成,方法-URL-协议/版本、请求头、请求正文。
HTTP1.1支持7中请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS和
TRACE。
GET:请求获取Request-URI所标识的资源
POST:在Request-URI所标识的资源后附加新的数据
PUT:q请求服务器存储一个资源,并用Request-URI作为其标识;
DELETE:请求服务器删除Request-URI所标识的资源
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。
TRACE:请求服务器回送收到的请求消息,主要用于从测试或诊断。
最常用的请求方法是GET和POST,下面主要介绍GER和POST方法。
1、GET请求方法,语法如下:
GET请求就是从服务器上获取数据,仅获取服务器资源,不对其进行修改。
第一行:GET/HTTP/1.1
其中GET就是请求方法:/表示请求的URL(根目录);HTTP1.1是协议和具体版本。URL完整地指定了要访问的网络资源,URI实际上是URI的一种特殊类型。
第二行:Accept:text/html,application/xaml+xml,image/gif,*/*
Accept请求头包含许多有关客户环境和请求正文的有用信息。应具体说明能接受的内容类型,也就是能在客户浏览中直接打开的格式。
第三行:Accept-Encoding:gzip,deflate
Accept-Encoding是指客户端支持服务器返回的gaip压缩数据,这样处理可以有效地减少网络传输所浪费的时间。比如服务器在传输过程中,会将HTML、JS、CSS等类型的资源经过压缩后再传给客户端,客户端收到响应数据后解压缩后进行展示。
第四行:Accept-Language 是指客户端能接受和处理的语言,此处zh-CN显示为中文。
第五行:Connection:Keep-Alive
该行是HTTP1.1预设的功能,当完成本次请求后,它使客户端服务器的TCP连接仍属于可连接状态,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
第六行:Host:www.lingting.club
Host是指请求的主机地址
第七行:User-Aaent:Mozilla/4.0(compatible:MSIE8.0;WindowsNT6.1;WOW64;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;InfoPath.2;.NET4.0C;NET4.0E)
User-Aaent:表示客户端的信息,对于服务器来说如果没有这个信息它就不知道客户处于什么环境来访问WWW服务,所以相关的日志信息记录的就是客户浏览器发送的内容。
第八行:空行
该行非常重要,是只有CRLF符号的行,它表示请求头已经结束。