面试题:说一下 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

量化投资分析平台 迅投 QMT(二)

量化投资分析平台 迅投 QMT [迅投 QMT](https://www.xuntou.net/?user_code7NYs7O)我目前在使用如何获取数据上代码历史帖子 迅投 QMT 我目前在使用 两个月前(2024年4月)迅投和CQF有一个互动的活动,进行了平台的一个网上路演,刚…

简单小游戏制作

控制台基础设置 //隐藏光标 Console.CursorVisible false; //通过两个变量来存储舞台的大小 int w 50; int h 30; //设置舞台(控制台)的大小 Console.SetWindowSize(w, h); Console.SetBufferSize(w, h);多个场景 int nowSceneID 1; while (true) …

从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(三)

分布式计算原理 分布式计算的原理总结一句话就是:分而治之。 把数据分片,存在不同的机器中,解决数据存储的压力。客户端和服务端之间通过相关协议来自动的完成在不同的机器之间进行数据的存取,用户并不感知数据的物理存储结构。 用…

大模型Prompt-Tuning技术入门

Prompt-Tuning方法 1 NLP任务四种范式 目前学术界一般将NLP任务的发展分为四个阶段,即NLP四范式: 第一范式:基于「传统机器学习模型」的范式,如TF-IDF特征朴素贝叶斯等机器算法;第二范式:基于「深度学习模…

python小练习03

1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…

双指针解题

验证回文数&#xff08;验证回文数-CSDN博客&#xff09;和判断在子序列&#xff08;判断子序列-CSDN博客&#xff09;已经在之前进行了计算&#xff0c;今天有三个新的双指针问题&#xff1a; 两数之和II—输入有序数组 给你一个下标从 1 开始的整数数组 numbers &#xff0…

ZL-GL-4离体组织灌流系统测试在恒温条件下离体标本的肌张拉力

简单介绍&#xff1a; 离体组织灌流系统为生理实验及药理实验提供恒温环境&#xff0c;在麦氏浴皿内加养液同时能通氧&#xff0c;测试在恒温条件下离体标本的肌张拉力&#xff0c;离体组织灌流系统具有进气口,配备微调固定器,省时省力,并提高了实验效率,同时可方便串联恒温供水…

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册 环境信息&#xff1a;VMware虚拟软件16.0 首先查看KylinOS服务器版本&#xff1a;nkvers 备注&#xff1a; (Tercel) 版本是 V10 SP1 版本&#xff0c; (Sword) 版本是 V10 SP2 版本&#xff0c; (Lance) 版本是 V10 …

超声波清洗机哪家好一点?四大顶级高分超声波清洗机专业推荐

在日常生活中&#xff0c;我们每天都在与灰尘和污渍作斗争&#xff0c;尤其是对于那些细小、精密的物品&#xff0c;如眼镜。眼镜不仅是视力矫正的工具&#xff0c;更是我们个人形象的一部分。一副干净、明亮的眼镜可以让我们的视线更加清晰。因为保持眼镜的清洁是一件很重要的…

初始操作系统

概念&#xff1a; 1.系统资源的管理者&#xff1a;实质控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机地工作和资源的分配 2.向上层提供方便易用的服务&#xff1a;以提供给用户和其他软件方便接口和环境 封装思想&#xff1a;操作系统把一些丑…

进阶 RocketMQ - 消息存储-一张图掌握核心要点

看了很多遍源码整理的 一张图进阶 RocketMQ 图片&#xff0c;关于 RocketMQ 你只需要记住这张图&#xff01; 消息传递责任已移交至Broker&#xff0c;接下来如何处理&#xff1f;首先&#xff0c;我们需要确保消息的持久化&#xff0c;避免因宕机导致的数据丢失。那么&#xf…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…

IP地址开启HTTPS方法

可以使用IP地址申请SSL证书&#xff0c;申请之前必须是公网IP地址&#xff0c;不支持内网IP地址申请。 申请过程需要确定IP地址外网可以访问&#xff0c;这里特别注意只是申请过程中可以访问。访问验证过程必须采取80端口、443端口两者选择1个&#xff0c;不可以用其它端口进行…

[C/C++]_[初级]_[在Windows和macOS平台上导出动态库的一些思考]

场景 最近看了《COM本质论》里关于如何设计基于抽象基类作为二进制接口,把编译器和链接器的实现隐藏在这个二进制接口中,从而使用该DLL时不需要重新编译。在编译出C接口时,发现接口名直接是函数名,比如BindNativePort,怎么不是_BindNativePort?说明 VC++导出的函数默认是使…

javaweb——js

JavaScript是一种网页脚本语言。JavaScript代码可以很容易的嵌入到HTML页面中。 js引入 JavaScript嵌入到HTML页面中 <body><script>alert("Hello JS")</script> </body>再HTML页面中插入外部脚本JavaScript <body><script src&…

三、基于图像分类预训练编码及图神经网络的预测模型 【框图+源码】

背景&#xff1a; 抽时间补充&#xff0c;先挖个坑。 一、模型结构 二、源码

【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录 题目&#xff1a;跑步 思路&#xff1a; 题目&#xff1a;夏日漫步 思路&#xff1a; 题目&#xff1a;糖果促销 思路&#xff1a; 题目&#xff1a;第五维度 思路&#xff1a; 题目&#xff1a;公园 思路&#xff1a; 新材料 思路&#xff1a; 星际航行 思路…

python项目中requirements.txt文件使用

由于之前用的技术栈是java&#xff0c;后续项目中需要逐渐用起python&#xff0c;但是很多地方只会用&#xff0c;没太了解过本质作用是什么&#xff0c;这里总结下 requirements.txt 一.作用 requirements.txt 文件是 Python 项目中常见的文件&#xff0c;用于列出项目所需…

MySQL的组成与三种log

MySQL由几块组成 连接器分析器优化器执行器 MySQL的三大log blog 作用&#xff1a; 用于主从同步与数据恢复 记录内容&#xff1a; 已经完成的 DML(数据操作语句)&#xff0c;主要是用于数据备份 redolog<重试日志> 作用&#xff1a; 崩溃恢复&#xff0c;用于事…

web项目规范配置(husky、eslint、lint-staged、commit)

背景&#xff1a; 团队开发为了保证提交代码格式统一&#xff0c;通常在进行代码提交的时候对暂存区代码进行校验&#xff0c;如没有通过eslint(本例使用eslint)校验&#xff0c;则不能提交到远端。 安装依赖 husky 、eslint 、prettier 、lint-staged npm install husky e…