阅读之图解HTTP-认识简单的HTTP协议
HTTP
- HTTP协议用于客户端和服务端之间的通信
- 通过请求和响应进行通信,请求由客户端发出,响应由服务器端回复
- 无状态协议,不保存状态信息,为了实现保存状态信息,引入了cookie
- 1.客户端发起第一次请求
- 2.服务器端,生成Cookie信息,通过set-Cookie首部字段信息,通知客户端保存Cookie
- 3.下一次客户端请求时,客户端会自动在请求报文上添加Cookie信息
- 4.服务器端收到,对比服务器上的内容,判定用户是谁
- 持久连接:最初HTTP,每进行一次HTTP通信,就要断开一次TCP连接,HTTP/1.1 引入了持久连接keep-alive,如果任意一端没有明确提出断开连接,则保存TCP连接
- 管线化:以前,发送请求需等待并收到响应之后,才能发送下一个请求,引入管线化技术之后,可以同时并行发送多个请求,而不需要等待响应了
HTTP报文
HTTP报文大致可分为报文首部和报文主体部分
报文主体 = 实体主体
实体 = 实体首部 + 实体主体
⚠️报文主体不是必须的,报文主体传送的内容,是应该被发送的数据
例如:
- 1.用户只是想获取资源,使用GET方法,请求报文的报文主体就没有内容了
- 2.用户向服务器传送文件,使用PUT方法,在请求报文的报文主体包含传送内容
- 3.服务器返回用户请求的资源,在响应报文的报文主体中包含请求资源
- 4.服务器返回304状态码时,告诉用户使用未过期的缓存,响应报文的报文主体为空
请求报文首部
请求行 = 请求方法 + 请求UR I+ 协议版本号 GET /index.html HTTP/1.1
请求访问某台HTTP服务器上的/index.html页面资源
请求方法
- GET:获取资源
- POST:传输请求报文主体,目的不在于获取响应的报文主体
- PUT:传输文件,在请求报文主体中加入文件内容
- HEAD:与GET方法一样,不过不返回报文主体内容
- DELETE:删除文件
- OPTIONS:询问支持的方法,查询指定资源支持的方法
- TRACE:追踪路径
- CONNECT:要求用隧道协议连接代理
响应报文首部
状态行 = 协议版本号 + 状态码数值 + 原因短语 HTTP/1.1 200 OK
状态码
状态码 = 状态码数值 + 原因短语
-
状态码类别
- 1XX:信息性状态码--------------接收的请求正在被处理
- 2XX:成功状态码----------------请求正常处理完毕
- 3XX:重定向状态码--------------需要进行附加操作以完成请求
- 4XX:客户端错误状态码---------服务器无法处理请求
- 5XX:服务器端错误状态码-------服务器处理请求出错
⚠️只要遵循状态码列表的定义,即使改变RFC2616中定义的状态码,或服务器端自行创建状态码都没问题
-
常见状态码
- 200 OK----------------------------表示服务器端正常处理了客户端发来的请求
不过,不同的请求方法,会得到不同的结果
使用GET方法时,对应的请求资源会作为响应返回;
使用HEAD方法时,对应资源则不会作为响应返回,只返回报文首部,服务器被动不返回报文主体 - 204 NO Content-------------------请求处理成功,但没有资源返回
响应报文中不含报文主体,服务器主动不返回报文主体 - 206 Partial Content----------------客户端进行了范围请求
实际上服务器上成功的执行了GET请求,但是客户端要求,返回指定范围内的数据 - 301 Moved Permanently-----------永久性重定向
客户端访问的资源,被服务器端永久的分配了新的URI(统一资源标识符),此时服务器端在响应报文中添加Location首部字段,客户端保存提示的URI,自动根据新的URI再次发松请求,得到数据 - 302 Found-------------------------临时性重定向
服务器端临时移动了资源,服务器带有新的URI响应,客户端不保存新的URI,自动根据新的URI发送请求,得到数据 - 303 See Other---------------------URI已经更新,明确提示客户端使用GET方法请求获取资源
与301,302对比,301,302 没有明确指定客户端下一次的请求方法,
但是,其实几乎所有的浏览器都会把POST改成GET,并删除请求报文中的报文主体部分 - 304 Not Modified--------------资源已找到,但不符合客户端传来的条件
其实与重定向没有关系,表示,客户端直接使用了未过期的缓存 - 307 Temporary Redirect------临时重定向
与302 相同,但307不会改变请求方法 - 400 Bad Request-------------请求中存在语法错误
- 401 Unauthorized-------------请求中的认证失败
- 403 Forbidden----------------服务器端不允许访问该资源
- 404 Not Found----------------服务器上没有该资源,或服务器端拒绝请求且不想说明理由
- 500 Internal Server Error-------服务器端发生了内部故障
- 503 Service Unavailable--------服务器暂时处于超负荷或正在进行停机维护状态
- 200 OK----------------------------表示服务器端正常处理了客户端发来的请求