RFC2616 超文本传输协议 HTTP/1.1

一、URL-俗称“网址”

在这里插入图片描述
HTTP 使用 URL(Uniform Resource Locator,统一资源定位符)来定位资源,它是 URI(Uniform Resource Identifier,统一资源标识符)的子集,URL 在 URI 的基础上增加了定位能力

URI 除了包含 URL,还包含 URN(Uniform Resource Name,统一资源名称),它只是用来定义一个资源的名称,并不具备定位该资源的能力

urlencode、urldecode
像 : / ? 等这样的字符, 已经被 url 当做特殊含义理解了,因此这些字符不能随意出现,否则需要对其进行转义

例如,‘+’ 经过 urlencode 被转义成了 “%2B”
在这里插入图片描述
而 urldecode 就是 urlencode 的逆过程

二、HTTP 报文

1、请求报文

在这里插入图片描述

  1. 第一行是请求行,包含用于请求的方法、URL 和 HTTP 版本
  2. 接下来的多行都是首部(Header),包含请求首部、通用首部、实体首部以及 HTTP 的 RFC 中未定义的其他首部(Cookie 等)
  3. 一个空行用来分隔首部和主体(Body),Body 允许为空字符串,如果 Body 存在, 则 Header 中会有一个 Content-Length 属性用于标识 Body 长度

2、响应报文

在这里插入图片描述

  1. 第一行是状态行,包含HTTP 版本、表明响应结果的状态码和状态码描述
  2. 接下来的多行都是首部(Header),包含响应首部、通用首部、实体首部以及 HTTP 的 RFC 中未定义的其他首部(Cookie 等)
  3. 一个空行用来分隔首部和主体(Body),Body 允许为空字符串,如果 Body 存在, 则 Header 中会有一个 Content-Length 属性用于标识 Body 长度

此时可能会有疑问,示例 Header 中也没有 Content-Length 属性啊,但请注意,服务器返回了一个 html 页面,而且 Header 中的 Transfer-Encoding(HTTP/1.1) 属性值是 chunked

三、HTTP 请求方法

方法说明支持的 HTTP 版本注意
GET获取资源1.0、1.1常用方法
POST传输主体1.0、1.1常用方法
PUT传输文件1.0、1.1鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件,存在安全问题,因此一般的 Web 网站不使用
HEAD获取报文首部1.0、1.1
DELETE删除文件1.0、1.1鉴于 HTTP/1.1 的 DELETE 方法自身也不带验证机制,所以一般的 Web 网站也不使用
OPTIONS访问支持的方法1.1
TRACE追踪路径1.1TRACE 方法不怎么常用,而且还容易受到 XST(Cross-Site Tracing,跨站追踪) 攻击
CONNECT要求用隧道协议连接代理1.1使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输
LINK建议和资源之间的联系1.0
UNLIKE断开连接关系1.0

四、HTTP 状态码

类别原因短语
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

常见的状态码如下:

  • 200:OK,从客户端发来的请求在服务器端被正常处理了,在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变,比如,使用 GET 方法时,对应请求资源的实体会作为响应返回,而使用 HEAD 方法时,在响应中只返回首部,不会返回主体部分

  • 204:No Content,请求已成功处理,但在返回的响应报文中不包含主体部分,一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用,比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新

  • 206:Partial Content,客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求,响应报文中包含由 Content-Range 指定范围的实体内容

  • 301:Moved Permanently,永久性重定向

  • 302:Found,临时性重定向

  • 303:See Other,和 302 有着相同的功能,但 303 明确表示客户端应当采用 GET 方法获取资源

301、302 标准是禁止将 POST 方法改变成 GET 方法的,但当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送

  • 304:Not Modified,客户端发送附带条件的请求(附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部)时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然呗划分在 3xx 类别中,但是和重定向没有关系

  • 307:Temporary Redirect,临时重定向,与 302 有着相同的含义,但 307 会遵守浏览器标准,不会从 POST 变成
    GET,但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况

  • 400:Bad Request,请求报文中存在语法错误

  • 401:Unauthorized,发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息,如果之前已进行过一次请求,则表示用户认证失败
    在这里插入图片描述

  • 403:Forbidden,请求被拒绝,服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在主体部分对原因进行描述,这样就能让用户看到了

  • 404:Not Found,服务器上无法找到请求的资源,除此之外,也可以在服务器端拒绝请求且不想说明理由时使用

  • 500:Internal Server Error,服务器端在执行请求时发生了错误

  • 503:Service Unavailable,服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

