HTTP测试小组成员:任壮祖韩远兵李丽陈婧HTTP测试•HTTP协议综述•HTTP中GET和POST的主要区别•URL提取程序设计•HTTP协议的几个重要概念•1.连接(Connection)•2消息(Message)•3.请求(Request)•4.响应(Response)•5.资源(Resource)•6.实体(Entity)•7.客户机(Client)•8.用户代理(UserAgent)•9.服务器(Server)•10.原服务器(OrigenServer)•11.年龄(Age)•12.保鲜(Fresh)•13.陈旧(State)URI、URL和URN之间的区别与联系•URI:UniformResourceIdentifier,统一资源标识符;•URL:UniformResourceLocator,统一资源定位符;•URN:UniformResourceName,统一资源名称。•其中,URL,URN是URI的子集。•Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式:•URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。•URN:URL的一种更新形式,统一资源名称(URN,UniformResourceName)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。HTTP协议的主要特点可概括如下:•1.支持客户/服务器模式。•2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET和POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。•3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTPS概述•HTTPS(HypertextTransferProtocoloverSecureSocketLayer)•即HTTP下加入SSL层,用于安全的HTTP数据传输。HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面•默认HTTP的端口号为80,HTTPS的端口号为443。•SSL概述•SSL(全称:SecureSocketLayer)安全套接层协议主要是使用公开密钥体制和X.509数字证书技术保证信息传输的机密性和完整性,它不能保证信息的不可抵赖性,主要适用于点对点之间的信息传输,常用WebServerf方式。HTTP的宏观操作过程一次HTTP操作称为一个事务,其过程分为四步:(1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。(2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息,包括请求修饰符、客户机信息和可能的内容。(3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边的MIME信息包括服务器信息、实体信息和可能的内容。(4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。HTTP协议的内部操作过程•HTTP的头域主要包括:通用头,请求头域,响应头域和实体头域四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。•通用头域通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。•常用的通用头域(1)Cache-Control头域Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。•(2)Connection头域表示是否需要持久连接(Keep-Allive/close)•(3)Date头域Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如:Date:Tue,11Jul200018:30:30GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。HTTP常见的请求头域Accept:text/html,image用于告诉服务器,客户机支持的数据类型Accept-Charaset:ISO-8859-1客户机支持的编码Accept-Encoding:gzip客户机支持的数据压缩格式Accept-Language:zh-cn客户机支持的语言Host:告诉服务器,想访问的主机名Referer:从哪个资源访问服务器(常用于防盗链)User-Agent:Mozilla4.0告诉客户机的软件环境Cookie:可以带给服务器客户端的数据Connection:close/Keep-Alive请求后是关闭,还是保持连接HTTP常见的响应头域•HTTP/1.1200OK状态行,200是状态码表示一切OK•Location:状态码使用,告诉客户机应该找谁•Server:Microsoft-IIS/5.0告诉浏览器服务器的类型•Refresh:多长时间之后刷新一次•HTTP常见的实体头域•Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。•Content-Length:发送给HTTP服务器数据的长度•Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集•Content-Language:WEB服务器告诉浏览器自己响应的对象的语言者•Last-Modified:实体对象的最后修改的时间HTTP协议中非持续连接和持续连接•非持续连接在非持续连接中,一个TCP连接被每一组请求/应答所创建。下面是这个策略的步骤:•1.客户开启一个TCP连接并发送请求。•2.服务器发送响应并关闭连接。•3.客户读取数据直到它遇到了文件结束标记,然后关闭连接。HTTP协议持续链接•持续链接就是WEB服务器在发送响应后仍然在一段时间内保持这条链接,使同一个客户和该服务器可以继续在这条链接上传输后续的HTTP请求报文和响应报文。•HTTP协议持续连接的两种工作方式:1)飞流水线方式2)流水方式代理服务器•代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,请求信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。•大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。HTTP的报文结构•HTTP有两类报文:(1)请求报文——从客户端向服务器发送请求报文。(2)响应报文——从服务器到客户端的回答。请求报文•有三部分组成:请求行首部行实体主体(1)请求行•请求方法其中,GET和POST是常用请求方法(1)请求行•URL统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。HTTP的URL的一般形式是:HTTP://主机:端口/路径•协议版本HTTP/1.1HTTP/1.0HTTP/0.9(2)请求头部请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。首部行中HTTP最常见的请求头•Accept:浏览器可接受的MIME类型。•Connection:表示是否需要持久连接。•Host:初始URL中的主机和端口。•Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。•User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。•Accept-Encoding:浏览器能够进行解码的数据编码方式。•Content-Length:表示请求消息正文的长度•Cookie:辨别用户身份(3)空行最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。(4)实体主体请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。响应报文结构•由三部分组成:状态行首部行实体主体。(1)状态行格式如下:HTTP-VersionStatus-CodeReason-PhraseCRLF其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。1xx:指示信息--表示请求已接收,继续处理。2xx:成功--表示请求已被成功接收、理解、接受。3xx:重定向--要完成请求必须进行更进一步的操作。4xx:客户端错误--请求有语法错误或请求无法实现。5xx:服务器端错误--服务器未能实现合法的请求。常见状态代码、状态描述的说明如下:200OK:客户端请求成功。400BadRequest:客户端请求有语法错误,不能被服务器所理解。403Forbidden:服务器收到请求,但是拒绝提供服务。404NotFound:请求资源不存在,举个例子:输入了错误的URL。503ServerUnavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。首部行中HTTP最常见的响应头•Date头域表示消息发送的时间,时间的描述格式由rfc822定义。•Content-Length表示内容长度。•Server服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。•Content-Type表示后面的文档属于什么MIME类型。•Cache-Control指定请求和响应遵循的缓存机制。HTTP中GET和POST的主要区别一原理区别URL全称是资源描述符,一个URL地址用于描述一个网络上的资源,HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息POST一般用于更新资源信息GET用于信息获取时应该是安全的,幂等的。1)安全:该操作用于获取信息而非修改信息。它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。2)幂等:对同一URL的多个请求应该返回同样的结果。POST表示可能修改服务器上的资源的请求。实际情况实际中,很多人却没有按照HTTP规范去做,其中原因:1.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM