简介
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
HTTP 1.1文档:
特点
- 请求/响应模式,http协议要求客户端要首先请求资源,然后服务器端处理并响应请求给客户端。
- 无状态。客户端每次访对于问服务器端都是没有区别的,服务器端不会跟踪用户状态,也不会知道用户是否还在线。但是我们经常会记录登录信息等用户状态,这时使用cookie和session技术来解决此问题。
- 无连接。每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 简单快速。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 数据格式灵活。HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
工作过程
HTTP工作过程可分为四步:
1、建立连接,客户端触发超级链接或提交表单等,触发访问http资源的操作时就会创建一个连接。
2、建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3、服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4、客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理和服务器之间通过一个单独的连接来完成。在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP 80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。
这个过程就好像我们打电话订货一样,我们可以打电话给商家,告诉他我们需要什么规格的商品,然后商家再告诉我们什么商品有货,什么商品缺货。这些,我们是通过电话线用电话联系(HTTP是通过TCP/IP),当然我们也可以通过传真,只要商家那边也有传真。
报文格式
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。SP 是分隔符。除了在最后的 CRLF 序列中 CF 和 LF 是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。
应答报文格式如下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。
状态码文档:
请求方法
- GET,通过请求URI得到资源
- POST,用于添加新的内容
- PUT,用于修改某个内容
- DELETE,删除某个内容
- CONNECT,用于代理进行传输,如使用SSL
- OPTIONS,询问可以执行哪些方法
- PATCH,部分文档更改
- PROPFIND, (wedav)查看属性
- PROPPATCH, (wedav)设置属性
- MKCOL, (wedav)创建集合(文件夹)
- COPY, (wedav)拷贝
- MOVE, (wedav)移动
- LOCK, (wedav)加锁
- UNLOCK (wedav)解锁
- TRACE,用于远程诊断服务器
- HEAD,类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
工具
我们在开发某些功能,特别是接口开发时,需要模拟http报文进行测试。下边介绍一下我常用的测试工具
- 火狐插件 RESTer,此插件比较轻量级推荐。
- SoapUI 功能齐全,软件太大,比较占用系统资源。