HTTP基本架构
用一张简单的流程图来展示HTTP协议基本架构:
HTTP交互图:
HTTP报文结构:
-
请求报文
HTTP请求报文由请求行、请求头、空白行和请求体4个部分构成。
①请求行:
由请求方法字段、URL字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
②请求头:
请求头由key/value(键值对)组成,每行为一对,key和value之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。
典型的请求头有:
User-Agent:生成请求的浏览器类型
Accept:客户端可识别的响应内容类型列表;星号用于按范围将类型分组。/表示可接受全部类型,type/表示可接受type类型的所有子类型。
Accept-Language: 客户端可接受的自然语言
Accept-Encoding: 客户端可接受的编码压缩格式
Accept-Charset: 可接受的字符集
Host: 请求的主机名,允许多个域名绑定同一IP地址
connection:连接方式(close或keeplive)
Cookie: 存储在客户端的扩展字段
③空白行:
最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。(起隔离作用)
④请求体:
请求内容主要用于POST请求,与POST请求方法配套的请求头一般有Content-Type(标识请求内容的类型)和Content-Length(标识请求内容的长度)
-
响应报文
①状态行:
由HTTP协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。
状态码由3位数字组成,第一位标识响应的类型,常用的5大类状态码如下:
1xx:表示服务器已接收了客户端的请求,客户端可以继续发送请求
2xx:表示服务器已成功接收到请求并进行处理
3xx:表示服务器要求客户端重定向
4xx:表示客户端的请求有非法内容
5xx:标识服务器未能正常处理客户端的请求而出现意外错误
常见状态码说明:
200 OK: 表示客户端请求成功
400 Bad Request: 表示客户端请求有语法错误,不能被服务器端解析
401 Unauthonzed: 表示请求未经授权,该状态码必须与WWW-Authenticate报文头一起使用
404 Not Found:请求的资源不存在,例如输入了错误的url
500 Internal Server Error: 表示服务器发生了不可预期的错误,导致无法完成客户端的请求
503 Service Unavailable:表示服务器当前不能处理客户端的请求,在一段时间后服务器可能恢复正常
②响应头:
一般情况下,响应头会包含以下,甚至更多的信息。
Location:服务器返回给客户端,用于重定向到新的位置
Server: 包含服务器用来处理请求的软件信息及版本信息
Vary:标识不可缓存的请求头列表
Connection: 连接方式(close或Keep-Alive:300)。
③空白行:
和上面的空白行意义一样,都是起隔离作用。
④响应内容:
服务端返回给请求端的文本信息。