面试题:说一下 http 报文都有哪些东西?

面试题:说一下 http 报文都有哪些东西?

  • HTTP 是传输超文本(实际上除了 HTML,可以传输任何类型的文件,如视频、音频、文本等)的协议,是一组用于浏览器-服务器之间数据传输规则

  • HTTP 位于 OSI 七层模型的顶层(应用层),应用程序可以在其中交换数据。HTTP 是 TCP/ICP 协议族的一部分。

  • HTTPS 是另一种传输协议,这里的 S 表示安全(Secure)。其与 HTTP 的区别在于,消息在传递前会被加密

  • 浏览器和服务器之间通过 HTTP 报文进行通信。浏览器向服务器发送请求报文,服务器返回给浏览器响应报文。解释如下。

一. 请求报文

报文结构

请求报文(request)分为四部分:请求行(request line)、请求头(request headers)、空行(blank line)、请求体(request body)

  1. 请求行:任何一个 HTTP 请求的第一行都称之为请求行,包含三部分内容:请求方法(method)、请求路径(request url)、HTTP 版本(HTTP version)

    • 请求方法:表示浏览器请求对资源要进行的操作

      方法作用
      GET从服务器请求资源。由于传递的参数直接显示在地址栏中,而浏览器和服务器对 URL 长度有限制,因此 GET 请求不适合传递私密数据和大量数据
      POST向服务器发送数据。将传递的数据封装在 HTTP 报文的请求体中,可以传输大量数据,同时不会显示在地址栏中。
      PUT更新服务器中的资源。与 POST 类似,但是 PUT 请求指定了资源的存放位置,而 POST 则没有。
      DELETE删除服务器中的资源
      HEAD与 GET 相同,但是响应报文不包含响应体。通常用于获取元数据检查资源是否存在(验证 URL)检查资源自上次请求以来是否更改等场景。HEAD 请求因为省去了传输请求体的时间,因此在对应的场景下更加高效。
      OPTIONS浏览器可以使用 OPTIONS 请求来查询服务器在特定资源上允许的 HTTP 方法(如 GET、POST、PUT、DELETE),此时服务端返回的响应报文中包含 Allow 请求头。发送 AJAX 跨域请求访问资源时,浏览器会发送一个 OPTIONS 请求,称之为预检请求,以确保服务器允许该跨域操作,此时服务端返回的响应报文中包含 Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-HeadersAccess-Control-Max-Age 请求头。
    • 请求路径:表示要请求的资源的 URL 地址。请求资源的目标地址需要包含:协议、域名或 IP 地址、端口号、请求路径、请求参数(可选)

    • HTTP 版本:当前正在使用的 HTTP 协议版本。常见版本为 HTTP/1.1 和 HTTP/2,默认使用 HTTP/2。

      • HTTP/1.1 使用纯文本格式进行数据传输;而 HTTP/2 使用二进制格式进行数据传输,提高了传输和解析的效率。
      • HTTP/1.1 和 HTTP/2 都是基于 TCP 协议;HTTP/1.1 存在队头阻塞问题,同一条 TCP 连接上,必须按顺序发送请求和处理响应;HTTP/2 消除了队头阻塞问题,允许在单个 TCP 连接上同时发送请求和处理响应,从而实现多路复用,提高了并发性。
      • HTTP/2 使用 HPACK 算法对头部进行压缩,从而减小头部大小,提高传输效率。
      • HTTP/2 支持服务端在客户端请求之前主动推送资源,减少延迟。
      • HTTP/2 支持请求的优先级和流量控制,优化了资源的传输顺序和带宽利用率。
  2. 请求头:请求行一结束紧接着就是请求头,提供本次请求的额外信息。可以通过请求头设置浏览器将接收的响应类型等信息。

    • 请求头**类似键值对(name: value)**的形式。值的取值和结构由请求头决定。

    • 请求头不分大小写

    • 每个请求头占据一行。

    常用请求头作用
    User-Agent发送请求的浏览器类型
    Accept浏览器可识别的响应数据类型列表
    Accept-Language浏览器可接受的自然语言
    Accept-Encoding浏览器可接受的编码压缩格式
    Accept-Charset浏览器可接受的编码字符集
    Host接收请求的主机名
    Connection浏览器和服务器的连接方式(close 或 keepalive)
    Cookie存储于客户端的字段,通常向同一域名的服务端发送属于当前域名的 Cookie
    Content-Type浏览器发送的请求体的数据类型
  3. 空行:请求头后边是一个空行,用于标识请求头部分的结束。

  4. 请求体可选的。一般来说,POST 和 PUT 请求的请求报文中才会包含请求体,其中包含要向服务器发送的数据(如表单输入或文件上传)。

