图解HTTP(3、HTTP 报文内的 HTTP信息)

HTTP 通信过程包括从客户端发往服务器端的请求及从服务器端返回客户端的响应。

HTTP 报文

用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文
HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本
HTTP 报文大致可分为报文首部报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常,并不一定要有报文主体。
在这里插入图片描述

请求报文及响应报文的结构

结构:
在这里插入图片描述
示例:
在这里插入图片描述

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

编码提升传输速率

可以按数据原貌直接传输,也可编码传输。通过在传输时编码,能有效地处理大量的访问请求。
但是,编码的操作需要计算机来完成,因此会消耗更多的 CPU 等资源。

报文主体和实体主体的差异 [页面顶部]

HTTP 报文的主体用于传输请求或响应的实体主体
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

  • 报文(message)
    是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence,其中 octet 为 8 个比特)组成,通过 HTTP 通信传输。
  • 实体(entity)
    作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。
内容编码后的实体由客户端接收并负责解码。
  gzip(GNU zip)
  compress(UNIX 系统的标准压缩)
  deflate(zlib)
  identity(不进行编码)

分割发送的分块传输编码

实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)。
每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。
在这里插入图片描述

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

在这里插入图片描述

在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上Content-type。
使用 boundary 字符串来划分多部分对象集合指明的各类实体。前插入“–”标记(例如:–AaB03x、–THIS_STRING_SEPARATES),而在多部分对象集合对应的字符串的最后插入“–”标记(例如:–AaB03x–、–THIS_STRING_SEPARATES–)作为结束。

  • multipart/form-data
  • multipart/byteranges
  • multipart/form-data
  • multipart/byteranges

获取部分内容的范围请求

需求:如果下载过程中遇到网络中断的情况,那就必须重头开始。为了解决上述问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载
实现:指定范围发送的请求叫做范围请求(Range Request)
用首部字段 Range 来指定资源的 byte 范围。响应会返回状态码为 206 Partial Content 的响应报文。
  5001~10 000 字节

Range: bytes=5001-10000  

  从 5001 字节之后全部的

Range: bytes=5001-  

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

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉(如:显示中文、英文页面),然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
包含在请求报文中的某些首部字段(如下)就是判断的基准
  Accept
  Accept-Charset
  Accept-Encoding
  Accept-Language
  Content-Language

内容协商技术:

  • 服务器驱动协商(Server-driven Negotiation)
    由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。但对用户来说,以浏览器发送的信息作为判定的依据,并不一定能筛选出最优内容。
  • 客户端驱动协商(Agent-driven Negotiation)
    由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选择。比如按 OS 的类型或浏览器类型,自行切换成 PC 版页面或手机版页面。
  • 透明协商(Transparent Negotiation)
    是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。

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

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

相关文章

快速判断出485从站设备是否支持MODBUS RTU无线通讯

对于变频器和仪表设备,都支持485串口通讯,那么怎么判断从站设备支持那种协议呢?通常分为两种方式去判断:1.从设备参数参看2.从设备通讯报文查看。本次文章以以台达MH300系列变频器为例。 1.从设备通讯参数查看 使用设备之前一定…

电子杂志制作攻略,轻松打造高质量数字出版物

随着数字科技的飞速发展,电子杂志作为一种新型的数字出版物,已经越来越受到人们的青睐。它不仅具有丰富的内容、多样的形式,还具有便捷的传播和阅读方式。如今,电子杂志已经逐渐成为企业、媒体和个人展示自身品牌、传播信息的重要…

31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!

赛事概况 随着语音合成技术的不断进步,合成语音与真实语音之间的界限变得模糊,这不仅对数据安全构成威胁,也对科技伦理提出了新的要求。 第九届“信也科技杯”全球AI算法大赛聚焦于语音深度鉴伪识别领域,旨在激发全球算法爱好者和专家的创新潜力,共同应对由人工智能技术发展带来…

如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库

前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!&#x1f496…

PSRAM是什么?

1.PSRAM是什么? PSRAM,全称 伪静态随机存储器,它是采用动态随机存储器的工艺和技术,实现类似于静 态随机存储器一样的存储器件。静态随机存储器采用6T架构,而动态随机存储器采用1T(晶体管)1C&a…

吴恩达机器学习笔记:第 10 周-17大规模机器学习(Large Scale Machine Learning)17.1-17.2

目录 第 10 周 17、 大规模机器学习(Large Scale Machine Learning)17.1 大型数据集的学习17.2 随机梯度下降法 第 10 周 17、 大规模机器学习(Large Scale Machine Learning) 17.1 大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更…

VastGaussian:用于大型场景重建的巨大3D高斯函数

VastGaussian:用于大型场景重建的巨大3D高斯函数 摘要IntroductionRelated WorkPreliminariesMethod VastGaussian: Vast 3D Gaussians for Large Scene Reconstruction. 摘要 现有基于NeRF的大型场景重建方法在视觉效果和渲染速度方面往往存在限制。虽然最近的3D高斯分裂在小…

Goby 漏洞发布|瑞友天翼应用虚拟化系统 /hmrao.php SQL注入漏洞

漏洞名称:瑞友天翼应用虚拟化系统 /hmrao.php SQL注入漏洞 English Name: Ruiyou-Tianyi-App-Virtualization-Delivery-Platform /hmrao.php SQL Injection Vulnerability CVSS core: 9.8 影响资产数:75202 漏洞描述: 瑞友天…

P5490.扫描线(python)

这个洛谷怎么对于python不太友好呢,没几次能全过的 本题使用扫描线的模板,首先把所有x坐标排序去重,放进列表X中。把所有横线lines排序。这样把所有矩阵都分成了块。对于每一块,高lines[i1]-lines[i],宽就等于在这一块…

京东h5st4.7逆向分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未…

MQTT 5.0 报文解析 04:PINGREQ 与 PINGRESP

欢迎阅读 MQTT 5.0 报文系列 的第四篇文章。在上一篇中,我们已经介绍了 MQTT 5.0 中的 SUBSCRIBE 报文和 UNSUBSCRIBE 报文。现在,我们将介绍用于维持连接的控制报文:PINGREQ 和 PINGRESP。 除了用于连接、发布和订阅的控制报文,…

WebSocket建立网络连接——小案例

WebSocket是一种实现全双工通信的网络技术标准,它允许在用户的浏览器和服务器之间进行持久的、双向的通信。以下是对WebSocket的具体介绍: 实时性:与传统HTTP请求相比,WebSocket提供了更高效的实时数据交换方式。一旦建立连接&am…