当今最流行的HTTP协议版本为HTTP/1.1,本文内容均以此版本为准
一、报文
HTTP协议的报文分为两种,请求报文和响应报文
请求报文由4部分组成
1.起始行
2.请求头
3.空行
4.请求体
响应报文也由4部分组成
1.起始行
2.响应头
3.空行
4.响应体
其中起始行都是必须的,其他内容可选
请求报文起始行由3部分组成,请求方法、请求URL、协议版本
响应报文起始行也由3部分组成,协议版本、状态码、状态文本
详情参考https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Messages
二、请求方法
HTTP协议规定了9中请求方法,包括GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH
其中GET、HEAD,CONNECT、OPTIONS、TRACE方法无请求体,DELETE方法为可选请求体
其中HEAD、PUT、TRACE方法无响应体,DELETE方法为可选响应体
详情参考https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods
三、状态码
状态码范围为100-599,类型分为六种
1xx:请求未完成,其中101常用于websocket连接
2xx:请求成功,其中200为成功响应
3xx:需要重定向,其中301和302表示需要URL重定向,304表示资源未改变
400:客户端错误,其中403表示请求被禁止,404表示资源不存在
500:服务端错误,其中500表示服务器内部错误,503表示服务器拒绝响应
详情参考https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
四、MIME类型
浏览器通常使用MIME来判断数据类型,所以我们在使用Ajax请求时通常要手动设置MIME类型(Content-Type)
MIME的语法结构为
type/subtype
其中type有六种类型:text、image、audio、video、application、multipart,表示文本、图像、音频、视频、二进制数据、复合类型
在可以在请求体发送数据的Ajax请求中,通常需要指定Content-Type来确定传输的数据格式
以POST请求为例,原生表单提交支持其中的两种
application/x-www-form-urlencoded 参数以查询字符串编码
multipart/form-data 参数以boundary分割,可上传文件
常用的还有text/plain 纯文本形式
POST请求的以上三种方法和GET、HEAD请求合称为简单请求,简单请求和复杂请求在跨域访问(CORS)时会有区别
常用的类型还有现在最流行的application/json 参数为序列化的JSON字符串
详情参考https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Type