Response代表服务端响应部分,示例中Response部分代码如下

  1. < HTTP/1.1 301 Moved Permanently # 状态行 # [协议版本] [状态码] [状态信息]
  2. < Server: nginx/1.18.0 # 响应报头
  3. < Date: Fri, 30 Jul 2021 01:26:20 GMT # 响应报头
  4. < Content-Type: text/html # 实体报头
  5. < Content-Length: 169 # 实体报头
  6. < Connection: keep-alive # 实体报头
  7. < Location: https://www.hagan.zone/ # 响应报头
  8. <
  9. <html>
  10. <head><title>301 Moved Permanently</title></head>
  11. <body>
  12. <center><h1>301 Moved Permanently</h1></center>
  13. <hr><center>nginx/1.18.0</center>
  14. </body>
  15. </html>
  16. * Connection #0 to host www.hagan.zone left intact
  17. * Closing connection 0

Response也包含三个部分,分别为 状态行 消息报头(Header) 响应正文(Body),下面将详细讲解这三部分。

下面的讲解请参考示例中Response部分代码来理解。

1.状态行

状态行包含三个部分,分别为 协议版本 状态码 状态信息

  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 请求永久重定向至新URL
  • 302 请求临时重定向至新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中的消息报头主要分为 响应报头实体报头

响应报头

本次响应中的响应报头包含如下三个

  1. < Server: nginx/1.18.0 # 响应报头
  2. < Date: Fri, 30 Jul 2021 01:26:20 GMT # 响应报头
  3. < Location: https://www.hagan.zone/ # 响应报头

常见的响应报头如下

Location

重定向接受者到一个新的位置

WWW- Authenticate

包含在401响应消息中,客户端收到401

Server

包含了服务器用来处理请求的软件信息

Apache- Coyote/1.1

实体报头

实体报头也叫正文报头,本次响应中的实体报头包含如下三个

  1. < Content-Type: text/html # 实体报头
  2. < Content-Length: 169 # 实体报头
  3. < Connection: keep-alive # 实体报头

常见的实体报头如下

Content-Encoding

编码类型是压缩还是非压缩

eg: Content-Encoding: gzip

Content-Language

资源所用的自然语言,没有设置该域则认为实体内容将提供给所有的语言阅读

Content-Length

正文的长度,以字节方式存储的十进制数字表示

Content-Type

响应正文的媒体类型

  • 实体类型列表

Expires

响应过期的日期和时间

3.响应正文(Body)

响应正文有很多种类型,响应正文的类型需要根据消息报头的Content-Type字段来确定,本次响应的编码方式为text/html

  1. < Content-Type: text/html # 实体报头

响应正文如下

  1. <html>
  2. <head><title>301 Moved Permanently</title></head>
  3. <body>
  4. <center><h1>301 Moved Permanently</h1></center>
  5. <hr><center>nginx/1.18.0</center>
  6. </body>
  7. </html>
  8. * Connection #0 to host www.hagan.zone left intact
  9. * Closing connection 0

curl命令只展示数据,不提供数据的解析,如果是浏览器,则会将响应正文以 text/html 的方式进行解析,此时便得到了一个HTML页面