HTTP:(HyperText Transfer Protocol 超文本传输协议)刚开始是给浏览器使用的,注:以下图片来自小码哥教育
一:ABNF语法报文格式
HTTP报文是按照ABNF语法描述规范进行编写的,具体格式如下:
start-line*(head-field CRLF)CRLF[message-body]
- start-line = request-line/status-line
- request-line = method SP request-target SP HTTP-version CRLF
- status-line = HTTP-version SP status-code SP reason-phrase CRLF
- header-field = field-name:OWS field-value OWS
- OWS = (SP / HTAB)
- field-name = token
- field-value = *(field-content / obs-fold)
- message-body = *OCTET
SP代表空格,CRLF代表换行,*代表一个或多个,OWS代表空格或制表符,[] 代表可选
请求报文由请求行,请求头,请求体三部分组成,如果请求方式为Post请求,则我们发送的请求参数会放在请求体里,如果请求方式为GET请求,则请求参数直接拼接在URI后面,
示例:
请求报文
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
响应报文
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: keep-alive
二:报文解析
1.请求方式,通常我们用的是Get和Post请求,
GET请求常用来做查询操作
POST常用来做增删改的操作
HEAD:请求得到与GET请求相同的响应,但没有响应体,使用场景:在下载一个大文件前,先获取其大小,再决定是否下载
OPTIONS:获取服务器支持哪些方法
PUT:用于对存在的资源进行覆盖
PATCH:用于对资源进行部分修改,资源不存在会创建
DELETE:用于删除指定的资源
TRACE:环回测试,主要用于HTTP请求的测试或诊断
2.HTTP版本
目前最广泛使用的是1.1版本,最新的是2.0版本由Google开发,3.0版本在草稿阶段
3.常见请求头
User-Agent:浏览器身份标识字符串
Host:服务器的域名,端口号
Date:发送的时间
Referer:前一个链接
Content-Type:请求体的类型,application/x-www-form-urlencoded(表单提交默认),multipart/form-data(文件上传),application/json(消息主体是序列化的json串),text/plain(空格转换为+符号,但不对特殊字符编码)
Content-Length:请求体的长度
Accept:能够接受的响应内容类型,text/plain等
Accept-Charset:能够接受的字符集,utf-8
Accept-Encoding:能够接受的编码方式列表
Accept-Language:能够接受的响应内容的自然语言列表en-US
Range:仅请求某个实体的一部分,断点续传
Origin:发起一个针对跨域资源共享的请求,和响应头Access-Control-Allow-Origin对应
Cookie:之前通过服务器Set-Cookie发送的Cookie,和响应头的Set-Cookie对应
Connection:该浏览器想要优先使用的链接类型
Cache-Control:用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令
4.状态码,状态码分为5类:
信息响应:100-199
成功响应:200-299
重定向:300-399
客户端错误:400-499
服务器错误:500-500
常见状态码:
100:Continue,继续发送剩余请求
200:OK 成功
302:Found 请求的资源被暂时的移动到了由Location头部指定的URL上,重定向
304:Not Modified 可以使用缓存的内容
400:Bad Request 语法无效
401:缺乏目标资源要求的身份验证凭证
403:拒绝授权访问
404:无法找到请求资源
405:服务器禁止了使用当前HTTP方法的请求
406:服务器无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应
408:服务器想要将没有在使用的连接关闭
500:服务器出问题了
501:请求的方法不被服务器支持
503:服务器停机维护或超载
5.常见响应头
Date:发送消息的时间
Server:服务器的名字
Expires:超过该时间则认为响应已过期
Content-Type:响应体的类型:
text/html(HTML格式)
text/xml(XML格式)
application/json(json格式,官方)
text/json(json格式,相当于一个广泛的山寨版本)
text/javascript(javascript格式)
text/plain(纯文本格式),image/png(png图片格式)
Access-Control-Allow-Origin:跨域,如果设置*则表示支持所有IP访问
Location:用来进行重定向
Set-Cookie:用来返回一个Cookie让客户端保存