《HTTP权威指南》----HTTP报文

news2024/11/15 23:24:11

目录

报文流

报文的组成部分 

 报文语法

1.起始行

2.首部

通用首部,既可以出现在请求报文中也可以出现在响应报文中。

请求首部,提供更多有关请求的信息。

响应首部,提供更多有关响应的信息。

实体首部,描述主题的长度和内容,或者资源本身。

首部延续行 

Accept首部

条件请求首部

 安全请求首部

代理请求首部

实体缓存首部

内容首部

信息性首部

安全响应首部

3.实体

 方法

状态码 

3.1 100 ~ 199 信息性状态码

3.2 200 ~ 299 成功状态码

3.3 300 ~ 399 重定向状态码

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

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


报文流

TTP报文就是在HTTP应用程序之间发送的数据块,这些数据块采用文本形式,以“元信息(meta-information)” 开头,元信息用于描述报文的内容及含义。

将HTTP报文比喻成像河水一样流动,报文只能流向下游,不能流向上游。

术语 “流入(inbound)”、“流出(outbound)”、“上游(upstream)”、“下游(downstream)” 用来描述报文的传输方向。

报文的组成部分 

HTTP报文是简单的格式化数据块,由三部分组成:起始行(start line),首部(header),包含数据的主体(body)

  • 起始行(描述报文)
  • 首部块(属性)
  • 主体部分(主体)

 报文语法

所有的HTTP报文都可以分为两类:请求报文(request message)和响应报文(response message)。

  1.  起始行不同:请求行由HTTP方法、URL、HTTP版本组成,响应行由HTTP版本、响应状态码、原因短句组成
  2. 首部组成不同: 包括通用首部、请求首部、响应首部、扩展首部等
  3. 主体不同: 主体是HTTP报文的负荷,即HTTP要传输的内容。主体可以为空,也可以承载多种类型的数字数据包括图片、视频、HTML、文档、应用程序等

这是请求报文的格式

<method> <request-url> <version>
<headers>

<entity-body>

这是响应报文的格式:

<version> <status> <reason-phrase>
<headers>

<entity-body>
  • method,客户端希望服务器对资源执行的动作。
  • request-url,命名所请求资源,或者URL路径组件的完整URL
  • version,报文所使用的HTTP版本,格式为:HTTP/<major>.<minor>
  • status-code,使用三位数字描述请求过程中发生的情况。
  • reason-phrase,数字状态码的可读版本。
  • header,可以有零个或者多个首部,格式为:<key>:[space]<value>[,<value>...]CRLF,整个首部是由一个CRLF结束的。
  • entity-body,包含由任意数据组成的数据块,有时仅仅是一个CRLF结束符。

1.起始行

所有的HTTP报文都以一个起始行作为开始。

        请求报文的起始行说明了要做些什么

        响应报文的起始行则说明发生了什么。

  • 请求行,请求服务器对资源进行一些操作,包含了一个方法、一个请求URLHTTP的版本,在HTTP/1.0之前,并不要求请求行中包含版本号。
  • 响应行,响应行包含了响应报文使用的HTTP版本、数字状态码以及描述操作状态的原因短语。

2.首部

HTTP首部字段向请求和响应报文中添加了一些附加信息,本质上说,它们只是一些key:value的列表。

通用首部,既可以出现在请求报文中也可以出现在响应报文中。

既可以出现在 请求 报文头中,也可以出现在 响应 报文头中; 主要是供 “发送端” 向 “接收端” 提供本端信息(不论“发送端”是客户端还是服务器,都通用)

Date: Tue, 3 Oct 1974 02:16:00 GMT		# 用于说明报文创建的时间
Connection: keep-alive					# 用于客户端与服务器之间指定与连接有关的选项
MIME-Version:							# 指示发送端所使用的MIME版本
Transfer-Encoding:						# 告知接收端为了保证报文的可靠传输,本端对报文采用的编码方式
  • connection,允许客户端和服务器指定与连接有关的选项。
  • date,报文的创建时间。
  • mime-versionmime类型的版本。
  • trailer,分块传输编码。
  • transfer-encoding,编码方式。
  • update,发送端想升级版本或者协议。
  • via,报文经由的节点。
  • cache-control,缓存指示。