五、HTTP 首部

1、首部

常见的首部见下:

  • Content-Type:数据类型(text/html 等)
  • Content-Length:Body 长度
  • Host:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
  • User-Agent:声明用户的操作系统和浏览器版本信息
  • referer:当前页面是从哪个页面跳转过来的
  • location:搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问
  • Cookie:用于在客户端存储少量信息. 通常用于实现会话(session)功能

1.1、HTTP/1.1 首部

通用首部

首部名说明
Cache-Control控制缓存的行为
Connection逐跳首部、连接的管理
Date创建报文的日期时间
Pragma报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器的相关信息
Warning错误通知

请求首部

首部名说明
Accept用户代理可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的内容编码
Accept-Language优先的语言(自然语言)
AuthorizationWeb 认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器
If-Match比较实体标记(ETag)
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记(与 If-Match 相反)
If-Range资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since比较资源的更新时间(与 If-Modified-Since 相反)
Max-Forwards最大传输逐跳数
Proxy-Authorization代理服务器要求客户端的认证信息
Range实体的字节范围请求
Referer对请求中 URL 的原始获取方
TE传输编码的优先级
User-AgentHTTP 客户端程序的信息

响应首部

首部名说明
Accept-Ranges是否接受字节范围请求
Age推送资源创建经过时间
ETag资源的匹配信息
Location令客户端重定向至指定 URL
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求
ServerHTTP 服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息

实体首部

首部名说明
Allow资源可支持的 HTTP 方法
Content-Encoding主体适用的编码方式
Content-Language主体的自然语言
Content-Length主体的大小(单位:字节)
Content-Location替代对应资源的 URL
Content-MD5主体的报文摘要
Content-Range主体的位置范围
Content-Type主体的媒体类型
Expires主体过期的日期时间
Last-Modified资源的最后修改日期时间

1.2、非 HTTP/1.1 的其他首部

在 HTTP/1.1 协议通信交互中使用到的首部,不限于 RFC2616 中定义的上述 47 种,还有一些非正式的首部,如 Cookie、Set-Cookie 和 Content-Dispostion 等都定义在 RFC4229 HTTP Header Field Registrations,它们的使用频率也很高

1.3、压缩传输的内容编码

内容编码指将主体压缩,客户端负责解码,其中,常见的内容编码如下:

  • gzip:GNU zip
  • compress:UNIX 系统的标准压缩
  • default:zlib
  • identity:不进行压缩

1.4、分割发送的分块传输编码

分块传输编码(Chunked Transfer Encoding)指将主体分块,每一块都会用十六进制来标记块的大小,而最后一块会使用 0(CR+LF) 来标记,客户端接收后进行解码,让浏览器逐步显示页面

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

一份报文主体内可含有多类型主体,另,多部分对象集合可以嵌套使用,其中,包含的对象如下:

  • multipart/from-data
    在 Web 表单文件上传时使用
    在这里插入图片描述
  • multipart/byteranges
    状态码 206 响应报文包含了多个范围的内容时使用
    在这里插入图片描述

1.6、获取部分内容的范围请求

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

2、长短连接

HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接
在这里插入图片描述
以当年的通信情况来说,因为都是些容量很小的文本传输,所以即使这样也没有多大问题,可随着 HTTP 的普及,文档中包含大量图片的情况多了起来,比如,使用浏览器浏览一个包含多张图片的 HTML 页面时,在发送请求访问 HTML 页面资源的同时,也会请求该页面里包含的其他资源,因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销
在这里插入图片描述
为了解决上述 TCP 连接的问题,想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法,持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态
在这里插入图片描述
持久连接的好处在于减少了 TCL 连接的重复创建和断开所造成的额外开销,减轻了服务器端的负载,另外,减少开销的那部分时间,使 HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了

