目录
前言:
1.Respond报文
1.1报文格式
1.2格式图解
2.状态行(首行)
2.1状态码/状态码解释
(1)200 OK
(2)404 Not Found
(3)403 Forbidden
(4)405 Method Not Allowed
(5)500 Internal Server Error
(6)504 Gateway Timeout
(7)302 Move temporarily
(8)301 Moved Permanently
2.2状态码小结
2.3版本号
3.响应报头(Header)
3.1报头格式
3.2常见属性
(1)Content-Type
(2)Content-Length
4.空行
4.1空行标识
4.2空行作用
5.响应正文
5.1正文标识
5.2正文内容
前言:
在了解完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。