HTTP报文

HTTP报文

报文流

HTTP报文是在HTTP引用程序之间发送的数据块,这些数据块以一种文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分,这些报文在客户端,服务器和代理之间流动。

报文流入源端服务器

HTTP使用属于流入和流出来描述事务处理的方向,报文流入源端服务器,工作完成之后,会流入用户的Agent代理中。
在这里插入图片描述

报文向下游流动

HTTP报文会像下游流动,所有报文的发送者在接收者的上游。对于请求报文来说,代理1在代理2的上游
在这里插入图片描述

报文的组成部分

HTTP报文是简单的格式化数据块,每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。由三部分组成: 对报文进行描述的起始行,包含属性的首部块,已经可选的,包含数据的主体部分。
在这里插入图片描述

起始行和首部都是由行分割的ascii文本。每行都以一个或者两个字符组成的行终止序列作为结束,包括一个回车符和一个换行符。这个行终止序列被写作crlf。有些老的,或者不完整的HTTP引用程序不会总是发送回车符,又发送换行符。
使用的主体或者报文的主体是一个可选的数据块,与起始行和首部不同的是,主题中可以包含文本或者二进制数据,也可以为空。

报文的语法

所有的HTTP报文请求可以分为两类: 请求报文和响应报文。请求报文会向web服务器请求一个动作,响应报文会将请求的结果返回给客户端,请求和响应报文的基本报文结构都是相同的。
在这里插入图片描述

// 请求报文
<method> <request-URL> <version>
<headers>
<entity-body>
// 响应报文
<version> <status> <reason-phrarse>
<headers>
<entity-body>

方法: 客户端希望服务器对资源执行的动作
请求URL: 命名了请求资源,或者URL路径组件的完整URL,如果直接和服务器进行对话,只要URL的路径组件是资源的绝对路径。
版本: HTTP版本
状态码: 每个状态码中的第一位都用来描述状态的一般类别。
原因短语: 数字状态码的可读版本,包含行终止序列之前的所有文本。
首部: 可以有零个或者多个首部,每个首部包含一个名字,后面跟着一个冒号。然后是可选的空格,接着是一个只,最后是一个CRLF。
实体的主体部分: 实体的主体部分包含一个有任意数据组成的数据块,并不是所有报文都包含实体的组成部分。

起始行

所有的http报文都是以一个其实作为开始,请求报文的起始行说明了要做些什么,响应报文的起始行说明发生了什么

请求行

请求报文请求服务器对资源进行一些操作,请求报文的起始行,或者请求行,包含了一个方法和一个请求URL,这个方法描述了服务器应该执行的操作。请求URL描述了要对那个资源执行这个方法,请求行中包含HTTP的版本。用来告知服务器,客户端使用的是那种HTTP

响应行

响应报文承载了状态信息和操作产生的所有结果数据。将其返回给客户端,响应报文的起始行,或者称为响应行,包含了响应报文的HTTP版本,数字状态码,以及描述操作状态的文本形式的原因短语
所有这些字符都由空格符进行分割。

方法

请求的起始行以方法作为开始,方法告知服务器要做些什么
在这里插入图片描述

状态码

方法是用来告诉服务器做什么事情的,状态码是告诉客户端,发生了什么事情,状态码位于响应的起始行中。
状态码是在每条响应报文的起始行中返回的,会返回一个数字状态和一个可读的状态。数字码便于沉痼进行差错管理,而原因短语便于人们理解
通过三位数字代码对不同的状态进行分类。200-299之间的状态码表示成功,300-399表示资源被迁移走,400-499表示客户端的请求发生了错误,500-599表示服务器出现了错误
在这里插入图片描述

原因短语

原因短语是响应起始行中的最后一个组件,为状态码提供了文本形式的解释。

版本号

首部

首部分类

HTTP规范定义了首部字段,应用程序也可以随意发明自己所用的首部

  • 通用首部:可以出现在请求报文中,也可以出现在响应报文中
  • 请求首部: 提供更多有关请求的信息
  • 响应首部: 提供更多有关的响应星系
  • 实体首部: 描述主体的长度和内容,或者资源本身
  • 拓展首部: 规范中没有定义过的新首部。
    语法:名字:可选空格 字段值 CRLF
首部延续行

将长的首部行为分为多行可以提高可读性,多出来的每行前面至少有一个空格或者制表符。

HTTP/1.0 200 OK    
Content-Type: image/gif    
Content-Length: 8572    
Server: Test Server    
Version 1.0    
实体的主体部分