HTTP/1.1,默认长连接,如果想断开连接,需要由客户端或服务器端任意一端使用 Connection: close 明确提出断开连接
HTTP/1.1 以前,默认短连接,如果想用长连接,需要指定 Connection: Keep-Alive

3、管线化

持久连接使得多数请求以管线化(pipelining)方式发送成为可能,从前发送请求后需等待并收到响应,才能发送下一个请求,管线化技术出现后,不用等待响应亦可直接发送下一个请求,这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了
在这里插入图片描述
比如,当请求一个包含 10 张图片的 HTML Web 页面,与挨个连接相比,用持久连接可以让请求更快结束,而管线化技术则比持久连接还要快,请求数越多,时间差就越明显

4、Cookie

HTTP 是一种不保存状态,即无状态(stateless)协议,HTTP 协议自身不对请求和响应之间的通信状态进行保存,也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理
在这里插入图片描述
使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生,协议本身并不保留之前一切的请求或响应报文的信息,这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的,可是,随着 Web 的不断发展,因无状态而导致业务处理变得棘手的情况增多了,比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态,针对这个实例,网站为了能够掌握是谁送出的请求,需要保存用户的状态,HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术

Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态,Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-cookie 的首部字段信息,通知客户端保存 Cookie,当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去,服务端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息
在这里插入图片描述
上图展示了发生 Cookie 交互的场景,HTTP 请求报文和响应报文的内容如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、HTTPS

七、HTTP/2.0

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

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

相关文章

ADC的交流参数

ADC的交流参数是衡量其在处理交流信号时性能的关键指标。一般包括: 1 信噪比(Signal-to-Noise Ratio, SNR) 这是衡量ADC输出信号中有用信号与噪声水平的比值。信噪比越高,表示ADC的性能越好。 SNR (dB) MaxRMSSignal / RMSNoise…

【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 select语句数据查询操作详解 今天干货满满!《1024特别篇》

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 select查询语句…

百度ocr服务自动实现文字识别、图片识别功能

百度ocr服务个人注册使用 介绍一个百度免费的ocr服务,通过调用SDK实现文字、图片识别等功能 1. 复制地址到自己的浏览器打开 https://cloud.baidu.com/doc/OCR/index.html2. 选择【登录】 3. 使用【短信登录】 4. 登录后需要选择【个人刷脸实名认证】 百度官方网…

第5.2章|25考研复试综合素质面试最常见问题50问【附上完整答案】超详细考研机械复试面试经验总结全流程 考研复试调剂问题看这一篇就够了!

接着上一章节的内容我们继续完善这50问的题目。上章节的内容参考这个文章。 第5.1章|25考研复试综合素质面试最常见问题50问【附上完整答案】超详细考研复试面试经验总结全流程 考研复试问题看这一篇就够了!考研复试调剂面试问题-CSDN博客https://blog.csdn.net/weixin_56510…

Linux基础命令(六)之 cut,sort,uniq,tr

目录 一,切割显示cut 参数及其作用 常见用法 二,排序显示sort 参数及其作用 常见用法 三,去重显示uniq 常见用法 四,替换文件中的字符显示tr 参数及其作用 常见用法 一,切割显示cut 用于按列提取文本内容 语…

Redis学习笔记(三)--Redis客户端

文章目录 一、命令行客户端二、图形界面客户端1、Redis Desktop Manager2、RedisPlus 三、java代码客户端 本文参考: Redis学习汇总(已完结) Redis超详细入门教程(基础篇) Redis视频从入门到高级,redis视频…

Text实现美团部分样式

