HTTP报文

news2024/11/8 18:04:33

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.coloradmin.cn/o/1714752.html

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

相关文章

Java事务入门:从基础概念到初步实践

Java事务入门&#xff1a;从基础概念到初步实践 引言1. Java事务基础概念1.1 什么是事务&#xff1f;1.2 为什么需要事务&#xff1f; 2. Java事务管理2.1 JDBC 的事务管理2.2 Spring 事务管理2.2.1 Spring JDBC2.2.1.1 添加 Spring 配置2.2.1.2 添加业务代码并测试验证 2.2.2…

在做题中学习(62):矩阵区域和

1314. 矩阵区域和 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;二维前缀和 思路&#xff1a;读题画图才能理解意思&#xff1a;dun点点的是mat中的一个数&#xff0c;而要求的answer同位置的数 以点为中心上下左右延长 k 个单位所围成长方形的和。 因为最后answ…

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

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

PLC自动化行业的发展前景好吗?

第一先说plc的薪资&#xff1a; 整体的平均薪资还是非常可观的&#xff0c;在1.3w/月左右。 当然PLC是需要经验积累的&#xff0c;尤其需要拥有大型的系统设计经验&#xff0c;那将会在PLC以至于自动化行业都会吃的开。所以待遇是与自身的经验&#xff0c;能力&#xff0c;所在…

Java设计模式:享元模式实现高效对象共享与内存优化(十一)

码到三十五 &#xff1a; 个人主页 目录 一、引言二、享元设计模式的概念1. 对象状态的划分2. 共享机制 三、享元设计模式的组成四、享元设计模式的工作原理五、享元模式的使用六、享元设计模式的优点和适用场景结语 [参见]&#xff1a; Java设计模式&#xff1a;核心概述&…

GDPU Java 天码行空13

&#xff08;一&#xff09;实验目的 1、掌握JAVA中与网络程序开发相关的知识点&#xff1b; 2、理解并掌握网络编程开发思想及方法&#xff1b; 3、熟悉项目开发的分包方法和依据&#xff1b; 4、实现聊天室中客服端和服务器端的实现方法&#xff1b; 5、熟悉多线程程序开发方…

第五届武汉纺织大学ACM程序设计竞赛 个人题解(待补完)

前言&#xff1a; 上周周日教练要求打的一场重现赛&#xff0c;时长五个小时&#xff0c;题目难度还行&#xff0c;除了部分题目前我还写不出来之外&#xff0c;大部分题都写完或补完了&#xff0c;这边给出比赛链接和我的代码&#xff08;有些是队友的&#xff09;和题解。 正…

工作中有哪些超级好用的C/C++程序库?

视频和讲义发布在这里&#xff1a; B站链接

Spring框架温习

Spring Spring是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点&#xff1a; 轻量级、控制反转、面向切面、容器、框架集合 Spring 核心组件&#xff1a; Spring 常用模块&…

Leecode热题100---二分查找--4:寻找两个正序数组的中位数

题目&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 解法1、暴力解法&#xff08;归并&#xff09; 思路&#xff1a; 合并 nums1&#xff0c;nums2 为第三个数组 排序第三个数…

亚马逊VC账号产品热销,在美国哪些智能小家电产品最好卖?

亚马逊VC账号产品在美国市场的热销&#xff0c;反映了消费者对于特定智能小家电产品的强烈需求。智能小家电产品因其实用性、便捷性和科技感&#xff0c;近年来在美国市场备受追捧。 以下是一些在亚马逊VC账号上热销的智能小家电产品&#xff1a; 智能扫地机器人 这类产品在美…

【传知代码】自监督高效图像去噪(论文复现)

前言&#xff1a;在数字化时代&#xff0c;图像已成为我们生活、工作和学习的重要组成部分。然而&#xff0c;随着图像获取方式的多样化&#xff0c;图像质量问题也逐渐凸显出来。噪声&#xff0c;作为影响图像质量的关键因素之一&#xff0c;不仅会降低图像的视觉效果&#xf…

STM32读写内部FLASH读取芯片id

文章目录 读写内部Flash接线程序编写测试效果补充 读取芯片id代码编写 读写内部Flash 接线 程序编写 首先使用ThisFlash.c来写入flash的基本操作&#xff0c;写入、读取、擦除&#xff0c;然后使用Store.c配合数组来进行主存与flash的交互 ThisFlash.c #include "stm32…

Spring Cloud Gateway 集成 Nacos、Knife4j

目录 1、gateway网关配置1.1 pom 配置2.2 配置文件1.3 yaml 配置 2、其他服务配置2.1 pom 配置2.2 配置文件2.3 yaml 配置 3、界面访问4、其他 官方文档地址&#xff1a;Spring Cloud Gateway集成Knife4j 官方完整源码&#xff1a;https://gitee.com/xiaoym/swagger-bootstrap-…

Redis篇 哈希表在redis中的命令

哈希命令 一.哈希表的基本认识二. 哈希表在redis中的命令1.hset,hget2.hdel3.hkeys,hvals4.hexists5.hgetall6.hmget7.hlen8.hincrby和hincrbyfloat 一.哈希表的基本认识 在JAVA数据结构中&#xff0c;我们就已经接触到了哈希表&#xff0c; 在当时&#xff0c;我们主要用到的哈…

第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计

第16章-超声波跟随功能 无PID跟随功能 //超声波跟随if(HC_SR04_Read() > 25){motorForward();//前进HAL_Delay(100);}if(HC_SR04_Read() < 20){motorBackward();//后退HAL_Delay(100);}PID跟随功能 在pid.c中定义一组PID参数 tPid pidFollow; //定距离跟随PIDpidFol…

CISP难度将加大?还考不考啊...

最新消息&#xff1a;CISP即将调整知识体系大纲&#xff0c;更新题库&#xff0c;后续考试难度加大。 最近几年&#xff0c;CISP改版地比较频繁&#xff0c;难度也在不断上升&#xff0c;因此各位小伙伴有考CISP想法的尽早考。 随着《网络安全法》、《网络空间安全战略》、《…

牛客NC324 下一个更大的数(三)【中等 双指针 Java/Go/PHP/C++】参考lintcode 52 · 下一个排列

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199 思路 第一步&#xff1a;获取数字上每一个数&#xff0c;组成数组arr 第二步&#xff1a;利用“下一个排列” 问题解题方法来继续作答&#xff0c;步骤&#xff1a;利用lintc…

oracle12.1 rac 静默dbca教程(百分之百创建成功)

修改原响应文件 [oracleprimary1 database]$ cd response/ [oracleprimary1 response]$ ls dbca.rsp db_install.rsp netca.rsp [oracleprimary1 response]$ vi dbca.rsp 默认即可 数据库类型内存占比按需选择 运行静默创建实例脚本 [oracleprimary1 response]$ dbca -silen…

虚拟机改IP地址

使用场景&#xff1a;当你从另一台电脑复制一个VMware虚拟机过来&#xff0c;就是遇到一个问题&#xff0c;虚拟的IP地址不一样&#xff08;比如&#xff0c;一个是192.168.1.3&#xff0c;另一个是192.168.2.4&#xff0c;由于‘1’和‘2’不同&#xff0c;不是同一网段&#…