HTTP协议中的HTTP报文

news2024/11/17 21:25:17

HTTP中的HTTP报文

1、HTTP报文信息

1.1定义

用于HTTP协议交互的信息叫做HTTP 报文。

HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分(通常并不一定要有报文主体)。

1.2请求报文和响应报文

请求端的叫请求报文,响应端的叫响应报文。

内容组成
请求报文和响应报文的首部内容由以下数据组成:

请求行:包含用于请求的方法,请求 URI 和 HTTP 版本。
状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本。
首部字段:包含表示请求和响应的各种条件和属性的各类首部(一般有通用首部、请求首部、响应首部和实体首部)。
其他: 可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。

整体结构
在这里插入图片描述
在这里插入图片描述

内容实例
在这里插入图片描述

2、编码提升传输速率

HTTP在传输数据时可以按照数据原貌进行传输,也可以在传输过程中进行编码提升传输速率。
注意:在传输时编码,能有效处理大量请求,但是编码操作也会消耗更多的cpu资源。

2.1报文主体和实体主体的差异

报文
是 HTTP 通信中的基本单位,由 8 位组字节流组成,通过 HTTP 通信传输。

实体
作为请求或响应的有效数据被传输。由实体首部和实体主体组成。

通常,报文主体等于实体主体。但是当传输中进行编码操作时,实体主体的内容发生变化,会导致它和报文主体产生差异。

HTTP 报文的主体用于传输请求或响应的实体主体。

2.2压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体数据原样压缩(内容编码后的实体由客户端接收并负责解码复原)。

常用编码格式有:gzip(GNU zip)、compress(UNIX 系统的标准压缩)、deflate(zlib)、identity(不进行编码)。

2.3 分割发送的分块传输编码

在传输大容量数据时,将数据分割成多块传输,让浏览器逐步加载页面。 这种吧实体分割为多块的功能称为分块传输代码。

使用分块传输解码的实体会由接受的客户端负责解码操作,恢复到编码前的编码主体。每一块都会用十六进制标记块的大小,而实体主体的最后一块使用“0(CR+LF)”来标记。
在这里插入图片描述

2.4发送多种数据的多部分对象集合

HTTP中采用了多部分对象集合,即发送的一份报文主体中可以含有多类型实体(通常是在图片或文本文件等上传时使用)。

多部分对象集合包含的对象如下:

multipart/form-data: 在表单文件上传时使用。
multipart/byteranges:状态码 206(部分内容)响应报文包含了多个范围的内容时使用。

注意:在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上Content-type。

2.5获取部分内容的范围请求

在下载较大的文件时,可以指定的下载实体数据范围(比如一个文件10000字节,我可以只请求1-5000,然后在请求5001-10000)像这样指定范围的请求叫做范围请求。

执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围,byte 范围的指定形式如下:
在这里插入图片描述

对于范围请求,响应会返回状态码为 206 的响应报文,如果是多重范围请求,响应会在首部字段ContentType 标明 multipart/byteranges 后返回响应报文。

如果服务器端无法响应范围请求,则会返回状态码 200 OK 和完整的实体内容。

范围请求大图片图示如下:
在这里插入图片描述

3、协商返回最合适的内容

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源(内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准)。

如:一个网站有英文页面和中文时,当浏览器的默认语言为中文时访问web页面时就返回的是中文版页面(默认语言为英文时返回是英文的),这样的机制称为内容协商。

请求报文中的某些首部字段就是判断的基准如下:

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

内容协商技术有以下 3 种类型:
1、服务器驱动协商
由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。

2、客户端驱动协商
由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。

3、透明协商
是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS13_由html{height: 100%} 引发的CSS百分比宽高度的思考

一、html, body { height:100% } CSS有一个常见设置:html,body{ height:100% },可能大家已经熟视无睹了,但细细思索,可能会有些奇怪,为什么html还需要设置height:100%呢?html不就代表整个页面了吗&#xf…

[附源码]java毕业设计网上书店管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

SpringBoot项目使用JSP

