http学习笔记1:什么是http报文,http报文结构是什么?

说到Http报文,其实Http报文可以分为两种分别是请求报文响应报文他们的结构都基本相同:

  1. 起始行(start line):用来描述请求或相应的基本信息
  2. 头部信息(header):使用kv结构更详细的说明报文
  3. 消息正文(entity):实际传输的数据

其中的起始行和头部信息经常合称为请求头或者响应头,消息正文成为实体也就是body。Http协议规定报文中必须有header,但是可以没有body。header和body中间使用一个空行分隔。

请求行

请求报文

请求报文中的请求行分为三部分:

  1. 请求方式:GET POST等
  2. 请求目标的URI / /abc.html 等
  3. 版本号:表示报文中使用的http协议版本

举一个完整的请求报文样式:

get /abc.html http/1.1

响应报文

响应报文中的起始行称为状态行,意思是服务器的响应状态。状态行也分为三部分:

  1. 版本号:表示报文用的http协议版本号
  2. 状态码:一个三位数字,以代码的形式来说明服务器的响应结果。如 200 404 502等等
  3. 原因:作为状态码的补充说明,增加可读性。

举个响应报文中的状态行的例子:

http/1.1 404 Not Found

头部信息

起始行+头部字段集合就构成了http报文中完成的请求头或响应头,他们俩唯一的区别就是起始行不一致。具体不一致的内容可以参见第一部分。

头部字段为key: value格式,kv之前使用:分割。头部字段有五个特点:

  1. 字段名不区分大小写,但是为了方便查看建议还是首字母大写
  2. 字段名中不允许出现空格和下划线,如果希望将两个单词连接起来,可以使用-链接,如:Content-Length
  3. 字段名之后需要紧接:,如果中间出现空格就会报错
  4. 字段的顺序没有意义
  5. 原则上字段名不能重复,除非有特殊予以的字段,比如Set-Cookie

头字段通常分为四种:

  1. 通用字段:在请求头和响应头中都可以出现,如Date
  2. 请求字段,仅仅能出现在请求头中,如Host、User-Agent
  3. 相应字段:仅仅能出现在响应头中,如Server
  4. 实体字段,属于通用字段,但是实体字段是专们用来描述body的额外信息的,如Content-Length
原文地址:https://www.cnblogs.com/joimages/p/13329924.html