超文本传输协议 摘自《python web接口开发与测试》
1.主要特点:
(1)支持客户端/服务器模式
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST,每种方法规定了客户端和服务器联系的类型不同。
(2)灵活
http允许传输任意类型的数据对象,正在传输的类型由content-type加以标记。
(3)无连接
无连接含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并受到客户端的应答后,断开连接。
(4)无状态
http是无状态协议。指对事务处理没有记忆能力。
2.HTTP请求类型
请求行以一个方法开头,以空格分开,后面跟着请求的URI和协议版本,格式如下:Method Request-URI HTTP-Version CRLF
Method:表示请求方法;Request-URI:统一资源标识符;HTTP-Version:请求的HTTP协议版本;CRLF:表示回车和换行
请求方法有:
GET:请求获取Request-URI所标识的资源
POST:在Request-URI所标识的资源后添加新的数据
HEAD:请求获取由Request-URI所标识的资源的响应消息报头
PUT:请求服务器存储一个资源,并用Request-URI作为唯一标识
DELETE:请求服务器删除Request-URI标识的资源
TRACE:请求服务器回送收到的请求消息,主要用于诊断或者测试
CONNECT:保留将来使用
OPTIONS:请求查询服务器性能,或查询与资源相关的选项或需求
3.响应状态码
状态码由三位数字组成,第一个数字表示响应类别,有五种可能取值:
1XX:指示信息,表明请求已经接受,正在处理
2XX:成功,表明请求已被成功接收、理解、接受
3XX:重定向,要完成请求必须进行更进一步操作
4XX:客户端错误,请求有语法错误或请求无法实现
5XX:服务器端错误,服务器未能实现合法的请求
常用的状态码、状态说明:
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器理解
401 Unauthorized 请求未经授权, 这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求, 但是拒绝提供服务
404 Not Found 请求资源不存在,eg: 输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求, 一段时间后可能恢复正常
4.请求头信息与响应头信息
(1)请求头信息
请求报头允许客户端向服务器传递请求的附加信息以及客户端自身的信息。常用的有:
Accept: 请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif, 表明客户端希望接受GIF图象格式的资源;Accept:text/html, 表明客户端希望接受html文本。
Accept-Encoding: 请求报头域类似于Accept, 但是它是用于指定可接受的内容编码。
Accept-Language: 请求报头域类似于Accept, 但是它是用于指定一种自然语言。
Connection: 允许发送指定连接的选项。 例如指定连接是连续, 或者指定“close” 选项, 通知服务器,在响应完成后, 关闭连接。 从HTTP/1.1起, 默认都开启了Keep-Alive, 保持连接特性。
Host(发送请求时, 该报头域是必需的) ,Host请求报头域主要用于指定被请求资源的Internet主机和端口号, 它通常从HTTP URL中提取出来的。
User-Agent: 请求报头域允许客户端将它的操作系统、 浏览器和其它属性告诉服务器。 不过, 这个报头域不是必需的。
(2)响应头信息
响应报头允许服务器传递不能放在状态行中的附加响应信息, 以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
Location: 响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
Server: 响应报头域包含了服务器用来处理请求的软件信息。 与User-Agent请求报头域是相对应的。
WWW-Authenticate: 响应报头域必须被包含在401(未授权的) 响应消息中, 客户端收到401响应消息时候, 并发送Authorization报头域请求服务器对其进行验证时, 服务端响应报头就包含该报头域。
X-Frame-Options:有三个值:DENY表示该页面不允许在frame中展示, 即便是在相同域名的页面中嵌套也不允许。SAMEORIGIN表示该页面可以在相同域名页面的frame中展示。ALLOW-FROM uri表示该页面可以在指定来源的frame中展示。