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 属性值是 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 首部

1.1.1、通用首部
1.1.2、请求首部
1.1.3、响应首部
1.1.4、实体首部

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.mzph.cn/news/882257.shtml

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

相关文章

车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导

FOTA模块中OTA的知识点:1.测试过程中发现哪几类问题? 可能就是一个单键的ecu,比如升了一个门的ecu,他的升了之后就关不上,还有就是升级组合ecu的时候,c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

5G NR:UE初始接入信令流程浅介

UE初始接入信令流程 流程说明 用户设备(UE)向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息,如果 UE 被接纳,则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置,并将其传输到 gNB-CU。IN…

PFC和LLC的本质和为什么要用PFC和LLC电路原因

我们可以用电感和电容的特性,以及电压和电流之间的不同步原理来解释PFC(功率因数校正)和LLC(谐振变换器)。 电感和电容的基本概念 电感(Inductor): 电感是一种储存电能的组件。它的电流变化比较慢,电流在电感中延迟,而电压变化得比较快。可以把电感想象成一个“滞后…

『Mysql集群』Mysql高可用集群之主从复制 (一)

Mysql主从复制模式 主从复制有一主一从、主主复制、一主多从、多主一从等多种模式. 我们可以根据它们的优缺点选择适合自身企业情况的主从复制模式进行搭建 . 一主一从 主主复制 (互为主从模式): 实现Mysql多活部署 一主多从: 提高整个集群的读能力 多主一从: 提高整个集群的…

transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(文末免费送书)

上周收到一位网友的私信,希望老牛同学写一篇有关使用 transformers 框架推理大模型的技术细节的文章。 老牛同学刚开始以为这类的文章网上应该会有很多,于是想着百度几篇质量稍高一点的回复这位网友。结果,老牛同学搜索后发现,类…

信息与计算科学:“数学 + 计算机”,奏响未来科技新乐章

在当今科技飞速发展的时代,有一个专业如同一颗闪耀的新星,散发着独特的魅力,那就是信息与计算科学专业。 一、专业全貌:追根溯源,领略交叉之美 (一)专业的诞生与发展 1998 年,教育…

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中,经常会需要进行各种业务流程梳理,而流程图就是梳理业务时必要的手段,同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…

RHCE——例行性工作

准备工作 [rootlocalhost ~]# cat /etc/yum.repos.d/aliyun.repo [ali-app] nameali-app baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ gpgcheck0[ali-base] nameali-base baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/Base…

JS | JS中类的 prototype 属性和__proto__属性

大多数浏览器的 ES5 实现之中,每一个对象都有__proto__属性,指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链。 构造函数的子类有prototype属性。‌ …

倍福中控显示屏维修控制面板CP7732-1207-0030

使用的环境条件不当可能会损坏设备。 保护设备,防止灰尘、湿气和热量进入。 使用注意事项: 空气流通不畅 设备安装不正确会阻碍设备内的空气流通,从而导致过热和功能受损。 只能按所示方向将设备安装在相应的壁上。 该设备设计用于安装在…

05 P1157 组合的输出

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; # define M 500 #include<algorithm>int sa[100005],k,n,count1;bool func(int n) {int mark0;if(n1){return 1;}else{for(int i2;i<n-1;i){if(n%i0){mark1;return 0;}}if(mark0)r…

强化学习案例:美团是如何在推荐系统中落地强化学习

目录 美团的强化学习应用场景和分析 场景举例 使用原因 强化学习的六大要素 智能体 环境 行动 奖励 目标 状态 美团强化学习模型设计 美团强化学习工程落地 总体的数据结构关系图 实现步骤 1. 日志收集与实时处理&#xff08;Log Collector, Online Joiner&…

PyTorch 2.5 发布带来一些新特性和改进

官网&#xff1a;https://github.com/pytorch/pytorchGitHub&#xff1a;https://github.com/pytorch/pytorch原文&#xff1a;https://github.com/pytorch/pytorch/releases/tag/v2.5.0 主要亮点 (Highlights)] SDPA CuDNN 后端&#xff1a;为 torch.nn.functional.scaled_d…

C++标准模板库--vector

vector 介绍 vector&#xff08;向量&#xff09;是一种序列容器&#xff0c;表示为可以改变大小的数组。vector中的元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素&#xff0c;且与数组一样高效。但与数组不同的是&#xff…

React Componet类组件详解(老项目)

React类组件是通过创建class继承React.Component来创建的&#xff0c;是React中用于构建用户界面的重要部分。以下是对React类组件的详细解释&#xff1a; 一、定义与基本结构 类组件使用ES6的class语法定义&#xff0c;并继承自React.Component。它们具有更复杂的功能&#…

流量PID控制(开度前馈量计算+辅助PID)

和流体流速(瞬时流量)相关的计算请参考下面文章链接: 1、PLC通过伯努利方程近似计算水箱流量 PLC通过伯努利方程近似计算水箱流量(FC)-CSDN博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及…

C++学习路线(二十)

项目 模块划分 推箱子游戏 地图初始化 热键控制 推箱子控制 游戏结束 地图初始化 坐标系&#xff08;650&#xff0c;650&#xff09; 地图表示&#xff1a; 使用二维数组 游戏道具展示&#xff08;墙 箱子 箱子目的地 小人 地板&#xff09; 判断游戏…

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

【H∞鲁棒控制】状态反馈、输出反馈、混合灵敏度H∞控制器设计

最近在学H∞鲁棒控制&#xff0c;因为后面项目中可能要用到此控制方法&#xff0c;所以提前进行了学习&#xff0c;刚开始接触感觉看不太懂&#xff0c;涉及的数学专业知识较深&#xff0c;而且网上资料也比较零星且局限&#xff0c;摸爬了好几天才搞懂了点&#xff0c;现自己总…