HTTP报文的第三部分就是可选的实体主体部分,实体的主体是HTTP报文的负荷,就是HTTP要传输的内容
HTTP报文可以承载很多类型的数字数据: 图片,视频, HTML文档, 软件应用程序, 信用卡事务, 电子邮件等

版本0.9的报文

HTTP/0.9报文也都是由请求和响应组成,但是请求中只包含方法和请求URL,响应中只包含实体,没有版本信息,没有状态码或原因短语,也没有首部。
在这里插入图片描述

方法

安全方法

HTTP定义了一组被安全方法的方法。GET方法和HEAD方法都被认为是安全的。

GET

GET是最常用的方法,通常用于请求服务器发送某个资源,HTTP/1.1要求服务器实现此方法。
在这里插入图片描述

HEAD

HEAD方法和GET方法的行为很类似,但是服务器在响应中只能返回首部,不会返回实体的主体部分,这就允许客户端在没有获取实际资源的情况下,对资源的首部进行检查。

  1. 在不获取资源的情况下了解资源的情况
  2. 通过查看响应中的状态码,查看对象是否存在
  3. 查看首部,检查资源是否被改变
    在这里插入图片描述
PUT

与GET从服务器中读取文档相反,PUT方法会向服务器中写入文档。 PUT方法就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新的文档,或者,如果URL已经存在的话,就用这个主体代替它。

在这里插入图片描述

POST

post方法起初是用来向服务器输入数据的。

TRACE

客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。
TRACE 请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间 HTTP 应用程序组成的请求/响应链上,原始报文是否,以及如何被毁坏或修改过
在这里插入图片描述

TRACE的方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。可以用来查看代理或者其他应用程序对用户请求产生的效果

OPTIONS

OPTIONS方法请求对web服务器告知其支持的各种功能,可以询问服务器支持的方法。
在这里插入图片描述

DELETE

DELETE方法所做的事情就是请服务器删除请求URL所指定的资源。但是客户端应用程序无法保证删除操作一定会被执行。HTTP规范允许服务器在不通知客户端的情况下撤销请求。
在这里插入图片描述

状态码

100 —— 199 信息性状态码

HTTP/1.1 向协议中引入了信息性状态码,这些状态码相对较新。
100:HTTP客户端应用程序中有一个实体的主体部分要发送给服务器,但是希望在发送之前查看一下服务器是否会接受这个实体。

客户端与100Continue

如果客户端在向服务器发送一个实体,并且愿意在发送实体之间等待100 continue响应,客户端发送一个携带了100 continue的expect请求首部。如果客户端不发送实体,就不应该发送100continue expect首部,这样会使得服务器误以为客户端要发送一个实体。
100 continue 是一种优化,客户端应用程序只有在避免向服务器发送一个服务器无法处理或者使用的大实体的时候,才使用100continue

代理与100continue

如果代理从服务器受到了一条带有100 continue期望的请求,如果不知道版本,应该将expect首部放在请求中向下转发。HTTP/1.1 用417 Expectation Failed
代理决定代表http1.0或之前版本兼容的客户端,在其请求中放入expect首部和100continue值,不会讲100 Continue响应转发给客户端。

200 ~ 299 ——— 成功状态码

在这里插入图片描述

300 ~ 399 ——— 重定向状态码

如果资源已经被移动,可以发送一个重定向状态码和一个可选的Loacation首部来告诉客户端资源已经被移走,以及现在的位置。
在这里插入图片描述

可以通过某些重定向状态码对资源的应用程序本地副本和源端服务器上的资源进行验证。对于那些包含了重定向的非HEAD请求进行响应的时候,需要包含一个实体,并且在实体中包含描述信息和指向多个重定向的URL的连接。
在这里插入图片描述

在这里插入图片描述

302 303 307状态码存在一些交叉,主要源于HTTP/1.0和HTTP/1.1应用程序对这些状态码处理方式不同
当HTTP/1.0客户端发起一个post请求,并且在响应中受到302重定向状态码的时候,会接收到Location首部的重定向URL,并且这些URL发起一个GET请求。
HTTP/1.0服务器受到来自HTTP/1.0客户端的POST请求之后发送302状态码,服务器希望客户端能够接受重定向URL,并且向重定向的URL发送一个GET请求
对于HTTP/1.1客户端,用307状态码取代302,称为临时重定向。服务器可以讲302保留起来,为HTTP/1.0进行使用。

400 ~ 499 ——— 客户端错误状态码

在这里插入图片描述

在这里插入图片描述

500 ~ 599 ——— 服务器错误状态码

代理尝试代表客户端与服务器进行交流,代理会发布5XX服务器错误状态码来描述所遇到的问题。
在这里插入图片描述

