面试题:说一下 http 报文都有哪些东西?
面试题:说一下 http 报文都有哪些东西?
-
HTTP 是传输超文本(实际上除了 HTML,可以传输任何类型的文件,如视频、音频、文本等)的协议,是一组用于浏览器-服务器之间数据传输的规则。
-
HTTP 位于 OSI 七层模型的顶层(应用层),应用程序可以在其中交换数据。HTTP 是 TCP/ICP 协议族的一部分。
-
HTTPS 是另一种传输协议,这里的 S 表示安全(Secure)。其与 HTTP 的区别在于,消息在传递前会被加密。
-
浏览器和服务器之间通过 HTTP 报文进行通信。浏览器向服务器发送请求报文,服务器返回给浏览器响应报文。解释如下。
一. 请求报文
报文结构

请求报文(request)分为四部分:请求行(request line)、请求头(request headers)、空行(blank line)、请求体(request body)
-
请求行:任何一个 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-Origin
、Access-Control-Allow-Methods
、Access-Control-Allow-Headers
、Access-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 支持请求的优先级和流量控制,优化了资源的传输顺序和带宽利用率。
-
-
请求头:请求行一结束紧接着就是请求头,提供本次请求的额外信息。可以通过请求头设置浏览器将接收的响应类型等信息。
-
请求头**类似键值对(name: value)**的形式。值的取值和结构由请求头决定。
-
请求头不分大小写。
-
每个请求头占据一行。
常用请求头 作用 User-Agent 发送请求的浏览器类型 Accept 浏览器可识别的响应数据类型列表 Accept-Language 浏览器可接受的自然语言 Accept-Encoding 浏览器可接受的编码压缩格式 Accept-Charset 浏览器可接受的编码字符集 Host 接收请求的主机名 Connection 浏览器和服务器的连接方式(close 或 keepalive) Cookie 存储于客户端的字段,通常向同一域名的服务端发送属于当前域名的 Cookie Content-Type 浏览器发送的请求体的数据类型 -
-
空行:请求头后边是一个空行,用于标识请求头部分的结束。
-
请求体:可选的。一般来说,POST 和 PUT 请求的请求报文中才会包含请求体,其中包含要向服务器发送的数据(如表单输入或文件上传)。
服务器收到请求报文后,对其进行处理,然后向浏览器发送一个响应报文。与请求报文类似,响应报文包含响应行(可以用于标识请求是否成功等)、响应头(设置响应元信息)、空行和响应体(包含请求的资源或提示信息)。
二. 响应报文
报文结构
响应报文(response)也分为四部分:状态行(status line)、响应头(response headers)、空行(blank line)、响应体(response body)
-
状态行:任何一个 HTTP 响应的第一行都称之为状态行,包含三部分内容:HTTP 版本(HTTP version)、状态码(status code)、状态描述(status text)
-
HTTP 版本:当前正在使用的 HTTP 协议版本。
-
状态码:表示请求状态的 3 位数字。其中第一个数字表示响应类别。
状态码 状态描述 含义 1 x x \bf{\Large{1xx}} 1xx 信息性状态码。 表示请求已接收,继续处理。 100
Continue 表示客户端应该继续请求或忽略此状态码。 101
Switching Protocols 表示服务端正在根据客户端的请求切换协议。 2 x x \bf{\Large{2xx}} 2xx 成功状态码。 表示请求已接收、理解和处理。 200
OK 表示请求成功,服务器已返回所请求的资源。 201
Created 表示请求成功,并导致了一个新资源的创建。 202
Accepted 表示请求已接收,但是尚未处理完成。 204
No Content 表示请求成功,但没有内容返回。该状态码常用于 DELETE 操作。 3 x x \bf{\Large{3xx}} 3xx 重定向状态码。 表示需要客户端采取进一步操作。 301
Moved Permanently 表示请求的资源已永久移动到新的位置,客户端需要使用新 URL 进行访问。 302
Found 表示请求的资源临时搬到新的位置,客户端应继续使用原 URL 进行请求。 303
See Other 表示请求的资源临时搬到新的位置,客户端应继续使用原 URL + GET 方法进行请求。 304
Not Modified 表示资源未修改,可以使用缓存版本。客户端在请求文件时,如果发现存在的缓存文件中有 Last Modified 时间标识,则向浏览器发送请求时在请求头中包含 If-Modified-Since。如果客户端发现自从 Last Modified 对应资源未改变,则返回 304,表示可以使用缓存文件,否则返回 200。 4 x x \bf{\Large{4xx}} 4xx 客户端错误状态码。 表示客户端出现了错误。 400
Bad Request 表示客户端请求存在语法错误 401
Unauthorized 表示请求未授权。 403
Forbidden 表示服务端拒绝请求。 404
Not Found 表示请求的资源不存在。这可能是因为客户端输入了错误的 URL。 405
Methods Not Allowed 表示请求方法对资源不适用。这可能是因为使用 GET 请求一个只能 POST 的资源。 5 x x \bf{\Large{5xx}} 5xx 服务器错误状态码。 表示服务器在处理请求时发生了内部错误。 500
Internal Server Error 表示服务器内部错误,无法完成请求。 501
Not Implemented 表示服务器不支持请求的方法。 502
Bad Gateway 表示网关或代理服务器从上游服务器中接受到无效响应。 503
Service Unavailable 表示服务器暂时过载或维护,无法处理请求。 504
Gateway Timeout 表示网关或代理服务器未及时从上游服务器中接受到响应。 -
状态描述:对状态码简短、可读的描述。
-
-
响应头:与请求头类似,提供本次响应的额外信息。
-
空行:与请求报文的空行类似,标识响应头的结束。
-
响应体:包含浏览器请求的资源(HTML、JSON、图片等)。
REFERENCES
https://medium.com/@adilrk/http-request-and-response-e7da8eb3a00c
https://juejin.cn/post/6931636106710482958
相关文章:

