Response代表服务端响应部分,示例中Response部分代码如下
< HTTP/1.1 301 Moved Permanently # 状态行 # [协议版本] [状态码] [状态信息]
< Server: nginx/1.18.0 # 响应报头
< Date: Fri, 30 Jul 2021 01:26:20 GMT # 响应报头
< Content-Type: text/html # 实体报头
< Content-Length: 169 # 实体报头
< Connection: keep-alive # 实体报头
< Location: https://www.hagan.zone/ # 响应报头
<
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
* Connection #0 to host www.hagan.zone left intact
* Closing connection 0
Response也包含三个部分,分别为 状态行
消息报头(Header)
响应正文(Body)
,下面将详细讲解这三部分。
下面的讲解请参考示例中Response部分代码来理解。
1.状态行
状态行包含三个部分,分别为 协议版本
状态码
状态信息
< HTTP/1.1 301 Moved Permanently # 状态行 # [协议版本] [状态码] [状态信息]
1.协议版本
本次响应的协议版本为 HTTP/1.1
,常见协议版本如下
- HTTP/1.0
- HTTP/1.1
- HTTP/2.0
2.状态码
本次响应的状态码为 301
,常见状态码如下
1xx
指示信息,表示请求已接收,继续处理
2xx
成功,表示请求已被成功接收、理解、接受
200
OK,请求成功201
Created,对于那些要服务器创建对象的请求来说,资源已创建完毕202
Accepted,请求已接受,但服务器尚未处理204
No Content,Response包含状态行和消息报头,但不包含响应正文206
Partial Content,部分请求成功
3xx
重定向,要完成请求必须进行更进一步的操作
301
请求永久重定向至新URL302
请求临时重定向至新URL
4xx
客户端错误。请求有语法错误或请求无法实现
400
Bad Request,错误的请求401
Unauthorized,需要客户端认证403
Forbidden,请求被服务器拒绝404
Not Found,未找到资源
5xx
服务端错误,服务端未能实现合法的请求
500
Internal Server Error,内部服务器错误503
Server Unavailable,服务器暂时无法提供服务,一段时间后便可恢复服务
3.状态信息
本次响应的状态信息为 Moved Permanently
,常见状态信息如下
- OK
- Moved Permanently
- Not Found
2.消息报头(Header)
Response中的消息报头主要分为 响应报头
和 实体报头
响应报头
本次响应中的响应报头包含如下三个
< Server: nginx/1.18.0 # 响应报头
< Date: Fri, 30 Jul 2021 01:26:20 GMT # 响应报头
< Location: https://www.hagan.zone/ # 响应报头
常见的响应报头如下
Location
重定向接受者到一个新的位置
WWW- Authenticate
包含在401响应消息中,客户端收到401
Server
包含了服务器用来处理请求的软件信息
Apache- Coyote/1.1
实体报头
实体报头也叫正文报头,本次响应中的实体报头包含如下三个
< Content-Type: text/html # 实体报头
< Content-Length: 169 # 实体报头
< Connection: keep-alive # 实体报头
常见的实体报头如下
Content-Encoding
编码类型是压缩还是非压缩
eg: Content-Encoding: gzip
Content-Language
资源所用的自然语言,没有设置该域则认为实体内容将提供给所有的语言阅读
Content-Length
正文的长度,以字节方式存储的十进制数字表示
Content-Type
响应正文的媒体类型
- 实体类型列表
Expires
响应过期的日期和时间
3.响应正文(Body)
响应正文有很多种类型,响应正文的类型需要根据消息报头的Content-Type
字段来确定,本次响应的编码方式为text/html
< Content-Type: text/html # 实体报头
响应正文如下
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
* Connection #0 to host www.hagan.zone left intact
* Closing connection 0
curl命令只展示数据,不提供数据的解析,如果是浏览器,则会将响应正文以 text/html
的方式进行解析,此时便得到了一个HTML页面