请求首部,提供更多有关请求的信息。

提供更多有关请求的信息,用于客户端向服务器传递一些额外信息,用于客户端向服务器说明 是谁在发送请求、请求源于何处,以及客户端希望获得什么样的响应、客户端处理响应的能力(客户端的喜好及能力)。

Accept: */*				# 指示客户端希望收到什么类型的数据
Accept-Charset:			# 告知服务器能够发送哪些 字符集
Accept-Encoding:		# 告知服务器能够发送哪些 编码方式
Accept-Language:		# 告知服务器能够发送哪些 语言

响应首部,提供更多有关响应的信息。

提供更多有关响应的信息,响应头部用于服务器向客户端提供更多的额外信息。

Server: Tiki-Hut/1.0		# 通知客户端本服务器的类型和版本

实体首部,描述主题的长度和内容,或者资源本身。

描述主体(HTTP报文体)的长度和内容,或者资源本身。

Content-Type: text/html; charset=iso-latin-1

首部延续行 

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

// 长首部
Server:Test Server Version 1.0

// 首部延续行
Server:Test Server
    Version 1.0

Accept首部

accept首部告诉服务器客户端想要什么和不想要什么,服务器需要根据客户端的要求发送符合要求的内容。

  • accpet,允许的媒体类型。
  • accept-charset,允许的字符集。
  • accept-encoding,允许的编码方式。
  • accept-language,允许的语言。
  • te,允许的扩展传输编码。

条件请求首部

为请求加限制,服务端可以根据限制条件满足与否发送不同的内容。

  • expect,期望服务器的行为,例如:100 continue
  • if-match,如果实体标记与文档当前的的实体标记相匹配,就获取这份文档。
  • if-modified-since,除非在某个指定的日期之后资源被修改过,否则限制这个请求。
  • if-none-match,如果提供的实体标记与当前文档的实体标记不相符,就获取文档。
  • if-range,允许对文档的某个范围进行条件请求。
  • if-unmodified-since,除非在某个指定日期之后资源没有被修改过,否则就限制这个请求。
  • range,如果服务器支持范围请求,就请求资源的指定范围。

 安全请求首部

  • authorization,客户端自身认证数据。
  • cookie,客户端令牌。
  • cookie2,用来说明客户端支持的cookie版本。

代理请求首部

  • max-forward,将请求转发给其他代理或者网关的最大次数。
  • proxy-authorization,与客户端认证一样。
  • proxy-connection,与客户端一样。

实体缓存首部

  • etag,与此实体相关的实体标记。
  • expires,缓存的失效时间。
  • last-modified,实体最后一次被修改的日期和时间。

内容首部

  • content-base,解析实体中相对URL时的基础URL
  • content-encoding,对实体执行的任意编码方式。
  • content-language,理解实体最适宜的语言。
  • content-length,实体的大小。
  • content-location,实体所处的位置。
  • content-MD5,实体的md5校验和
  • content-range,在整个资源中此实体表示的字节范围。

信息性首部

  • allow,列出了可以对此实体执行的请求方法。
  • location,告知客户端资源的位置(URL

安全响应首部

  • proxy-authenticate,来自代理的对客户端的质询列表。
  • set-cookie,在客户端写入cookie
  • set-cookie2,与set-cookie类似。
  • www-authenticate,来自服务器对客户端的质询列表

3.实体

实体的主体是HTTP报文的载荷,也就是HTTP要传输的内容,实体是可选的。

HTTP报文可以承载很多类型的数据:图片,视频,HTML文档,Javascript脚本,电子邮件等

实体的主体是HTTP报文的载荷,也就是HTTP要传输的内容,实体是可选的。

 方法

head方法只返回资源首部,使用head可以:

  • 在不获取资源的情况下了解资源情况(content-typecontent-length);
  • 验证资源是否存在;
  • 验证资源是否被修改。

PUT

put方法的语义就是:让服务器用请求的主体部分创建一个用请求主体部分创建一个由所请求的URL命名的新文档,如果已经存在,那么替换。

TRACE

trace方法允许客户端在最终将请求发送到服务器时,看看它变成什么样子了。该方法一般用来验证请求是否按照预期穿过了某些代理。trace请求不能携带实体。

OPTIONS options方法可以询问服务器支持哪些功能,或者可以询问针对特定资源所支持的功能。

DELETE

delete方法就是请求服务器删除请求URL所指定的资源,当然,服务器不一定会这么做,因为HTTP规范允许服务器在不告知客户端的情况下撤销请求。

POST 向服务器输入数据,用它来支持HTML表单

GET 用于请求服务器发送某个资源

安全方法  HTTP规范定义了gethead为安全方法,这意味着gethead不会在服务器产生动作。

状态码 

状态码为客户端提供了一种理解事物处理结果的便捷方式

3.1 100 ~ 199 信息性状态码

下面是HTTP/1.1已定义的信息性状态码:

  • 100 continue,说明已经收到了请求的初始部分,请客户端继续。
  • 101 switching protocols,说明服务器正在根据客户端指定,将协议切换成update首部指定的协议。

100 continue的目的是希望客户端在向服务器发送实体时先询问服务器是否接受这个实体,即客户端需要发送一个携带100 continueexpect首部,这个首部一般用在要传送大文件时,并且客户端不应该一直等待服务器返回100 continue后才发送实体,超过一定时间后,客户端应该直接发送实体。

3.2 200 ~ 299 成功状态码

下面列出了已定义的成功状态码:

  • 200 ok
  • 201 created,用于响应创建对象的请求,比如putlocation为新创建对象的引用。
  • 202 accept,请求已被接受,但是还未执行操作,实体部分应当包含对执行情况的描述,比如完成时间等信息。
  • 203 non-authoritative information,请求的首部并非来自源端服务器,假设你的请求在请求链上被某个资源服务器响应了,可能返回这个状态码。
  • 204 no content,没有实体的响应。
  • 205 reset content,告诉浏览器清除页面中所有的HTML表单元素。
  • 206 partical content,成功执行了一个range请求。

3.3 300 ~ 399 重定向状态码

重定向状态码要么时告知客户端使用替代位置来访问他们所感兴趣的资源(重定向),要么就提供一个替代的响应而不是资源的内容(缓存)。

  • 300 multiple choices,客户端的一个请求实际指向多个资源时,服务器会返回这个状态码以及location列表让客户端选择。
  • 301 moved permanently,永久重定向,location中为现在资源所处的URL
  • 302 found,临时重定向,location中为临时定位资源,并且会把post改为get请求。
  • 303 see other,临时重定向,并且会把post改为get请求。
  • 304 not modified,资源未修改。
  • 305 use proxy,用来说明必须通过代理访问,代理放在location
  • 307 temporary redirect,临时重定向,不过不会修改请求方法,如果是以post请求,那么新的请求就是post

其中302303307都是临时重定向,造成这种结果的原因是HTTP/1.1兼容HTTP/1.0。因为HTTP/1.0希望客户端收到302后,如果原请求是post那么新的请求将被改为getHTTP/1.1则用303307分别实现了修改请求方法和不修改请求方法的功能,而将302保留给HTTP/1.0以保证兼容性。

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

已定义客户端错误状态码:

  • 400 bad request,错误的请求。
  • 401 unauthorized,未认证,和关于认证的首部一起返回。
  • 402 payment required,保留。
  • 403 forbidden,服务器拒绝了,并且不想告诉你拒绝的理由
  • 404 not found,资源或者程序不存在,通常会在实体中告诉客户端具体问题。
  • 405 method not allowed,该方法不被允许,在allowed首部中应该说明允许的方法。
  • 406 not acceptable,服务器没有该URL相关的指定类型的资源,即客户端的首部的accept字段中包含的类型服务器没有。
  • 407 proxy authentication required,要求对资源进行认证的代理服务器。
  • 408 request timeout,如果客户端长时间未完成该请求,那么可以发送此状态码并关闭链接。
  • 409 conflict,请求可能在资源上引发冲突。
  • 410 gone,表示服务器曾经拥有该资源,但是现在没有了。
  • 411 lenth required,表示服务器需要客户端带上content-length首部。
  • 412 precondition failed,客户端包含了expect首部的请求成为条件请求,当条件不满足时,返回该状态码。
  • 413 request entity too large,客户端发送的实体超过了服务器要求的长度。
  • 414 request uri too long,客户端请求的URL太长了!
  • 415 unsupported media type,服务器无法理解的媒体类型。
  • 416 request range not satisfiable,请求指定的范围不满足。
  • 417 expectation failed,请求的expect无法满足。

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

已定义的服务器错误状态码:

  • 500 internal server error,服务器内部错误。
  • 501 not implement,超出服务器能力范围。
  • 502 bad gateway,代理或者网关无法连接到下一级网关(父级网关)。
  • 503 service unavailabe,服务器现在不可用,但是未来可能可用,可以返回一个首部retry-after
  • 504 gateway timeout,和408 request timeout差不多,但是超时问题出现在代理或者网关上
  • 505 http version not supported,服务器不支持或者不想支持该协议版本。

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

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

相关文章

2022年,一个技术账号的年终独白,满篇都写着2个字:真难。

2022年&#xff0c;梦想橡皮擦这个账号经历了成长&#xff0c;突破&#xff0c;回归 2023年&#xff0c;适应改变 文章目录序2022年&#xff0c;梦想橡皮擦账号整体汇总原创博客KPI计划与完成总排名KPI计划与完成2022年&#xff0c;橡皮擦获得的荣誉2022年&#xff0c;做技术博…

日志收集系统架构

背景 应用服务器多&#xff0c;日志文件被分散在各个应用服务器上&#xff0c;需要依次登录每台设备才能查看日志&#xff0c;效率低下&#xff0c;且不利于服务器安全管控&#xff0c;加大生产服务器的风险&#xff1b;日志文件不统一&#xff0c;各项目日志没有统一的规范&a…

Python Django教程之实现天气应用程序

基本设置 将目录更改为天气 cd weather启动服务器 python manage.py runserver要检查服务器是否正在运行&#xff0c;请转到 Web 浏览器并输入为 URL。现在&#xff0c;您可以通过按以下命令停止服务器http://127.0.0.1:8000/ ctrl-c 实现 python manage.py startapp main…

Vehicle Speed Forecasting Based On GCN-LSTM Combined Model

GCN-LSTM模型预测道路交通车辆速度 Vehicle Speed Forecasting Based On GCN-LSTM Combined Model Summary This research offers a multistep traffic flow forecasting framework relying on interest spatial-temporal-graph neural network-long short-term memory neura…

【阅读】《MYSQL技术内幕:innodb》索引

概念 索引的类型 聚集索引&#xff1a;叶子节点包含行记录的全部数据辅助索引&#xff1a;叶子节点不包含行记录的全部数据&#xff0c;除了键值以外&#xff0c;还包含指向索引行的书签。 堆表和索引组织表 堆表 无论是主键索引还是普通索引都是辅助索引。数据是按照插入…

​力扣解法汇总2042. 检查句子中的数字是否递增

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 句子是由若干 token 组成的一个列表&#xff0c;token 间用 单个 空格分隔&…

微信小程序实战十五:Https服务搭建及Nginx配置

文章目录 1.最终效果预览2.后端jar包部署及启动3.前端管理系统部署4.Nginx的配置5.https证书申请6.小程序后台中配置子域名这篇文章重点介绍下微信小程序正式版上线前https服务的搭建及配置过程,之前整个流程都操作过,时隔一年再次从零开始操作有些地方的印象已经模糊了,好记…

Java Swing五子棋项目

一、项目简介 本项目为Java Swing五子棋项目&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse 确保可…

ArcGIS基础实验操作100例--实验50以栅格分区裁剪面要素

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验50 以栅格分区裁剪面要素 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

Vulkan PBR与IBL实践

对我来说&#xff0c;每天能过得心情舒畅&#xff0c;有酒喝有美味佳肴吃&#xff0c;必要时工作一会儿&#xff0c;晚上睡得舒舒服服&#xff0c;就行了。 ——迪希亚 序 说实话我已经记不清上一篇文章是什么时候的事情了&#xff0c;感觉得有好几个月了&#xff0c;但其实我…

【Linux】【信号】

文章目录一、信号是什么1.生活中的信号2.什么是Linux信号3.信号处理的常见方式4.Linux当中的信号二、信号的产生1.signal函数2.核心转储3.验证进程等待中的core dump标记位三、信号的系统调用接口1.kill2.raise3.abort四、由软件条件产生信号alarm五、硬件异常产生信号1.除零异…

从编译到可执行,eBPF 加速容器网络的原理分析 | 龙蜥技术

编者按&#xff1a;eBPF(extended Berkeley Packet Filter) 是一种可以在 Linux 内核中运行用户编写的程序&#xff0c;而不需要修改内核代码或加载内核模块的技术。简单说&#xff0c;eBPF 让 Linux 内核变得可编程化了。本文整理自龙蜥大讲堂第 57 期&#xff0c;浪潮信息 SE…

HTML防数据采集

什么是防采集 就是我们想利用爬虫工具采集某个网站的数据&#xff08;前提当然是公开合法数据&#xff09;&#xff0c;但网站不想给你采集而设置的技术阻挡措施。 常见的防止采集方案 利用输入验证码框验证&#xff0c;在采集某些网站过程中&#xff0c;要求你输入验证码&a…

电源特性测试测试哪些方面?电源特性自动测试系统NSAT-8000介绍

假设电源适配器厂家对电源适配器进行了很合理的测试验证工作&#xff0c;那么电源适配器输出的电压应该是个稳定的电源输出。那么对于一些小型设备而言&#xff0c;电源测试就主要测试设备电源端的测试工作。下面纳米软件Namisoft小编将带大家一起看看&#xff0c;关于电源特性…

Android Jetpack Compose——一个简单的笔记APP

一个简单的笔记APP简述效果视频Hilt提供依赖对象Room CRUD接口实现类内容封装查询所有查询删除插入笔记内容效果图ViewModel依赖注入数据初始化数据处理View标题栏排序组件笔记列表新建&编辑笔记效果图ViewModel依赖注入初始化数据处理View背景颜色条标题保存笔记路由导航建…

动态规划 0-1背包问题(滚动数组思想优化)

目录 125 背包问题&#xff08;二&#xff09;LintCode 炼码 0-1背包滚动数组优化 0-1背包问题&#xff08;一&#xff09;LintCode 炼码 【解法一】二维数组 【解法二】滚动数组 125 背包问题&#xff08;二&#xff09;LintCode 炼码 class Solution { public:/*** para…

HADOOP-3.2.2安装

HADOOP-3.2.2安装一. 准备工作二.安装阶段1. 创建安装目录并安装解压包2.修改配置文件core-site.xml3. 修改hdfs-site.xml4. 修改修改yarn-site.xml5.修改workers文件6.修改hadoop-env.sh7.修改mapred-site.xml8.递归创建目录9.分发文件三.运行阶段1.启动hdfs2.启动yarn3.启动j…

F280049C Crossbar X-BAR

文章目录X-BAR9.1 输入X-BAR9.2 ePWM、CLB和GPIO输出X-BAR9.2.1 ePWM X-BAR9.2.1.1 ePWM X-BAR架构9.2.2 CLB X-BAR9.2.2.1 CLB X-BAR架构9.2.3 GPIO输出X-BAR9.2.3.1 GPIO输出X-BAR架构9.2.4 X-BAR标志总结X-BAR 交叉开关&#xff08;在本章中称为X-BAR&#xff09;提供了以各…

一年风雨几度寒,一杯浊酒敬虎年

我是谁大家好&#xff0c;我是凡夫贩夫&#xff0c;真实姓名不值一提&#xff0c;我的履历也很不值一提&#xff0c;非名校非大厂非专家&#xff0c;一名三非野生java开发者&#xff0c;现居住地河南郑州&#xff0c;就职于一家外包公司。的确&#xff0c;我是一个普通人&#…

(02)Cartographer源码无死角解析-(46) 2D栅格地图→CastRay()函数与贝汉明(Bresenham)算法

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…