一、HTTP 协议特点
- 支持客户端/服务器模式
- 客户端请求时,只需发送请求方式和路径,请求的方法有GET/HEAD/POST 等方式
- HTTP 允许传输任何类型数据对象。正在传输的数据类型为Content-type 定义
- 无连接,每次连接仅处理一个请求,Server 处理完Client 的请求,收到Client 的回复后断开连接
- 无状态,对于事务处理没有记忆能力
二、HTTP 请求
http 请求由三部分组成:请求行、消息报头、请求正文。
2.1 请求行:由一个方法符号开头,空格分开,后面紧跟着URI 和协议的版本,格式如下:
①Method ②Request-URI ③HTTP-Version ④CRLF
①请求方法:
- GET 获取Request-URI 所标识的资源
- POST 在Request-URI 所标识的资源后附加新的数据
- HEAD 请求获取由Request-URI 标识的资源的响应消息报头
- PUT 请求服务器存储一个资源,并用Request-URI 作为其标识
- DELETE 请求服务器删除Request-URI 标识的资源
- TRACE 请求服务器回送收到的请求消息,主要用于测试和诊断
- CONNECT 保留使用
- OPTION 请求查询服务器的性能,或者查询与资源相关的选项和需求
HEAD 和GET 方法几乎是一样的,对于HEAD 请求的回应部分,它的HTTP 头部中包含的信息与通过GET 请求得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI 所标识的资源的信息。该方法常用于测试超链接有效性,是否可以访问,以及最近是否更新。
②Request-URI 是统一资源标识符
③HTTP-version HTTP 版本
④CRLF 表示回车和换行
2.2 消息报头稍后讲解
2.3 请求正文即对应请求的资源
三、HTTP 响应
http 响应也由三部分组成:状态行、消息报头、响应正文。
状态行格式如下,之间也是用空格分开:
①HTTP-Version ②status-code ③Reason-Phrase ④CRLF
①HTTP-Version 表示服务器HTTP 协议的版本
②status-code 表示服务器发回响应状态代码,三位数表示,第一个数代表响应类别
1XX:指示信息,表示请求已接收,继续处理
2XX:成功,表示请求已成功接收,理解和接受
3XX:重定向,要求请求必须进一步操作
4XX:客户端错误,请求有语法错误或者请求无法实现
5XX:服务器端错误,服务器未能实现合法的请求
③常见的状态代码与描述:
200:OK //客户端请求成功
400:Bad Request //客户端请求有语法错误,服务器无法理解
401:Unauthorized //请求未经授权
404:Not Found //请求资源不存在
500:Internal Server Error //服务器发生不可预期的错误
503:Server Unavailable //当前服务器不能处理客户端请求,一段时间可能恢复正常
e.g. HTTP/1.1 200 OK (CRLF)
四、HTTP 消息报头
http 消息报头包括:普通报头、请求报头和响应报头。每一个报头域为“名字+:+空格+值”组成,报头域名字大小写无关。
1. 普通报头:在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输消息。
e.g. Cache-Control: no-cache
2. 请求报头:请求报头允许客户端传输请求的附加信息及客户端自身信息。
e.g. Accept: image/gif
e.g. Host: blog.foool.net
e.g. User-Agent: Mozilla/4.0 (Compatible; MSIE6.0; Windows NT5.0)
3. 响应报头:响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI 所标识资源进行下一步访问的信息。
e.g. Server: Apache-Coyote/1.1
4. 实体报头:请求和响应消息都可以传递一个实体,一个实体由实体报头域和实体正文组成,但并不是实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文和请求所标识资源的元信息。
e.g. Content-Encoding: gzip
e.g. Content-Type: charset=GB2312
e.g. Expires: Thu,15 sep 2012 12:12:12 GMT
Pingback引用通告: 阿里云存储服务OSS API(python) | 呆鸥