HTTP协议定义了6种常用与服务器进行数据交互的方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE,另外2种方法则为扩展型协议请求方法HEAD、OPTIONS。
URL的全称是Uniform Resource Location,即统一资源定位符,我们可以理解为:一个URL地址用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE分别对应着对这个资源的查,改,增,删4个操作。
GET
GET用于信息获取,且应是安全的和幂等的。
安全:指不修改信息,即GET操作用于获取信息但不更新信息。GET请求不应产生副作用,仅获取资源信息,如数据库查询,不进行数据增删改,不影响资源状态。
幂等:指对同一URL的来自不同连接的不同请求应返回同样的结果。
GET的HTTP请求中,只包含请求头,不包含请求数据,携带的数据只能作为请求资源的参数添加到URL中,英文和数字直接发送,中文等其他字符通过base64加密发送,空格转换为+。
由于浏览器(不是HTTP协议)对于URL长度可能存在限制,所以发送数据的长度也会受限,由于其数据(英文和数字)通过明文发送,所以数据也不安全。
通过GET方式发送一个请求来取得服务器上的某一资源时,该资源会通过一组HTTP响应头和响应数据(如HTML文本、图片、视频等)返回给客户端。
客户端浏览器会对GET方式请求获取的资源进行缓存。
HEAD
HEAD和GET本质上极为相似,区别在于HEAD的HTTP响应中不包含响应数据,仅包含响应头。
可以用来判断某个资源是否存在,而不需要取得数据的场景。
POST
根据HTTP规范,POST表示可能修改变服务器上的资源的请求。
理论上POST上传的数据大小没有限制,可传大量数据(IIS5为100KB,Apache可以通过修改服务器和PHP配置上传数据长度和上传文件大小限制)。
按照HTTP规范,更新资源应使用POST而不是GET,尽管几乎所有向服务器提交数据的操作都可以使用POST完成。但是这并没有严格遵守HTTP规范。
Post 分为两个步骤会先传递Header,后传递Data。从表现上来看Post 会先返回100 响应码,再返回200 响应码。
PUT
本质上PUT和POST极为相似,区别在于PUT通常指定了资源的存放位置,而POST提交的数据由服务端决定存放位置。
HTML表单不支持,使用较少。
DELETE
删除某一个资源,使用极少(amazon的S3云服务里面用这个方法来删除资源)。
OPTIONS
用于获取当前URL所支持的HTTP请求方法和header支持字段的列表。
当请求成功时,会在返回的HTTP响应头中包含一个名为“Allow”的字段,值形如“GET, POST”。
非简单请求时使用。
简单请求
- 请求方式:GET、POST、HEAD
- HTTP header:
- 无自定义头部字段
- 仅包含以下字段
- Accept、
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type仅为:
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
当一个请求为非简单请求时,浏览器会先发送一个options请求进行确认,确认成功后才会发送正式请求,如CORS跨域请求。
非简单请求会使服务器比简单请求的多一倍的压力,应尽量减少使用。
示例
请求(POST)
POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1
Host: api.efxnow.com
Content-Type: application/x-www-form-urlencoded
请求数据
响应(POST)
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length<?xml version="1.0" encoding="utf-8"?>
响应数据
报文
状态码