服务器收到请求报文后,对其进行处理,然后向浏览器发送一个响应报文。与请求报文类似,响应报文包含响应行(可以用于标识请求是否成功等)、响应头(设置响应元信息)、空行和响应体(包含请求的资源或提示信息)。

二. 响应报文

报文结构

响应报文(response)也分为四部分:状态行(status line)、响应头(response headers)、空行(blank line)、响应体(response body)

  1. 状态行:任何一个 HTTP 响应的第一行都称之为状态行,包含三部分内容:HTTP 版本(HTTP version)、状态码(status code)、状态描述(status text)

    • HTTP 版本:当前正在使用的 HTTP 协议版本。

    • 状态码:表示请求状态的 3 位数字。其中第一个数字表示响应类别。

      状态码状态描述含义
      1 x x \bf{\Large{1xx}} 1xx信息性状态码表示请求已接收,继续处理。
      100Continue表示客户端应该继续请求或忽略此状态码。
      101Switching Protocols表示服务端正在根据客户端的请求切换协议。
      2 x x \bf{\Large{2xx}} 2xx成功状态码表示请求已接收、理解和处理。
      200OK表示请求成功,服务器已返回所请求的资源。
      201Created表示请求成功,并导致了一个新资源的创建。
      202Accepted表示请求已接收,但是尚未处理完成。
      204No Content表示请求成功,但没有内容返回。该状态码常用于 DELETE 操作。
      3 x x \bf{\Large{3xx}} 3xx重定向状态码表示需要客户端采取进一步操作。
      301Moved Permanently表示请求的资源已永久移动到新的位置,客户端需要使用新 URL 进行访问。
      302Found表示请求的资源临时搬到新的位置,客户端应继续使用原 URL 进行请求。
      303See Other表示请求的资源临时搬到新的位置,客户端应继续使用原 URL + GET 方法进行请求。
      304Not Modified表示资源未修改,可以使用缓存版本。客户端在请求文件时,如果发现存在的缓存文件中有 Last Modified 时间标识,则向浏览器发送请求时在请求头中包含 If-Modified-Since。如果客户端发现自从 Last Modified 对应资源未改变,则返回 304,表示可以使用缓存文件,否则返回 200。
      4 x x \bf{\Large{4xx}} 4xx客户端错误状态码表示客户端出现了错误。
      400Bad Request表示客户端请求存在语法错误
      401Unauthorized表示请求未授权。
      403Forbidden表示服务端拒绝请求。
      404Not Found表示请求的资源不存在。这可能是因为客户端输入了错误的 URL。
      405Methods Not Allowed表示请求方法对资源不适用。这可能是因为使用 GET 请求一个只能 POST 的资源。
      5 x x \bf{\Large{5xx}} 5xx服务器错误状态码表示服务器在处理请求时发生了内部错误。
      500Internal Server Error表示服务器内部错误,无法完成请求。
      501Not Implemented表示服务器不支持请求的方法。
      502Bad Gateway表示网关或代理服务器从上游服务器中接受到无效响应。
      503Service Unavailable表示服务器暂时过载或维护,无法处理请求。
      504Gateway Timeout表示网关或代理服务器未及时从上游服务器中接受到响应。
    • 状态描述:对状态码简短、可读的描述。

  2. 响应头:与请求头类似,提供本次响应的额外信息。

  3. 空行:与请求报文的空行类似,标识响应头的结束。

  4. 响应体:包含浏览器请求的资源(HTML、JSON、图片等)。