在这里插入图片描述

首部

首部和方法配合工作,决定了客户端和服务器能做什么事情。

  • 通用首部: 客户端和服务器都可以使用的通用首部
  • 请求首部: 请求首部是请求报文中特有的,为服务器提供了一些额外的信息。
  • 响应首部: 为客户端提供信息。
  • 实体首部: 实体首部是对实体主体部分的首部
  • 扩展首部: 扩展首部是非常标准的首部,未被添加到已批准的HTTP规范中,但是HTTP程序会接受他们并对其进行转发

通用首部

有些首部提供了与报文相关的最基本的信息,它们被称为通用首部
在这里插入图片描述

通用缓存首部

http/1.0 引入了一个允许http应用程序缓存对象本地副本的首部,这样不需要从源服务器获取了,最新的http版本有非常丰富的缓存参数集
在这里插入图片描述

请求首部

请求首部只是在请求报文中有意义的首部,用于说明是谁或什么在发送请求,请求源自何处,或者客户端的喜好以及能力。
在这里插入图片描述

Accept首部

Accept首部: 媒体类型, 字符集, 编码方式, 语言, 拓展传输编码
在这里插入图片描述

条件请求首部

为请求加上限制。
在这里插入图片描述

安全请求首部

要求客户端在获取资源之前,先对自身进行认真,使得事务安全。
在这里插入图片描述

代理请求首部

在这里插入图片描述

响应首部

为客户端提供一些额外的信息。
在这里插入图片描述

协商首部

HTTP/1.1可以为服务器和客户端提供对资源进行协商的能力。
在这里插入图片描述

安全响应首部

在这里插入图片描述

实体首部

由于请求和响应报文中都可能包含实体部分,所以在这两种类型的报文中都可能出现这些首部
实体首部可以告知报文的接收者它在对什么进行处理
在这里插入图片描述

内容首部

在这里插入图片描述

实体缓存首部

在这里插入图片描述

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

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

相关文章

前端项目开发,3个HTTP请求工具

这一小节&#xff0c;我们介绍一下前端项目开发中&#xff0c;HTTP请求会用到的3个工具&#xff0c;分别是fetch、axios和js-tool-big-box中的jsonp请求。那么他们都有哪些小区别呢&#xff1f;我们一起来看一下。 目录 1 fetch 2 axios 3 js-tool-big-box 的 jsonp 请求 …

拷贝构造、移动构造、拷贝赋值、移动赋值

最近在学习C的拷贝构造函数时发现一个问题&#xff1a;在函数中返回局部的类对象时&#xff0c;并没有调用拷贝构造函数。针对这个问题&#xff0c;查阅了一些资料&#xff0c;这里记录整理一下。 调用拷贝构造函数的三种情况&#xff1a; ① 用一个类去初始化另一个对象时&a…

【数据结构与算法 | 基础篇 | 队列篇】力扣102, 107

1. 力扣102 : 二叉树的层序遍历 (1). 题 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3]…

刷爆leetcode第六期

题目一 用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。 int pop() 移除…

【漏洞复现】大华智能物联综合管理平台 fastjson远程代码执行漏洞

0x01 产品简介 大华ICC智能物联综合管理平台对技术组件进行模块化和松耦合&#xff0c;将解决方案分层分级&#xff0c;提高面向智慧物联的数据接入与生态合作能力。 0x02 漏洞概述 由于大华智能物联综合管理平台使用了存在漏洞的Fastson组件,未经身份验让的攻击者可利用 /e…

M功能-支付平台(六)

target&#xff1a;离开柬埔寨倒计时-217day 今天突然发现我在csdn居然把我ip属地搞出来了&#xff0c;之前都没注意到&#xff0c;哎 前言 M功能演示版本做到后期(也就是第二周的后面3天)真的很心酸&#xff0c;这边安排的4后端后面都放弃了&#xff0c;觉得做不出来&#…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的内存隔离和保护

安全之安全(security)博客目录导读 目录 一、内存隔离和保护 1、颗粒PAS过滤Granular PAS filtering 2、Cache的一致性维护 2.1 物理别名点 Point of Physical Aliasing (PoPA) 2.2 加密点 3、内存(DRAM)保护 3.1 内存加密和完整性 3.2 DRAM scrubbing 本博客探讨 RME…

网络编程 —— Http使用httpClient实现页面爬虫

先去找类型的a标签 取出图片所在网址 取出https://desk.3gbizhi.com/deskMV/438.html 搭建Form界面 Http类 public static HttpClient Client { get; } static Http() {HttpClientHandler handler new HttpClientHandler();//处理消息对象//ServerCertificateCustomValidat…