Text基础 首先是Text的相关基础。 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text-0000001815927600 Text是显示一段文本的组件。 可以包含Span、ImageSpan、SymbolSpan和ContainerSpan子组件。 接口 Text(content?: string | …

基于SpringBoot设计模式之结构型设计模式·桥接模式

文章目录 介绍开始架构图定义类的功能定义类的实现 测试样例 总结 介绍 将抽象部分与它的实现部分分离,使他们都可以独立地发生变化。 Bridge的意思是桥梁。就像在现实世界中,桥梁的功能是将河流的两侧连接起来一样, Bridge模式的作用也是将两样东西连接…

西南大学的计算机怎么样?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南大学计算机学院2024届考研呈现"背道而驰"的走势,学硕(计算机科学与技术)分数线大幅提升23分至333分,而专硕(电子信息)分数线大幅下降30分至300分。学硕实际录取36人,复…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

AI创作3款软件分享,助力内容创作者高效产出优质作品

为了增加创造力和作品质量,许多创作者开始利用人工智能辅助工具。这些工具不仅可以帮助我们迅速生成各种类型的内容,例如文章、绘画、视频广告等,还提供语法检查和优化建议等实用功能。本文将向大家推荐三款适用于Ai先行者、Tracup、Adoe Fir…

PDF.js的使用及其跨域问题解决

目录 一、PDF.js 简介 二、使用配置和步骤 1.引入PDF.js 2.加载PDF文件 3.渲染PDF页面 三、在Vue中使用PDF.js示例 1.安装PDF.js 2.在Vue组件中使用 四、在原生js中使用PDF.js示例 1.加载PDF文件并渲染页面 五、解决跨域问题 1.服务器配置 2.使用代理服务器 下面介…

【大模型】3分钟了解提示(Prompt)工程、检索增强(RAG)和微调

我们先看下面这个图: 简单理解大模型是通过海量训练数据训练出来的,它的能力非常强,但是有时候会给出错误的回答。那产生错误的原因可能是什么呢? 1.提问错误(提示工程) 在我们提问的方式不对的情况下&a…

MySql中常用的日期函数

TIMESTAMPDIFF(unit, start_time, end_time):日期相减 计算两个时间之间的差值,并以指定的单位返回结果。unit参数可以是以下之一:SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER或YEAR。这个函数返回的是两个时间之间的差值,可…

Anchor DETR论文笔记

原文链接 [2109.07107] Anchor DETR: Query Design for Transformer-Based Object Detection (arxiv.org)https://arxiv.org/abs/2109.07107 原文笔记 What 提出了一种新的基于锚点的查询设计,即将锚点编码为对象查询。 Why 对象检测任务是预测图像中每个对象…

消息队列(仿RabbitMQ)—— 生产消费模型

本篇将实现一个3000多行的一个小项目,基于AMQP(高级消息队列协议)的消息队列,主要仿照 RabbitMQ 实现该代码,其本质也是生产消费模型的一个升级版本。实现的功能为:消息发布端将消息发送到服务器端&#xf…

vue elementui el-table实现增加行,行内编辑修改

需求&#xff1a; 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;可进行行编辑。 效果图&#xff1a; <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…

Idea、VS Code 如何安装Fitten Code插件使用

简介 Fitten Code是由非十大模型驱动的AI编程助手&#xff0c;它可以自动生成代码&#xff0c;提升开发效率&#xff0c;帮您调试Bug&#xff0c;节省您的时间。还可以对话聊天&#xff0c;解决您编程碰到的问题。免费且支持80多种语言&#xff1a;Python、C、Javascript、Typ…

Spring Cache Caffeine 高性能缓存库

​ Caffeine 背景 Caffeine是一个高性能的Java缓存库&#xff0c;它基于Guava Cache进行了增强&#xff0c;提供了更加出色的缓存体验。Caffeine的主要特点包括&#xff1a; 高性能&#xff1a;Caffeine使用了Java 8最新的StampedLock乐观锁技术&#xff0c;极大地提高了缓存…

多模态大语言模型(MLLM)-Deepseek Janus

论文链接&#xff1a;https://arxiv.org/abs/2410.13848 代码链接&#xff1a;https://github.com/deepseek-ai/Janus 本次解读Janus: Decoupling Visual Encoding for Unified Multimodal Understanding and Generation 前言 Deepseek出品&#xff0c;必属精品。 创新点 传…