计算机网络学习笔记四、http和https

2023-11-16

http和https

  从本篇文章开始总结http协议相关的知识点。http协议相关的内容可以分为四个部分:HTTP报文、HTTP请求、HTTP发展历史、HTTPS。


1. HTTP报文

  HTTP全称Hyper Text Transfer Protocol,即超文本传输协议。在OSI七层网络模型中,HTTP属于上层应用层的协议,是一种基于TCP实现的应用层协议(HTTP3改为基于UDP实现)。

1.1 Http是什么?

  http协议是一种无状态的、明文传输的数据传输协议。
  无状态是指,前后两次请求没有必然的联系,每次请求都是独立的。无状态协议对事务处理没有记忆能力,因此需要通过一些特殊手段来保存用户状态,比如浏览器和服务器可以通过cookie和session保存登录状态。

1.2. Http常见字段有哪些?

Request Headers
在这里插入图片描述

HTTP请求头

  1. Accept:自己可以接受哪些数据。Accept:*/*
  2. Accept-Encoding:客户端可以接受的哪些压缩方法对应的数据。Accept-Encoding:gzip,deflate,br
  3. Connection:使用长连接,HTTP1.1默认使用长连接,为兼容老版本HTTP需要设置Connection:keep-alive
  4. Host字段:请求头中用来指定服务器域名。Host:

Response Headers
在这里插入图片描述

HTTP响应头

  1. Connection:使用长连接,HTTP1.1默认使用长连接,为兼容老版本HTTP需要设置Connection:keep-alive
  2. Content-Encoding:数据压缩方式。Content-Encoding:gzip
  3. Content-Length:本次响应的数据长度
  4. Content-Type:服务器响应的数据格式。Content-Type:text/javascript;charset=utf-8

1.3. HTTP特性

  HTTP最突出的优点就是简单、灵活和跨平台。另外HTTP也具有无状态和明文传输两种既是优点又是缺点的特性。

HTTP有哪些优点

  1. 简单。HTTP报文格式是header + body,请求头、响应头也是key-value类型简单文本格式。
  2. 灵活。HTTP协议中请求方法、URL、状态码和头字段组成都允许开发人员自定义;HTTP工作在应用层,下层可以变化,如HTTPS就是在HTTP层和TCP层加了SSL/TLS安全传输层,HTTP3甚至把TCP换成了基于UDP的QUIC。
  3. 跨平台。应用广泛,从浏览器到手机APP都应用到了HTTP,天然具有跨平台的优越性。

HTTP有哪些缺点
  HTTP的缺点是由HTTP的特性决定的,从一个角度讲,HTTP的特性既是优点又是缺点。我们已经知道HTTP是一种无状态的明文传输协议。

  1. 无状态。

  无状态的好处在于,服务器不会去记忆HTTP的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,节省服务器CPU和内存资源。

  无状态的坏处在于,由于服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。

  1. 明文传输

  明文传输意味着所有信息都暴露出来,所有信息内容将毫无隐私可言,会导致内容被窃听或者身份容易伪装,容易被人篡改。

2. HTTP请求

  1. GET: 获取资源
  2. POST: 传输实体主体
  3. PUT: 上传文件
  4. DELETE: 删除文件
  5. HEAD: 获取报文首部
  6. PATCH: 对资源进行部分修改
  7. OPTION: 查询指定的URL能够支持的方法
  8. CONNECT: 要求用隧道协议连接代理
  9. TRACE: 追踪路径

2.1. GET和POST

GET和POST区别

  1. GET参数通过URL传递;POST放在Request body中。
  2. GET参数直接暴露在URL中,不能传递敏感信息;POST可以。
  3. GET参数在URL中,长度有限制;POST没有。
  4. GET请求会被浏览器主动缓存;POST不会,除非手动设置。
  5. GET请求的URL地址可以被收藏为书签;POST不可以。
  6. GET请求参数会被保存在浏览历史中;POST不会。

2.2. HTTP状态码

1 - 信息。服务器收到请求,请继续执行请求
2 - 成功。请求被成功接收并处理
3 - 重定向。 需要进一步操作来完成请求
4 - 客户端错误。 无法完成请求,或请求包含语法错误
5 - 服务端错误。服务器在处理请求的过程中发生错误

https://blog.csdn.net/banana960531/article/details/85621865

3. HTTP1.1、HTTP2、HTTP3

在这里插入图片描述

3.1. HTTP1.1相对于HTTP1.0提高了什么性能?

  HTTP1.0采用短连接的设计,每次请求都需要经历三次握手和慢启动跟服务器建立TCP连接,响应结束就立即关闭,严重影响性能。服务器并不跟踪每个用户,也不记录过去的请求。

  长连接:HTTP1.1将短连接优化成了长连接,即一个TCP连接可以处理多次http请求。在请求头或响应头中可以看到一个connection参数,等于close时可以使TCP请求使用短连接,默认情况下是keep-alive(长连接)。

问题一:HTTP层面,浏览器发送数据的过程
   浏览器发送数据时,首先要先构造数据(HTTP格式);其次调用操作系统提供的功能,建立TCP连接;最后发送数据。

问题二:HTTP长连接和Socket的关系

  1. 一个Socket可以处理多个HTTP请求(Tomcat中可以设置),如Tomcat拿到一个请求后,解析connection字段中的内容。
  2. 如果connection字段为closed,在处理完请求后,响应头中connection也为closed,双方就会关闭TCP连接。
  3. 如果connection字段为keep-alive,在处理完请求后,响应头中connection也为keep-alive,双方就会共用TCP连接。也不是绝对,如Tomcat会设置最多保持的socket(活跃的长连接)的个数,以及一个socket(长连接)最多可以处理多少个HTTP请求(maxKeepRequestAlive选项),在Tomcat处理完指定个数的http请求后,发送的响应头中connection为closed。

问题三:长连接的缺点
  长连接也存在缺点:一个TCP连接中,所有的通信数据都是按照次序进行的,服务器只有完成一个请求,才会处理下一个请求,如果前面的请求阻塞了,后面的请求会一直等待,产生“队头阻塞”。

  并发:HTTP1.1支持对同一域名同时发起多个http请求(并发处理),但是针对同一域名的并发数量是有限制的。如果想要绕过并发数量的限制,可以将资源放到不同域名的服务器下。

3.2. HTTP2针对HTTP1.1做了哪些优化?

  1. 多路复用: 数据传输性能显著提高。1.1版本中,多个http请求是通过开启多个TCP连接实现并发的;在2.0中,多个http请求的并发,是在同一个TCP连接中实现的。
  2. 格式: HTTP 2.0采用二进制格式而非文本格式
  3. 数据压缩: HTTP1.1不支持header数据压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络中传输也更快了。
  4. 服务器推送: 当向支持HTTP2.0的web server发起请求数据时,服务器可以将一些客户端需要的静态资源一起推送到客户端,免得客户端再次创建连接发起请求到服务器端获取。

3.3. HTTP2有哪些缺陷?HTTP3做了哪些优化?

  QUIC协议 底层协议从TCP切换到UDP。我们知道UDP协议,没有流量控制,滑动窗口等机制,于是就不会对数据包顺序和丢包处理有要求,所以不会出现HTTP1.1中队头阻塞和HTTP2中丢包全部重传的问题。

  UDP协议是不可靠传输协议,但基于UPD的QUIC协议,可以在功能上实现类似TCP的可靠性。

  1. 机制一:自定义连接机制
  • 一条tcp连接是由四元组标识的,分别是源ip、源端口、目的端口,一旦一个元素发生变化时,就会断开重连,重新连接。再次进行三次握手,导致一定的延时。
  • 在TCP是没有办法的,但是基于UDP,就可以在QUIC自己的逻辑里面维护连接的机制,不再以四元组标识,而是以一个64
    位的随机数作为ID来标识,而且UDP是无连接的,所以当ip或者端口变化的时候,只要ID不变,就不需要重新建立连接
  1. 机制二:自定义重传机制
  • tcp为了保证可靠性,通过使用序号和应答机制,来解决顺序问题和丢包问题。任何一个序号的包发过去,都要在一定的时间内得到应答,否则一旦超时,就会重发这个序号的包,通过自适应重传算法(通过采样往返时间RTT不断调整)。
  • 在TCP里面超时的采样存在不准确的问题。例如发送一个包,序号100,发现没有返回,于是在发送一个100,过一阵返回ACK101.客户端收到了,但是往返的时间是多少,没法计算。是ACK到达的时候减去第一还是第二。QUIC也有个序列号,是递增的,任何序列号的包只发送一次,下次就要加1,那样就计算可以准确了
  • 但是有一个问题,就是怎么知道包100和包101发送的是同样的内容呢?quic定义了一个offset概念。QUIC既然是面向连接的,也就像TCP一样,是一个数据流,发送的数据在这个数据流里面有个偏移量offset,可以通过offset查看数据发送到了那里,这样只有这个offset的包没有来,就要重发。如果来了,按照offset拼接,还是能够拼成一个流。
  1. 机制三: 无阻塞的多路复用

  有了自定义的连接和重传机制,就可以解决上面HTTP2.0的多路复用问题
  同HTTP2.0一样,同一条 QUIC连接上可以创建多个stream,来发送多个HTTP请求。但是,QUIC是基于UDP的,一个连接上的多个stream之间没有依赖。这样,假如stream2丢了一个UDP包,后面跟着stream3的一个UDP包,虽然stream2的那个包需要重新传,但是stream3的包无需等待,就可以发给用户。

  1. 机制四:自定义流量控制
  • TCP的流量控制是通过滑动窗口协议。QUIC的流量控制也是通过window_update,来告诉对端它可以接受的字节数。但是QUIC的窗口是适应自己的多路复用机制的,不但在一个连接上控制窗口,还在一个连接中的每个steam控制窗口。
  • 在TCP协议中,接收端的窗口的起始点是下一个要接收并且ACK的包,即便后来的包都到了,放在缓存里面,窗口也不能右移,因为TCP的ACK机制是基于序列号的累计应答,一旦ACK了一个序列号,就说明前面的都到了,所以是要前面的没到,后面的到了也不能ACK,就会导致后面的到了,也有可能超时重传,浪费带宽
  • QUIC的ACK是基于offset的,每个offset的包来了,进了缓存,就可以应答,应答后就不会重发,中间的空档会等待到来或者重发,而窗口的起始位置为当前收到的最大offset,从这个offset到当前的stream所能容纳的最大缓存,是真正的窗口的大小,显然,那样更加准确。

 HTTPS建立连接,需要三次交互(三次握手+SSL三次握手),QUICK把这个过程缩减为了3次。因此,QUICK是一个在UDP之上的伪TCP+TLS+HTTP/2的多路复用协议。

4. https

  https使用了非对称加密技术和对称加密技术。1. 使用非对称加密技术实现共享秘钥的安全传输 2. 对传输数据的加密使用对称加密技术,秘钥就是非对称加密传输的共享秘钥。

4.1. SSL握手步骤

  1. 客户端向服务器发送连接请求。
  2. 服务器收到请求后,生成一个公私钥对;服务器向客户端发送安全证书,包含服务器生成的公钥
  3. 客户端收到服务器发来的安全证书,对证书进行验证;随机生成一个对称加密秘钥,用服务器发来的公钥对其进行加密;客户端将加密后的对称秘钥发送给服务器,
  4. 服务器收到后用私钥解密,就得到了客户端随机生成的那个对称秘钥。 此时客户端和服务器都有了对称秘钥,就可以使用该秘钥对数据进行加密传输了。

问题一:为什么不直接使用非对称加密,进行加密传输?
  使用公钥对数据进行加密要比对称加密的方式复杂,效率会很低。
问题二:安全证书的作用是什么?
  保证客户端收到的公钥就是服务器发送的,而不是中途有攻击者截取篡改后的。

4.2. CA证书

  数字证书是由CA(Certificate Authority)发行的并且对公开密钥做了签名,它可以保证客户端收到的公钥是合法的,不是伪造的。

CA证书签发过程

  1. 服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
  2. CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
  3. 如信息审核通过,CA 会向申请者签发认证文件-证书。
    证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
    签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;

CA证书验证

  1. 客户端 C 向服务器 S 发出请求时,S 返回证书文件;
  2. 客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
  3. 客户端然后验证证书相关的域名信息、有效时间等信息;
  4. 客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

在这个过程注意几点:

  1. 申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
  2. 证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;
  3. 内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;
  4. 证书=公钥+申请者与颁发者信息+签名;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络学习笔记四、http和https 的相关文章

  • 面向服务的架构 - AMQP 或 HTTP

    一点背景 非常大的整体 Django 应用程序 所有组件都使用相同的数据库 我们需要分离服务 以便我们可以独立升级系统的某些部分而不影响其余部分 我们使用 RabbitMQ 作为 Celery 的代理 现在我们有两个选择 使用 REST 接
  • 诸如用于测试 HTTP 请求的虚拟 REST 服务器之类的东西? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在四处寻找 但找不到任何这样的网站 我想知道是否有一些虚拟服务器可以响应测试 GET 请求并返回
  • JS 库请求的常见 HTTP 标头是什么?

    使用JavaScript 框架原型 http www prototypejs org 我注意到 Ajax 请求通过一个名为X Requested With 其他 JavaScript 库 如 jQuery dojo 和 YUI 是否会向其
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • 是否可以将请求标头添加到 CORS 预检请求中?

    我有一个从外部服务器 不是服务器 访问 API 的网站 为网站提供服务 通过简单的XmlHttpRequest 见下文 那个API 需要将用于访问服务的 API 密钥添加为请求标头 然而 正如这些CORS https developer m
  • 流星图像、CSS、“普通”Web 服务

    我经常看到这个问题出现 如何在我的 Meteor 网站上放置图像 如何使用 Meteor 托管 标准 网页内容 我尝试添加一个 img src img myimage png 标签但没有图像显示 如何在 Meteor 站点上托管一些文件 将
  • 这个重写规则是什么意思?

    我正在安装 phpancake 有一个像这样的文件夹 application install library public sql schema install html install php 这条规则意味着什么 RewriteEngin
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • http和https在编程中有什么区别[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只知道 s 代表 安全 用户永远不
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 以 REST 方式更新整个资源集合

    我有一个资源列表的 REST URI 例如 http foo com group users 这些用户中的每一个都有一个序列号 我想公开一种方法来为集合中的所有用户重新编号这些值 并使访问该列表的每个人都可以使用此更改 由于这是对整个集合的
  • 客户端/服务器使用哪些 Cache-Control 标头值?

    我试图了解哪些值Cache Control将在请求中使用 并将在响应中使用 This https stackoverflow com questions 42652931 why use cache control header in re
  • cookie 在会话结束时或在特定时间过期?

    cookie 是否可以在会话结束时或在特定时间过期 是的 这很简单 HttpCookie newCookie new HttpCookie myCookie newCookie Expires DateTime Today AddDays
  • 为什么我在将数据上传到数据库时不断看到“正在重置断开的连接”?

    我正在通过 REST API 将数亿个项目从 Heroku 上的云服务器上传到 AWS EC2 中的数据库 我正在使用 Python 并且经常在日志中看到以下 INFO 日志消息 requests packages urllib3 conn
  • 使用 Java 通过 HTTP 下载未知长度的文件

    我想用java下载一个HTTP查询 但是我下载的文件在下载时有一个未确定的长度 我认为这将是相当标准的 所以我搜索并找到了它的代码片段 http snipplr com view 33805 http snipplr com view 33
  • HTTP请求的内容长度>正文大小

    我正在管理一个网站 该网站过去几个月在使用 MVC 3 0 ASP net 构建的 IIS 7 5 上运行良好 当我们的 AJAX POST 请求 通过 jQuery 触发 因发布的 JSON 被截断而失败时 我们时不时地会遇到一个问题 到
  • 使用 Angularjs,$http 在 Microsoft Edge 中发布返回响应错误

    好吧 当我开发一个管理页面进行测试时 Microsoft Edge 中出现了一个奇怪的问题 这是从loginCtrl js服务器获取响应的部分源代码 http method POST url Define apiUrl admin logi
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • 角度报告进度返回上传的文件总数,而不是进度

    在我的组件中我有这个 this authService addPost post subscribe data gt if data type HttpEventType UploadProgress console log data el

随机推荐

  • mysql日期相减操作

    一 MySQL中两个DateTime字段相减 假定表名为tblName 两个DateTime字段名分别为beginDateTime endDateTime 以下是相关两个mysql日期字段相减的SQL语句 这种方式两字段跨天 月 年都无问题
  • Android Studio教程从入门到精通

    转自 http blog csdn net yanbober article details 45306483 目标 Android Studio新手 gt 下载安装配置 gt 零基础入门 gt 基本使用 gt 调试技能 gt 构建项目基础
  • Journal of Proteome Research

    文献名 Lipidomics reveals similar changes in serum phospholipid signatures of overweight and obese paediatric subjects 用脂质组
  • pytorch1.13安装

    pytorch1 13安装 个人参考 情况交代 安装流程 注意事项 显卡配置查看 创建环境 激活环境 安装对应的torch版本 检查 使用pip list 导入查看 卸载 下载gpu版本的 验证 把这个内核加到jupyter 完成 情况交代
  • 挂载mount问题“wrong fs type, bad option, bad superblock on ”的解决办法

    重装系统后挂载一般会出现如下问题 problem ivy ivy OptiPlex 380 source sudo mount 192 168 9 18 home deep dev env source mount wrong fs typ
  • makefile进阶

    一 微观的C C 编译执行过程 c文件怎么变成可执行文件 exe 1 预处理 E 宏替换 头文件展开 去打印 gcc E hello c o hello i 2 编译 S 把 i 文件编译成汇编代码文件 i gcc S hello i o
  • 火星探险 (Mars)

    暂无链接 题目描述 在2051年 若干火星探险队探索了这颗红色行星的不同区域并且制作了这些区域的地图 现在 Baltic空间机构有一个雄心勃勃的计划 他们想制作一张整个行星的地图 为了考虑必要的工作 他们需要知道地图上已经存在的全部区域的大
  • canvas画布组件

    代码编写 在画布上添加各种几何图形 from tkinter import root Tk 设置主窗口区的背景顔色以区别画布区的顔色 root config bg 8DB6cD root title 基于tk的canvas几何图形 root
  • 附录2 高斯分布与马氏距离

    给定随机变量 xi i 1 N x i i 1
  • 深度学习优化器

    1 什么是优化器 优化器用来寻找模型的最优解 2 常见优化器 2 1 批量梯度下降法BGD Batch Gradient Descent 2 1 1 BGD表示 BGD 采用整个训练集的数据来计算 cost function 对参数的梯度
  • Vue技术 Object.defineProperty

    Object defineProperty 是JavaScript中的一个内置方法 用于定义或修改对象的属性 它接受三个参数 对象 属性名 以及一个属性描述符对象 属性描述符对象有两种形式 数据描述符和访问描述符 数据描述符用于定义普通属性
  • 【蓝桥杯】Java组必备API类 --快速读写实现方法 及输入输出的巧妙处理

    输入和输出 输入 Scanner s new Scanner System in 声明一个从控制台中读入数据的对象 int x s nextInt double x s nextDouble String x s next 无法读入空格 S
  • 统计和——前缀和

    题目大概 给定一个长度为n的整数数组和一个整数k 你需要找到该数组中和为k的连续子数组的个数 测试样例 输入 5 3 1 1 2 1 1 输出 2 思路1 利用for循环暴力枚举子数组 并且求和 计数 时间复杂度为O n 3 如果数据大于了
  • 毕设系列 - stm32机器视觉的口罩佩戴检测系统 - 单片机 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • 桶排序 (详细图解)

    一 桶排序 桶排序 Bucket sort 或所谓的箱排序 是一个排序算法 工作的原理是将数组分到有限数量的桶里 每个桶再个别排序 有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序 最后依次把各个桶中的记录列出来记得到有序序列
  • 攻防世界web之ics-06

    打开网址 四处点击 点到报表中心 跳转新页面 查看源码也没有什么特别的 发现URL栏有 id 1 以为是sql注入 但是并不是 查看大佬的wp 发现这题采用brupsuite爆破 先将抓到的包放到Intruder 然后将id设为变量 然后把
  • WEB自动化测试面试题及答案大全

    1 Selenium是否支持桌面应用软件的自动化测试 Selenium不支持桌面软件的自动化测试 Selenium是根据网页元素的属性才定位元素 而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素 当然现在也有根据桌面元素的属性来定
  • type_traits

    概述 type traits提供了丰富的编译期间计算 查询 判断 转换和选择的帮助类 其被定义在 include
  • React-50:setState

    对象形式 也是最经常用到的 import React Component from react export default class Demo extends Component state count 0 add gt 对象式的set
  • 计算机网络学习笔记四、http和https

    http和https 从本篇文章开始总结http协议相关的知识点 http协议相关的内容可以分为四个部分 HTTP报文 HTTP请求 HTTP发展历史 HTTPS 1 HTTP报文 HTTP全称Hyper Text Transfer Pro