REFERENCES

https://medium.com/@adilrk/http-request-and-response-e7da8eb3a00c

https://juejin.cn/post/6931636106710482958

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240603每日通信--------springboot使用netty-socketio集成即时通信WebSocket

简单效果图 群聊&#xff0c;私聊&#xff0c;广播都可以支持。 基础概念&#xff1a; springbootnetty-socketioWebSocket POM文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/…

蓝桥杯物联网竞赛_STM32L071_19_输出方波信号(PWM)

国赛考了一个方波&#xff0c;第一次考这个&#xff0c;连个示波器都没有 CUBMX配置&#xff1a; 按上述配置刚好是32MHZ / 32 / 100 1KHZ 理论&#xff1a; 频率&#xff1a;就是一秒钟能产生多少个脉冲&#xff0c;如下图: 这算是一个脉冲&#xff0c;1KHZ说明一秒钟产生1…

MySQL -- 连接查询

MySQL使用连接查询&#xff08;JOIN&#xff09;是为了从多个相关表中获取数据。连接查询是一种强大且常用的操作&#xff0c;可以根据某些条件将两张或多张表中的数据组合在一起&#xff0c;返回一个联合结果集。 1.为什么使用连接查询 数据规范化&#xff1a; 数据库设计时通…

结账和反结账

结账与反结账功能在财务软件和会计系统中扮演着重要的角色&#xff0c;以下是关于这两个功能的详细解释&#xff1a; 一、结账功能 结账功能是计算和结转各个会计科目本期发生额和期末余额的过程&#xff0c;同时标志着一定时期内财务活动的结束和财务数据的固化。结账功能的…

Elo7下单购物教程:如何利用自养号测评提升产品曝光度?

Elo7 是巴西的一个独特电商平台&#xff0c;专注于手工艺品和定制商品。它被誉为“巴西的 Etsy”&#xff0c;为当地和国际手工艺者提供了一个销售其独特创作的市场。Elo7 成立于 2008 年&#xff0c;其主要目标是支持小型创业者和手工艺人&#xff0c;让他们能够将自己的作品推…

Hbase实战处理(一)关于hbase的表设计和集成

一、Hbase的原理讲解 1、hbase介绍 2、hbase集群架构&#xff08;具体配置见其他文章&#xff09; hbase集群的HA配置 &#xff08;假如有3台机器&#xff08;同时是regionserver角色&#xff09;&#xff0c;master、slaver1、slaver2&#xff09; stop-hbase.sh cd /home/…

javascript导入excel文件

导入文件用到一个 xlsx.core.js 的包。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><script type"tex…

vfrom二开给左边添加字段或者容器

例如&#xff0c;我在左侧加入一个 我的公司 字段 修改三个文件&#xff0c;这是文件目录 这个文件是当界面选择 简体中文 的时候&#xff0c;显示的 字段组件 或者 容器组件的中文名 这个文件是当界面选择 English 的时候&#xff0c;显示的 字段组件 或者 容器组件的英文名 把…

Java集合基础知识点系统性总结篇

目录 集合一、图解集合的继承体系&#xff1f;&#xff08;[图片来源](https://www.cnblogs.com/mrhgw/p/9728065.html)&#xff09;点击查看大图二、List,Set,Map三者的区别&#xff1f;三、List接口的实现3.1、Arraylist 、 LinkedList、Vector3.2、Arraylist 、 LinkedList、…

Java如何实现pdf转base64以及怎么反转?