SpringBoot不推荐使用JSP,而是使用模板技术代替JSP视图 先创建个SpringBoot项目 使用JSP需要如下配置 加入一个处理JSP的依赖(使用该JSP依赖原因是SpringBoot的jar包是内嵌了一个Tomcat因此要用这个Jar包,如果你的SpringBoot需要打成war包,不使用内嵌Tomcat,可用通用的JSP依赖…

深度学习基础--神经网络(3)神经网络的学习,损失函数初识

文章目录神经网络的学习从数据中学习数据区分损失函数均方误差交叉熵误差mini-batch学习损失函数更新的思路本文为学习笔记整理参考书籍:《深度学习入门 : 基于Python的理论与实现 》/ (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电出版社, 2018.7(20…

Android插件式换肤以及资源加载流程分析

前言 APP更换皮肤的方式有很多,如系统自带的黑夜模式、插件换肤、通过下发配置文件加载不同主题等等,我们这里就浅谈下插件换肤方式。想实现插件换肤功能,我们就需要先弄清楚 :APP是如何完成资源加载的。 资源加载流程 这里我们以ImageVie…

植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(中)

植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(中)26、第一种方法实现变态加速功能27、第二种方法找出变态攻击加速的方法28、加快阳光、金币生产速度29、全屏僵尸29、全屏减速第一课30、全屏减速第二课31、全屏奶油的找…

(Transferrin)TF-PEG-DBCO/TCO/tetrazine 转铁蛋白-聚乙二醇-二苯基环辛炔/反式环辛烯/四嗪

产品名称:转铁蛋白-聚乙二醇-二苯基环辛炔 英文名称:(Transferrin)TF-PEG-DBCO 质量控制:95% 原料分散系数PDI:≤1.05 存储条件:-20C,避光,避湿 用 途:仅供科研实验使用&#xff0c…

Android App开发动画特效中插值器和估值器的讲解以及利用估值器实现弹幕动画实战(附源码和演示视频 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、插值器和估值器 插值器用来控制属性值的变化速率,也可以理解为动画播放的速度,默认是先加速再减速。若要给动画播放指定某种速率形式,调用setInterpolator方法设置对应的插值器实现类即可…

Spring Boot 分离配置文件的 N 种方式

今天聊一个小伙伴在星球上的提问: 问题不难,解决方案也有很多,因此我决定撸一篇文章和大家仔细说说这个问题。 1. 配置文件位置 首先小伙伴们要明白,Spring Boot 默认加载的配置文件是 application.properties 或者 application…

【云计算大数据_牛客_Hbase】选择/判断——Hbase

1.Hive 1.下面关于Hive metastore的三种模式的描述错误的是() Derby方式是内嵌的方式,也是默认的启动方式,一般用于单元测试local模式中,使用MySQL 本地部署实现metastoreremote模式为远程MySQLDerby方式在同一时间只能有多个进程连接使用数据库 2. 百度文库 2、代码sel…

Android App开发中集合动画和属性动画的讲解及实战演示(附源码 简单易懂 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、集合动画 有时一个动画效果会加入多种动画,比如一个旋转一边缩放,这时便会用到集合动画AnimationSet把几个补间动画组装起来,实现让某视图同时呈现多种动画的效果 因为集合动画和补间动…

Jetson Orin使用Yolo5开源数据集训练模型检测口罩

软硬件环境: 乌班图 20.04 64位蟒蛇与 3.8.10英伟AGX Orin库达11.4PyTorch1.12YOLOv5-6.1感谢开源数据集下载地址 正常都是自己收集完了训练,今天就省略这个步骤了。 如果想自己制作看下面的流程。 软硬件环境搭建教程链接 刷机的话使用官方教程或者…

DNS协议

DNS服务器 人类更喜欢记忆主机名,而路由器更喜欢定长的、有结构层次的IP地址,DNS应运而生:DNS能进行主机名到IP地址转换的目录服务。 DSN是: (1)一个由分层的DNS服务器(DNS server)实…

元数据管理-解决方案调研二:元数据管理解决方案——Saas/内部解决方案(2)

Saas/内部解决方案 2.5、Azure Purview 地址:Azure Purview - Unified Data Governance Solution | Microsoft Azure 特点: 1、创建跨整个数据资产的统一数据地图,为有效的数据治理和使用奠定基础 1.1、自动化和管理混合源的元数据&#xf…

重打包实现frida持久化 笔记

修改Dex Using Frida on Android without root 修改so [翻译]在未root的设备上使用frida 2个方法本质都是通过重打包让app自己加载frida-gadget.so (但感觉没有谁家app会让人轻易重打包吧。。。) apktool d org.telegram.messenger_4.8.4-12207.apk -r…

Tomcat配置SSL证书别名tomcat无法识别密钥项

Tomcat配置SSL证书一直启动失败,主要问题如下: java.io.IOException: Alias name tomcat does not identify a key entry at org.apache.tomcat.util.net.jsse.JSSEUtil.getKeyManagers(JSSEUtil.java:280) 别名tomcat无法识别密钥项,是因…

STM32单片机远程控制大棚种植系统

想要更多项目私wo!!! 一、电路设计 ​​​​​系统示意图硬件系统 系统由五个单片机系统组成的,其中51系列的单片机四个,STM32F407单片机一个,各个子系统之间通过NRF24L01无线模块进行通信。 系统硬件组成框图​​​​主控制板主要由STM32…

【VuePress2.0】快速开始(不用)

文章目录VuePress2.x1.1 安装安装VuePress2.x(手动安装)1.2 VuePress2.x 基本操作VuePress2.x主题2.1 安装VuePress2.x主题(yarn)2.2 报错解决(没效果,不用看)2.3 VuePress2.x主题 基本操作VueP…

Java基础深化和提高-------IO流

目录 IO流技术介绍 什么是IO 什么是数据源 流的概念 第一个简单的IO流程序 IO流的经典写法 IO流新语法经典写法 Java中流的概念细分 按流的方向分类: 按处理的数据单元分类: 按处理对象不同分类: Java中IO流类的体系 Java中IO的四大抽象…

CleanMyMac X真正好用的Mac电脑系统优化软件应用工具

最用户友好的Mac问题修复程序。删除系统垃圾、不需要的应用程序和恶意软件,并调整您的Mac以获得最高速度。对于速度较慢的计算机,CleanMyMac就能立即使用。 CleanMyMac2023之所以能够获得众多Mac的老用户们的喜爱,是因为其有着非常强大功能提…