RFC2616 超文本传输协议 HTTP/1.1

news2024/11/25 6:40:15

一、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 属性值是 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)、404(Not Found)、403(Forbidden)、302(Redirect, 重定向)、504(Bad Gateway)

五、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,它们的使用频率也很高

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://www.coloradmin.cn/o/2220179.html

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

相关文章

gitee建立/取消关联仓库

目录 一、常用指令总结 二、建立关联具体操作 三、取消关联具体操作 一、常用指令总结 首先要选中要关联的文件,右击,选择Git Bash Here。 git remote -v //查看自己的文件有几个关联的仓库git init //初始化文件夹为git可远程建立链接的文件夹…

c语言基础程序——经典100道实例。

c语言基础程序——经典100道实例 001, 组无重复数字的数002,企业发放的奖金根据利润提成003,完全平方数004,判断当天是这一年的第几天005,三个数由小到大输出006,输出字母C图案007,特殊图案008&…

前端一键复制解决方案分享

需求背景 用户需要对流水号进行复制使用,前端的展示是通过样式控制,超出省略号表示,鼠标悬浮展示完整流水号。此处的鼠标悬浮展示采用的是:title,这样就无法对文本进行选中。 下面是给出一键复制的不同的解决方案,希望…

1.计算机网络_基本知识

基本知识 计算机网络的类别: 1、按作用范围来分类 2、按网络的使用者来分类 什么是计算机网络: 计算机网络由若干个节点和链接这些节点的链路组成,节点可以是计算机、集线器、交换机、路由器等。互联网络是多个网络通过路由器连接在了一起…

【zookeeper】集群配置

zookeeper 数据结构 zookeeper数据模型结构,就和Linux的文件系统类型,看起来是一颗树,每个节点称为一个znode.每一个Znode默认的存储1MB的数据,每个Znode都有唯一标识,可以通过命令显示节点的信息每当节点有数据变化…

【C#】使用vue3的axios发起get和post请求.net framework部署的API显示跨域

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言跨域提示解决方案现状跨域疑问跨域概念相关文章 前言 最近在对接…

Electron入门笔记

Electron入门笔记 ElectronElectron 是什么Electron流程模型创建第一个Electron项目配置自动重启主进程和渲染进程通信打包应用 Electron Electron 是什么 跨平台的桌面应用开发框架使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium和 Node.js Electro…

【Python网络编程】学习Socket编程,打造网络应用!

【Python网络编程】学习Socket编程,打造网络应用! 网络编程是现代计算机科学中的重要一环,几乎所有的应用都依赖网络传输数据。无论是创建简单的客户端-服务器模型,还是构建复杂的网络应用,Socket 编程都是关键的技术…

【远程监控新体验】OpenObserve结合内网穿透无公网IP远程访问全攻略

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址6. 配置固定公网地址前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可观…

java导出带图形的word

先看效果图:方法都是一样的,所以数据只做了前两组 第一步需要准备模版: 新建一个word插入图表,选择想要的图表。 编辑图表:营业额表示数字,季度表示文字。其他的样式编辑可根据自己的需求更改,…

怎么给word文字注音?准确率高达80%,操作简单

怎么给word文字注音?在数字化办公日益普及的今天,Microsoft Word作为最常用的文字处理软件之一,承载着无数人的文档编辑需求。然而,在这个看似功能强大的工具中,有一个实用却常被忽视的功能——为文字注音。这对于教育…

电感的学习

电感是表示电路中电流变化对电压影响的物理量,常用符号 LLL 表示。电感的基本公式可以从其定义和基本特性中得出,主要包括以下几个方面: 1. 电感的定义 2. 电感能量存储 3. 自感与互感 自感:电感器自身的电感,表示电…

2024 OSCAR|《开源体系建设路径模式洞察与建议》即将发布

近年来,开源体系建设受到高度重视,国家软件发展战略和“十四五”规划纲要均对开源作出重要部署,为我国开源体系建设和发展指明了方向。9月25日,工业和信息化部党组书记、部长金壮指出要加强开源体系建设,助推产业高质量…

03 springboot-国际化

Spring Boot 提供了很好的国际化支持,可以轻松地实现中英文国际化。 项目创建,及其springboot系列相关知识点详见:springboot系列 springboot系列,最近持续更新中,如需要请关注 如果你觉得我分享的内容或者我的努力对…

构建高效房屋租赁平台:SpringBoot应用案例

第1章 绪论 1.1 课题背景 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。所以各行业,尤其是规模较大的企业和学校等…

爱维艾夫净利润下滑权益回报率骤降,退款数量增加市占率仅1%

《港湾商业观察》施子夫 9月13日,爱维艾夫医院管理集团有限公司(以下简称,爱维艾夫)第二次递表港交所,保荐机构为中信证券。 爱维艾夫的第一次递表发生在2023年12月,后因递表资料失效而告终。一年不到的时…

基于SSM机场网上订票系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,机票信息管理,订单信息管理,机场广告管理,系统管理 前台账号功能包括:系统首页,个人中心,机票信息&#xf…

餐饮行业有什么好的供应链管理系统

在餐饮企业的供应链管理中,合适的供应链管理系统是至关重要的,它能够帮助企业提高食材采购效率、降低成本、确保食材供应的及时性和质量。然而,许多餐饮企业在供应链管理系统方面存在诸多问题,常常会面临以下困境: ●…

【路径跟踪控制:Bang-Bang 控制与车辆运动学模型】

【路径跟踪控制:Bang-Bang 控制与车辆运动学模型】 1. 引言2. 环境准备3. 车辆运动学模型3.1 理论基础3.2 Python 实现车辆运动学模型建模 4. Bang-Bang 控制策略4.1 理论基础4.1.1 误差角度计算与转向角调整4.1.2 Bang-Bang控制实现 4.2 完整代码4.3 控制策略解释 …