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可以为服务器和客户端提供对资源进行协商的能力。
在这里插入图片描述

安全响应首部

在这里插入图片描述

实体首部

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

内容首部

在这里插入图片描述

实体缓存首部

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

盘点韩语中的四字成语柯桥留学韩语学习外语培训

일석이조 一石二鸟 일거양득 一举两得 호장성세 虚张声势 새옹15857575376#지마 塞翁失马 간담상조 肝胆相照 이심전심 心心相印 동고동락 同甘共苦 외유내강 外柔内刚 입신양명 扬名立万 다다익선 多多益善 거두절미 截头去尾 일사천리 一泻千里 자유자재 自由自在 탁상공

一套saas模式云MES系统源码,基于springboot+vue.js+uniapp开发

一套saas模式云MES系统源码&#xff0c;基于springbootvue.jsuniapp开发 MES系统简介 MES系统&#xff0c;即制造执行系统&#xff08;Manufacturing Execution System&#xff09;&#xff0c;是一种面向制造企业车间执行层的生产信息化管理系统。它位于上层的企业资源规划&a…

浅谈路由器转发数据包

当路由器转发数据包时&#xff0c;它会经历一系列步骤&#xff0c;包括接收数据包、路由表查询、以及转发数据包。以下是详细的步骤描述&#xff1a; 1. 接收数据包 以太网帧到达端口&#xff1a;当一个以太网帧到达路由器的某个网络接口&#xff08;端口&#xff09;时&#…

通过Transformers用不同的采样方法生成文本

近年来&#xff0c;随着以OpenAI的ChatGPT和Meta的LLaMA为代表的基于数百万网页数据训练的大型Transformer语言模型的兴起&#xff0c;开放域语言生成领域吸引了越来越多的关注。开放域中的条件语言生成效果令人印象深刻&#xff0c;典型的例子有&#xff1a;GPT2在独角兽话题上…

Javascript 基础知识 —— 重写数组方法

1、写一个函数&#xff0c;实现深度克隆对象 const obj {name: "LIYUFAN",age: 25,career: "初级前端工程师",info: {field: ["JS", "CSS", "HTML"],framework: ["React", "Vue", "Angular"…

什么是边缘计算网关?工业方向应用有哪些?天拓四方

在数字化时代&#xff0c;信息的传输与处理变得愈发重要&#xff0c;而其中的关键节点之一便是边缘计算网关。这一先进的网络设备&#xff0c;不仅扩展了云端功能至本地边缘设备&#xff0c;还使得边缘设备能够自主、快速地响应本地事件&#xff0c;提供了低延时、低成本、隐私…

2.开发环境介绍

开发环境介绍三种&#xff1a;第一种是在线开发环境、第二种是Windows下的开发环境、第三种是Linux下的开发环境。 1.在线开发环境 2.Windows下的开发环境 用的比较多的是Devc&#xff0c;新手适合使用&#xff0c;上手快&#xff0c;简单&#xff0c;方便。 Devc使用&#x…

利用cython将.py文件编译为.pyd文件

文章目录 1. 引言2. py文件编译为pyd文件步骤2.1 环境准备2.2 准备setup.py文件2.3 进行编译 3. 测试代码 1. 引言 在实际的Python开发中&#xff0c;为了防止Python脚本源码暴露&#xff0c;常常需要对python源码文件进行加密保护&#xff0c;Python的原始文件格式为.py&…

精选10款手机必备精品APP,每一款都不容错过!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ ​1.二维码而设计的应用程序——二维码设计 二维码设计 App 是一款专为用户创建和定制二维码而设计的应用程序。该应用适用于iOS和Android平台…

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

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

(函数)颠倒字符串顺序(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <string.h>//声明颠倒函数; void reverse(char a[]) {//初始化变量值&#xff1b;int i, j;char t;//循环颠倒&#xff1b;for (i 0, j strl…

富凡行是什么软件,来具体聊一聊它的详情,感兴趣的不要错过了

目前做网络项目的人很多&#xff0c;也就衍生出了很多的软件、项目、平台。接触过了很多的产品&#xff0c;感触颇深&#xff0c;确实市面上的东西差别都很大&#xff0c;有好的&#xff0c;有不好的。 我也是喜欢在网上做点副业&#xff0c;自己捣鼓一下&#xff0c;毕竟互联网…

【2024.5.29数据库MYSQL史上最详细基础学习汇总】

初识数据库 什么是数据库: DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作; 什么是关系型数据库(SQL)? 关系型数据库是依据关系模型来创建的…

检索字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了很多应用于字符串查找的方法&#xff0c;这里主要介绍以下几种方法。 &#xff08;1&#xff09;count()方…

万亿国债消防救援——北斗应急通讯设备类目推荐

近期&#xff0c;云贵川地区山火肆虐&#xff0c;山火大范围、远距离、独立密集地发生&#xff0c;给消防救援带来了巨大挑战。 消防应急工作是保障人民生命财产安全的重要环节&#xff0c;它涉及到预防火灾、及时应对火灾事故以及灾后恢复等多个方面。在应对火灾、事故和其他…

Web自动化测试需要掌握那些基础技能?速速收藏!

一、WEBUI自动化背景 HONGRUAN 因为web页面经常会变化&#xff0c;所以UI自动化测试的维护成本很高。不如接口的适用面广&#xff0c;所以大部分公司会做接口自动化测试&#xff0c;但是未必会做UI自动化测试&#xff1b; UI自动化测试要做也是覆盖冒烟测试&#xff0c;不会…

如何更改SSH服务器端口以减少蛮力攻击

本周有一个客户&#xff0c;购买Hostease的独立服务器&#xff0c;询问我们的在线客服&#xff0c;如何更改SSH服务器端口以减少蛮力攻击&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对…

扒出秦L三个槽点,我不考虑买它了

文 | Auto芯球 作者 | 雷慢 比亚迪的有一个王炸“秦L”&#xff0c;再一次吸引了我注意力&#xff0c; 我上一辆车刚卖不久&#xff0c;最近打算买第二辆车&#xff0c; 二手车和新车都有在看&#xff0c; 我又是一个坚定的实用主义者&#xff0c; 特别是现在的经济环境不…

5款ai文案自动生成器,让你写作爆款文案不犯难!

现如今&#xff0c;无论是用于社交媒体、广告宣传、网站内容还是其他各种领域&#xff0c;优秀的文案都能吸引更多的关注和流量。但是&#xff0c;对于许多创作者来说&#xff0c;想要创作出高质量的文案并非易事&#xff0c;常常会面临灵感枯竭、思路卡顿等问题。而现在有了一…

display: none 和 visibility: hidden 的共性与区别

display: none 和 visibility: hidden 的共性与区别 共性&#xff1a;display: none 和 visibility: hidden 都是用于设置元素可见性的样式 区别 display: none 使元素及其占位完全消失&#xff1a;元素及其所有子元素将从文档流和布局中完全消失&#xff0c;就像它们不存在一…