问题需求 今天在做发送邮件功能的时候&#xff0c;发现邮件的附件部分&#xff0c;比如pdf文档&#xff0c;要求先把pdf转为base64&#xff0c;邮件才会发送。那接下来就先看看Java 如何把 pdf文档转为base64。 两种方式&#xff0c;一种是通过插件 jar 包的方式引入&#xf…

pyside6安装

目录 1. 安装2. 配置PyCharm环境3. 测试 1. 安装 打开Anaconda Prompt&#xff0c;执行以下命令创建虚拟环境并激活 # 创建名为 myEnv, python版本为3.9 的虚拟环境 conda create -n myEnv python3.9 # 激活创建的虚拟环境 conda avtivate myEnv使用pip安装Pyside6&#xff0…

git拉去代码报错“Failed to connect to 127.0.0.1 port 31181: Connection refused“

最近参与了一个新项目&#xff0c;在使用git clone 克隆代码时遇到了一个报错"fatal: unable to access ‘https://example.git/’: Failed to connect to 127.0.0.1 port 31181: Connection refused",今天就和大家分享下解决过程。 报错详情 在使用git clone 克隆…

回溯算法题模板与实战详解

文章目录 回溯算法模板实战详解全排列问题N皇后问题 组合总和问题子集问题括号生成问题单词搜索问题 回溯算法是一种通过试错的方式来寻找问题解决方案的算法&#xff0c;常用于解决约束满足问题、组合优化问题和排列组合问题。其核心思想是深度优先搜索(DFS)与剪枝策略的结合&…

Apipost IDEA 插件使用说明

Apipost Helper作为IDEA插件&#xff0c;可以快速生成和查询API文档&#xff0c;直观友好地在IDE中调试接口。它简化了开发流程并提升效率&#xff0c;即使新手也能够迅速掌握。Apipost Helper提供了诸多便捷功能&#xff0c;如通过代码查找接口或者通过接口查找代码等&#xf…

第十五届蓝桥杯物联网试题(国赛)

好&#xff0c;很好&#xff0c;国赛直接来个阅读理解&#xff0c;我猛做4个小时40分钟&#xff0c;cpu都干冒烟了&#xff0c;也算是勉强做完吧&#xff0c;做的很仓促&#xff0c;没多检查就交了&#xff0c;方波不会&#xff0c;A板有个指示灯没做&#xff0c;其他应该都还凑…

师彼长技以助己(3)逻辑思维

师彼长技以助己&#xff08;3&#xff09;逻辑思维 前言 上一篇文章进行了工程思维和产品思维的测试&#xff0c;并介绍了几个比较重要的产品思维模型。接下来本篇介绍工程思维。&#xff08;注意产品思维并不代表产品经理思维&#xff0c;工程思维也并不代表工程师思维&…

学习小心意——python的构造方法和析构方法

构造方法和析构方法分别用于初始化对象的属性和释放类占有的资源 构造方法_init_() 语法格式如下&#xff1a; class 类名:def __init__(self, 参数1, 参数2, ...):# 初始化代码self.属性1 参数1self.属性2 参数2# ... 示例代码如下 class Student:def __init__(self):s…

期权的权利金怎么算的

期权权利金的计算涉及多个因素&#xff0c;包括敲定价格、到期时间以及整个期权合约的具体情况。期权的权利金具体的计算公式和因素可能因不同的期权合约和市场条件而有所不同&#xff0c;下文为大家介绍期权的权利金怎么算的 &#xff1f;本文来自&#xff1a;期权酱 一、期权…

实战:Zig 编写高性能 Web 服务(1)

1.1 认识 std.http std.http 是 Zig 标准库中用于处理 HTTP 相关操作的类库。以我学习新的编程语言的经历来看&#xff0c;编写web程序是最常见的技术场景&#xff0c;所以熟练掌握 HTTP server/client 服务相关的编程知识是比较重要的。 std.http 主要包含以下API: Client…