一、请求行报文结构
http请求报文由三部分组成: 请求行、请求头 、请求正文。请求行、每个请求头与请求正文都由CRLF(回车换行,也即\r\n)分割开来,首行为请求行,余下的为请求头和请求正文,而请求正文有可能会为空,也可能包含CRLF情况,因此不能通过一个CRLF与请求头区别开来,所以采用两个CRLF来间隔请求头和请求正文
1.请求行
请求行的格式为:Method Request-URI HTTP-version CRLF
method为大写,有以下几种:GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT。但是实际使用中一般使用GET和POST就可以任何需求了,其他的被设计出来主要是让人从语义来直观看出该怎么处理数据,但是即使使用了DELETE方法,具体的删除还是得我们自己来实现。
Request-URI是一个统一资源标识符
HTTP-version为请求的HTTP的协议版本
GET请求示例GET /form.html HTTP/1.1 (CRLF)
POST请求示例POST /reg.jsp HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
2.请求头
请求头的格式为键值对。一般常见的请求头如下:
User-Agent:PostmanRuntime/7.26.8 表示产生请求的客户端程序
Accept:*/* 表示可接受的响应的类型为全部类型
Accept-Language:zh 表示可接受的响应的语言为中文
Accept-Encoding:gzip 表示客户端请求的压缩方式
Cookie:value 值由登陆之后服务端下发
token:value 值由登陆之后服务端下发
3.请求正文
二、HTTP响应报文
HTTP的相应也是由三部分组成:状态行、响应头、响应正文
状态行的组成为HTTP-version Status-code Reason-phrase CRLF
HTTP-version 为HTTP的版本,Status-code为响应状态码,Reason-phrase表示状态码的文本描述
状态码由三个数字组成,第一个数字表示响应类别,有以下类别
1xx:指示消息--表示请求已接收,继续处理
2xx:成功--表示消息已经成功接收、理解、接受
3xx:重定向--要完成请求必须进行进一步操作
4xx:客户端错误--请求语法有错误或者请求无法实现
5xx:服务器错误--服务器未能实现合法的请求
常见的状态码和状态描述:
100 continue 上传大文件前使用
101 switch protocols 升级协议使用
102 processing 服务正在处理
200 ok 请求成功
301 moved permanently 请求永久重定向
302 moved temporarily 请求临时重定向
304 not modified 文件未修改,可以直接使用缓存文件
400 bad raquest 客户端有语法错误,不能被服务器理解
401 unauthorized 请求未经授权,这个状态码必须和报头域WWW-Authenticate一起使用
403 forbidden 服务器收到请求,但是拒绝提供服务
404 not found 请求资源不存在,比如输入了错误的url
500 internal server error 服务器发生不可预期的错误
503 server unavailable 服务器当前不能处理客户端请求,一段时间后可能恢复正常