目录
前言:
在了解完HTTP协议的基本内容和HTTP请求报文,本节主要针对HTTP协议的第二种报文-响应报文进行详解,对报文的具体格式以及每个关键词含义进行详细介绍。
序列:HTTP/HTTPS - 003
1.Respond报文
1.1报文格式
HTTP协议响应是以字符文本的格式传输,具体包含以下四大部分:
- 首行:[版本号]+[状态码]+[状态码解释],分别使用空格分隔;
- 响应头(Header):请求的属性,每个键值对独占一行,冒号+空格分割键和值;
- 空行:遇到空行表示Header部分结束;
- 正文(Body):空行后面的内容都是Body,Body允许为空字符串。如果Bodv存在,则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html页面,那么html页面内容就是在body中。
1.2格式图解
具体的响应Respond报文格式分布如图:
开发中实际的响应报文实例:
下文将针对响应报文这四大部分内容进行具体详解。
2.状态行(首行)
[版本号]+[状态码]+[状态码解释]。
2.1状态码/状态码解释
状态码表示访问一个页面的结果(是访问成功,还是失败,还是其他的一些情况....)。
以下为常见的状态码。
(1)200 OK
“200”表示访问服务器成功,这是一个最常见的状态码。
(2)404 Not Found
“404”表示请求访问的资源,在服务器上不存在。
(3)403 Forbidden
“403”表示访问被拒绝,当前主机没有权限。
有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问),如果用户没有登陆直接访问,就容易见到403。
(4)405 Method Not Allowed
“405”表示访问的服务器不支持当前请求所用的方法。
HTTP中所支持的方法有GET,POST,PUT,DELETE等,但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)。
(5)500 Internal Server Error
“500”表示访问的服务器出现内部错误,这是一个不常见的状态码。
一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃),会产生这个状态码。
平时常用的网站很少会出现500(但是偶尔也能看到)。
(6)504 Gateway Timeout
“504”表示访问的服务器负载比较大,可能会导致出现超时的情况。
当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会导致出现超时的情况。
(7)302 Move temporarily
“302”表示访问的服务器临时重定向,临时需要跳转到其他页面。
登陆页面中经常会见到 302,用于实现登陆成功后自动跳转到主页响应报文的header部分会包含一个Location字段,表示要跳转到哪个页面。
(8)301 Moved Permanently
“301”表示访问的服务器永久重定向,永久性的跳转到其他页面。
永久重定向,当浏览器收到这种响应时,后续的请求都会被自动改成新的地址。
301也是通过Location字段来表示要重定向到的新地址。
2.2状态码小结
状态码总结:
- 以1开头表示信息性状态码;
- 以2开头表示成功状态码;
- 以3开头表示重定向状态码;
- 以4开头表示客户端错误状态码;
- 以5开头表示服务器错误状态码;
2.3版本号
版本号表示本次HTTP协议的响应使用的是HTTP协议的具体哪个版本。与请求报文相对应,否则会出现通信错误。
如:HTTP1.0、HTTP1.1和HTTP2.0。
3.响应报头(Header)
3.1报头格式
响应的属性,header的整体的格式也是“键值对”结构。每个键值对占一行,键和值之间使用分号分割。
响应报头的基本格式和请求报头的格式基本一致,类似于Content-Type,Content-Length等属性的含义也和请求中的含义一致。
报头的种类有很多,此处仅介绍几个常见的。
3.2常见属性
响应报头中的属性有很多都和请求报头中表示的含义相同,下边只介绍两个最关键的即可。
(1)Content-Type
表示响应的Body中的数据格式(响应报文里有Body,才有该属性存在)。
HTTP协议的响应格式一般有:
- html
- css
-
JavaScript
- json
- 图片
后续给服务器提返回给主机,不同的Content-Type,服务器处理数据的逻辑是不同的。
服务器返回数据给浏览器,也需要设置合适的Content-Type,浏览器也会根据不同的Content-Type 做出不同的处理。
(2)Content-Length
表示Body中的数据长度(请求报文里有Body,才有该属性存在)。
4.空行
4.1空行标识
遇到空行表示Header(报头)部分结束,同时也是Body(正文)部分开始。
4.2空行作用
HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有这个空行,就会出现“粘包问题”,空行就可以解决上述问题。
5.响应正文
5.1正文标识
空行后面的内容都是Body,Body允许为空字符串。
正文的具体格式取决于Content-Type。
5.2正文内容
正文的内容可以是:
- html
- css
-
JavaScript
- json
- 图片
以上便是HTTP协议的响应报文详解Respond。