面试题:说一下 http 报文都有哪些东西?
面试题:说一下 http 报文都有哪些东西? HTTP 是传输超文本(实际上除了 HTML,可以传输任何类型的文件,如视频、音频、文本等)的协议,是一组用于浏览器-服务器之间数据传输的规则。 HTTP 位于 OS…...

开山之作!Python数据与算法分析手册,登顶GitHub!
若把编写代码比作行军打仗,那么要想称霸沙场,不能仅靠手中的利刃,还需深谙兵法。 Python是一把利刃,数据结构与算法则是兵法。只有熟读兵法,才能使利刃所向披靡。只有洞彻数据结构与算法,才能真正精通Pyth…...
编译安装gcc-11及可能遇到的bug
编译安装脚本 GCC_VERSION11.1.0 PACKAGE_DIR/path/to/gcc/source/code GCC_DIR$PACKAGE_DIR/gcc-$GCC_VERSION GCC_INSTALL_DIR/path/to/install/gccmkdir -p $GCC_INSTALL_DIR cd $GCC_INSTALL_DIR rm -rf * cd $PACKAGE_DIR rm -rf gcc-$GCC_VERSION if [ ! -f "gcc-$…...
vue项目引入json/js文件批量或单个方法
vue项目 json // 方式一 : 将文件内容完整的引入 import json from ./src/assets/xxx.json console.log(json) console.log(---)// 方式二 : 部分引入-名称必须是文件中定义的key import {name1,name2} from ./src/assets/xxx.json console.log(name1)…...

守护任务用来防止资源冲突
背景:有三个任务,他们都需要操作数码管。每个任务对应三个数码管,共9个数码管。硬件上9个数码管的控制使用一套硬件完成。 策略:每个任务都往自己的队列里面发数据,单独建立一个监听任务:处理所有队列的数…...
fast admin实现多数据库导入数据
思路 1创建多数据库连接 2后端的前台代码能使用get或者post请求传递选中数据给后台 3后台能够接收到 4后台接收到id或者全字段数据后对数据进行处理,然后使用多数据库操作将其存入第二个数据库 实现 1config文件下创建新数据库连接 db_config2 > [// 数据库类…...

NLP基础——序列模型(动手学深度学习)
序列模型 定义 序列模型是自然语言处理(NLP)和机器学习领域中一类重要的模型,它们特别适合处理具有时间顺序或序列结构的数据,例如文本、语音信号或时间序列数据。 举个例子:一部电影的评分在不同时间段的评分可能是…...

机器学习AI大模型的开源与闭源:哪个更好?
文章目录 前言一、开源AI模型1.1 开源的优点1.2 开源的缺点 二、闭源AI模型2.1 闭源的优点2.2 闭源的缺点 三、开源与闭源的平衡3.1 开源与闭源结合的案例3.2 开源与闭源的战略选择 小结 前言 在过去的几年里,人工智能(AI)和机器学习…...

关于大模型多轮问答的两种方式
前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图,而在常见的使用大模型进行多轮对话方式中,我接触到的只有两种方式: 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型,…...

达梦数据库相关SQL及适配Mysql配置总结
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
Centos7.9实现多台机器ssh免密登录
1.本机(172.16.10.228)先生成密钥对 ssh-keygen -t rsa 2.执行命令,把本机公钥拷贝到远程机器 ssh-copy-id rootdistinctIp 3.查看一下远程机器 、/root/.ssh/authorized_keys文件 cat /root/.ssh/authorized_keys 会看到里边多了个公钥…...
Unity3D DOTS JobSystem物理引擎的使用详解
前言 Unity3D DOTS(Data-Oriented Technology Stack)是Unity引擎的一项新技术,旨在提高游戏性能和扩展性。其中的Job System是一种用于并行处理任务的系统,可以有效地利用多核处理器的性能。在本文中,我们将重点介绍如…...
vue3+element-plus 表单校验和循环form表单校验
1.HTML页面 //el-form 标签添加上 ref"form2Form" :rules"rules2" :model"form2" 正常表单校验 //没有循环表单的使用事例<el-form-item label"投保人名称" class"insurance-date-no1" prop"tbrName">…...

Java集合基础知识点系统性总结篇
目录 集合一、图解集合的继承体系?([图片来源](https://www.cnblogs.com/mrhgw/p/9728065.html))点击查看大图二、List,Set,Map三者的区别?三、List接口的实现3.1、Arraylist 、 LinkedList、Vector3.2、Arraylist 、 LinkedList、…...

智能网联汽车信息安全风险识别与应对策略研究综述
摘要:随着智能网联汽车技术的飞速发展,其信息安全问题逐渐成为公众关注的焦点。本文概述了智能网联汽车技术的发展背景和信息安全风险的来源,采用STRIDE威胁分析方法对智能网联汽车的四层模型进行风险识别,进一步探讨了抗女巫攻击…...
python-web应用程序-Django数据库-数据库表设计
python-web应用程序-Django数据库-数据库表设计 在models中创建一个类会自动对数据库进行管理,那么如何用类的声明来实现数据库表的设计呢? from django.db import models# Create your models here. class Department(models.Model):title models.Ch…...
C#知识|封装典型的SQLServer数据库查询方法。
哈喽,你好啊,我是雷工! 前边学习封装了增删改的方法封装: 《C#知识|通用数据访问类SQLHelper的编写》; 本节继续学习将两种典型的查询方法封装成类。 下边为学习笔记。 01 封装单一返回结果的封装 在查看封装后的代码之前,可以先看下封装前代码的写法: 《C#知识|通过A…...

第一篇 逻辑门(与门、或门、非门、异或门)
一、实验目的 了解DE1-SOC开发板一些外设。 掌握常用组合逻辑门电路的基本原理。 学习Verilog HDL的基本语法。 学习使用ModelSim工具对设计的电路进行仿真,包括编写Testbench仿真代码,以及ModelSim工具的使用。 熟悉使用Quartus软件从创建Quartus工…...

车牌号码智能监测识别摄像机
车牌号码智能监测识别摄像机是一项革命性的技术,为交通管理和安全提供了全新的解决方案。这种摄像机利用先进的人工智能和图像识别技术,能够实时监测道路上的车辆,并准确识别车辆的车牌号码,为交通管理和安全提供了强有力的支持。…...
Python局部变量:深入探索与实战应用
Python局部变量:深入探索与实战应用 在Python编程中,局部变量是一个至关重要的概念。它们被定义在函数或方法内部,并且只在定义它们的那个特定的代码块中可见。然而,局部变量的使用并不总是那么简单明了,尤其是当涉及…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...