首页 > 其他分享 >#yyds干货盘点#HTTP报文结构

#yyds干货盘点#HTTP报文结构

时间:2023-03-08 22:32:06浏览次数:46  
标签:yyds HTTP 请求 报文 Host 响应 头里

HTTP 协议的请求报文和响应报文的结构基本相同,由三大 部分组成:

  1. 起始行(start line):描述请求或响应的基本信息;
  2. 头部字段集合(header):使用 key-value 形式更详细 地说明报文;
  3. 消息正文(entity):实际传输的数据,它不一定是纯文 本,可以是图片、视频等二进制数据。

这其中前两部分起始行和头部字段经常又合称为“请求头”或“响应头”,消息正文又称为“实体”,但 与“header”对应,很多时候就直接称为“body”。

HTTP 协议规定报文必须有 header,但可以没有 body,而且在 header 之后必须要有一个“空行”,也就 是“CRLF”,十六进制的“0D0A”。


请求行

请求行简要地描述了客 户端想要如何操作服务器端的资源。

请求行由三部分构成:

  1. 请求方法:是一个动词,如GET/POST,表示对资源的操作;
  2. 请求目标:通常是一个 URI,标记了请求方法要操作的资源;
  3. 版本号:表示报文使用的HTTP协议版本。

这三个部分通常使用空格(space)来分隔,最后要用 CRLF 换行表示结束。


状态行

状态行表示服务器响应的状态。

  1. 版本号:表示报文使用的HTTP协议版本;
  2. 状态码:一个三位数,用代码的形式表示处理的结果,比 如 200 是成功,500 是服务器错误;
  3. 原因:作为数字状态码补充,是更详细的解释文字,帮助理解原因。


头部字段

请求行或状态行再加上头部字段集合就构成了 HTTP 报文里 完整的请求头或响应头 。

请求头

头部字段是 key-value 的形式,key 和 value 之间 用“:”分隔,最后用 CRLF 换行表示字段结束。比如 在“Host: 127.0.0.1”这一行里 key 就是“Host”,value 就是“127.0.0.1”。

不过使用头字段需要注意下面几点:

  1. 字段名不区分大小写,例如“Host”也可以写 成“host”,但首字母大写的可读性更好;
  2. 字段名里不允许出现空格,可以使用连字符“-”,但不 能使用下划线“_”。例如,“test-name”是合法的字 段名,而“test name”“test_name”是不正确的字段 名;
  3. 字段名后面必须紧接着“:”,不能有空格,而“:”后的字段值前可以有多个空格;
  4. 字段的顺序是没有意义的,可以任意排列不影响语义;
  5. 字段原则上不能重复,除非这个字段本身的语义允许,例 如 Set-Cookie。


常用头字段

HTTP 协议规定了非常多的头部字段,实现各种各样的功 能,但基本上可以分为四大类:

  1. 通用字段:在请求头和响应头里都可以出现;
  2. 请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件;
  3. 响应字段:仅能出现在响应头里,补充说明响应报文的信息;
  4. 实体字段:它实际上属于通用字段,但专门描述 body 的额外信息。

对 HTTP 报文的解析和处理实际上主要就是对头字段的处理。


Host

Host属于请求字段,只能出现在请 求头里,它同时也是唯一一个 HTTP/1.1 规范里要求必须出 现的字段,也就是说,如果请求头里没有 Host,那这就是 一个错误的报文。

Host 字段告诉服务器这个请求应该由哪个主机来处理,当 一台计算机上托管了多个虚拟主机的时候,服务器端就需要 用 Host 字段来选择,有点像是一个简单的“路由重定向”。


User-Agent

User-Agent是请求字段,只出现在请求头里。它使用一个 字符串来描述发起 HTTP 请求的客户端,服务器可以依据它 来返回最合适此浏览器显示的页面。


Date

Date字段是一个通用字段,但通常出现在响应头里,表示 HTTP 报文创建的时间,客户端可以使用这个时间再搭配其 他字段决定缓存策略。


Server

Server字段是响应字段,只能出现在响应头里。它告诉客户 端当前正在提供 Web 服务的软件名称和版本号。


Content-Length

Content-Length是实体字段,它表示报文里 body 的长度,也就是请求头或响应头空行后面数据的长 度。服务器看到这个字段,就知道了后续有多少数据,可以 直接接收。如果没有这个字段,那么 body 就是不定长的, 需要使用 chunked 方式分段传输。

标签:yyds,HTTP,请求,报文,Host,响应,头里
From: https://blog.51cto.com/u_11365839/6108905

相关文章

  • HTTP请求方法剖析
    HTTP/1.1常用方法1,GET2,POST3,PUT4,HEAD5,DELETE6,OPTIONS7,TRACE8,CONNECTGET1,GET方法用......
  • #yyds干货盘点# LeetCode面试题:接雨水
    1.简述:给定 n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数......
  • Jenkins发送HTTP请求
    在中国,任何超脱飞扬的思想都会砰然坠地——现实的引力实在是太沉重了。---《三体》一、前言在做集成工作的时候,......
  • CentOS 7搭建http文件服务器
    yuminstallhttpdmysql-serverphpphp-mysqlrm-rf/etc/httpd/conf.d/welcome.confsystemctlretarthttpd文件存放目录var/www/html/解决中文乱码问题vi/etc......
  • URI和URL HTTP报文结构
    URI和URL1,URI:一个紧凑的字符串用来标识抽象或物理资源2,AURI:可以进一步被分为定位符名字或两者都是3,UniformResourceLocator(URL)是URI的子集除了确......
  • http协议心得
      HTTP协议是一种基于客户端-服务器模型的通信协议,它是现代互联网中最常用的协议之一。HTTP协议主要用于在Web浏览器和Web服务器之间传输数据,它定义了客户端和服务器之......
  • http心得
    http协议,即超文本传输协议(Hypertexttransferprotocol)。是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传输文档的数据传送协议。http协议一般承载......
  • http协议心得
    1、支持客户/服务器模式。支持基本认证和安全认证。2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与......
  • Windows中使用http-server搭建一个本地服务
    1、......
  • httprunner3.X validate 断言
    1、validate可以支持的校验方式项目缩写功能equal“eq”,“equals”,“equal”相等less_than“lt”,“less_than”小于less_or_equals“le”,“l......