万亿应急国债项目之通信指挥类应急装备多链路聚合通信设备在应急行业中的重要作用

万亿应急国债项目的推出&#xff0c;无疑是我国在应急领域的一次重大举措。在这一宏大蓝图中&#xff0c;通信指挥类应急装备的多链路聚合通信设备显得尤为重要&#xff0c;其在应急行业中所发挥的作用&#xff0c;堪称不可或缺的关键一环。 通信指挥是应急响应中的核心环节&a…

QT C++ 读写mySQL数据库 图片 例子

在上篇文章中描述了怎样搭建读写数据库的环境。 本文更进一步&#xff0c;描述了读写mySQL数据库&#xff0c;字符、整型数字、图片。读写图片相对难点。 数据库的图片字段用BLOB&#xff0c;如果图片较大要用longblob,否则会报错。 另外&#xff0c;读写数据库都使用了短连…

图形学初识--空间变换

文章目录 前言正文矩阵和向量相乘二维变换1、缩放2、旋转3、平移4、齐次坐标下总结 三维变换1、缩放2、平移3、旋转绕X轴旋转&#xff1a;绕Z轴旋转&#xff1a;绕Y轴旋转&#xff1a; 结尾&#xff1a;喜欢的小伙伴可以点点关注赞哦 前言 前面章节补充了一下基本的线性代数中…

前端Vue小兔鲜儿电商项目实战Day02

一、Pinia快速入门 此处见&#xff1a;Vue从入门到实战Day12-CSDN博客 二、创建项目并精细化配置 1. 创建项目 2. src目录调整 ①删除一些初始化的默认文件 清空assets、components、store、views文件夹下的内容&#xff1b; ②修改剩余代码内容 router/index.js import …

华为昇腾310 ATC模型转换工具安装

参考: https://bbs.huaweicloud.com/blogs/393282?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content https://www.hiascend.com/document/detail/zh/canncommercial/601/inferapplicationdev/atctool/atctool_0004.html 1、基本工具…

js知识点之闭包

闭包 什么是闭包 闭包&#xff0c;是 JavaScript 中一个非常重要的知识点&#xff0c;也是我们前端面试中较高几率被问到的知识点之一。 打开《JavaScript 高级程序设计》和《 JavaScript 权威指南》&#xff0c;会发现里面针对闭包的解释各执一词&#xff0c;在网络上搜索关…

23种设计模式之一— — — —装饰模式详细介绍与讲解

装饰模式详细讲解 一、定义二、装饰模式结构核心思想模式角色模式的UML类图应用场景模式优点模式缺点 实例演示图示代码演示运行结果 一、定义 装饰模式&#xff08;别名&#xff1a;包装器&#xff09; 装饰模式&#xff08;Decorator Pattern&#xff09;是结构型的设计模式…

学业辅导导师:文心一言智能体详细介绍和开发

一、前言 本期题目 开发方向&#xff1a;学习成长类 解读&#xff1a; AI技术在学习成长方向的应用正日益增多&#xff0c;本期赛题需围绕该方向开发智能体包括但不限于:作文辅导助手、个性化学习助手、考试助手、各垂类教育内容专家等 二、我的智能体&#xff1a;学业辅导…

2.10 mysql设置远程访问权限

2.10 mysql设置远程访问权限 目录1. 管理员运行mysql命令窗口2. 使用 root 用户重新登录 MySQL3. 修改用户权限4. 修改mysql安装目录下的my.ini 目录 说明&#xff1a; Mysql8.0 设置远程访问权限 一、Mysql8.0 设置远程访问权限 1. 管理员运行mysql命令窗口 2. 使用 root 用…

matlab安装及破解

一、如何下载 软件下载链接&#xff0c;密码&#xff1a;98ai 本来我想自己生成一个永久百度网盘链接的&#xff0c;但是&#xff1a; 等不住了&#xff0c;所以大家就用上面的链接吧。 二、下载花絮 百度网盘下载速度比上载速度还慢&#xff0c;我给充了个会员&#xff0c…

OpenAI 文生图模型演进:DDPM、IDDPM、ADM、GLIDE、DALL-E 2、DALL-E 3

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

WPF使用Prism实现简单订餐系统

新建wpf项目&#xff0c;nuget引入Prism.DryIoc&#xff0c;MaterialDesignThemes 引入后&#xff0c;修改App.xaml 前台引入 xmlns:prism"http://prismlibrary.com/"和prism:PrismApplication App.xaml.cs App.xaml.cs继承PrismApplication&#xff0c;重写CreateS…