RFC2616 超文本传输协议 HTTP/1.1

devtools/2024/10/21 22:57:50/
http://www.w3.org/2000/svg" style="display: none;">

一、URL-俗称“网址”

https://i-blog.csdnimg.cn/direct/80ceefe4317a4e5ba5f703a2269c965f.png" alt="在这里插入图片描述" />
HTTP 使用 URL(Uniform Resource Locator,统一资源定位符)来定位资源,它是 URI(Uniform Resource Identifier,统一资源标识符)的子集,URL 在 URI 的基础上增加了定位能力

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

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

例如,‘+’ 经过 urlencode 被转义成了 “%2B”
https://i-blog.csdnimg.cn/direct/a0917cb36e094bd0a872b510dc824c2a.png" alt="在这里插入图片描述" />
而 urldecode 就是 urlencode 的逆过程

二、HTTP 报文

1、请求报文

https://i-blog.csdnimg.cn/direct/37c1cc4576e84faca578ecea161b54ab.png" alt="在这里插入图片描述" />

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

2、响应报文

https://i-blog.csdnimg.cn/direct/398396a8d83d4ce897a3c4323ecb5ff7.png" alt="在这里插入图片描述" />

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

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

3、管线化

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

4、Cookie

六、HTTPS


http://www.ppmy.cn/devtools/127675.html

相关文章

python——类

问:小编为什么突然开始发python?难道C语言你不行了? 废话少说,让我们进入python中的类的学习!! (一)基本知识 (1)掌握类的概念 1、类的定义: 即…

vue项目发布时移除所有console输出

安装依赖包 npm i babel-plugin-transform-remove-console修改babel.config.js文件 //增加以下配置 if (process.env.NODE_ENV production) {module.exports.plugins.push(transform-remove-console) }

C++实现简易JSON解析与转储

FCJson.h #pragma once #include <stdint.h> #include <string> #include <vector> #include <map>// VS 将执行字符集指定为 UTF-8 // 项目属性页 -> 配置属性 -> C/C -> 命令行 -> 其他选项(D) // 加入 /execution-charset:utf-8 或/u…

五、Spring Boot集成Spring Security之认证流程2

一、Spring Boot集成Spring Security专栏 一、Spring Boot集成Spring Security之自动装配 二、Spring Boot集成Spring Security之实现原理 三、Spring Boot集成Spring Security之过滤器链详解 四、Spring Boot集成Spring Security之认证流程 五、Spring Boot集成Spring Se…

2020年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;OSI参考模型网络协议的三要素 网络协议的三要素&#xff1a;语法 &#xff0c;语义&#xff0c;同步&#xff08;时序&#xff09; 语法&#xff1a;定义收发双方所交换信息的格式 语法&#xff1a;定义收发双方所要完成的操作 网页的加载 …

微信小程序用开发工具在本地真机调试可以正常访问摄像头,发布了授权后却无法访问摄像头,解决方案

今天开发上线了一个拍照的微信小程序&#xff0c;用uniapp的Vue3开发的&#xff0c;调用的camera组件&#xff0c;相关代码如下&#xff1a; <!-- 微信小程序相机组件 --><view v-if"showCamera" class"camera-container"><camera :device…

鸿蒙测试-常见问题记录

文章目录 queuesize:0, msg:error: failed to install bundle. code:9568322 error: signature verification failed due to not trusted app source. queuesize:0, msg:error: failed to install bundle. code:9568322 error: signature verification failed due to not trust…

RabbitMQ系列学习笔记(七)--RabbitMQ交换机

文章目录 一、Exchange概念二、交换机类型三、无名交换机四、绑定(bindings) 本文参考&#xff1a; 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、Exchange概念 RabbitMQ 消息传递模型的核心思想是: 生…