http/HTTPS相关的一些知识

news2025/7/13 17:09:18

2、http和https
HTTP,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。HTTP 是应用层协议,它以 TCP(传输层)作为底层协议,默认端口为 80。
http的通信过程:服务器在80端口等待客户的请求;接着浏览器发起到服务器的TCP连接,服务器接受TCP连接,然后浏览器和服务器交换http消息,最后关闭TCP连接。
可以看出,http是基于tcp的。是可靠的,请求相应一一对应。
另外
HTTP协议是无状态协议:无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点,缺点是无法共享数据。无状态的,因此无法做连续多个步骤的操作。例如:加入购物出,结算,支付。每次都需要验证身份信息,但是无状态所以无法连续。解决办法就是利用会话技术(Cookie、Session)。优点就是速度快。
HTTPS 协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。可以理解成HTTPS = HTTP + SSL/TLS。默认端口号是 443。SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
SSL/TLS的核心要素是非对称加密。非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。
常用的非对称加密算法:RSA。
常见的对称加密算法有:DES、3DES和AES
在实际通信过程中,计算的代价较高,效率太低,因此,SSL/TLS 实际对消息的加密使用的是对称加密。

https的主要步骤:1、客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。2、Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端/。3、客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。5、Web服务器利用自己的私钥解密出会话密钥。6、Web服务器利用会话密钥加密与客户端之间的通信。
结合了对称加密和非对称加密的方式。
数字签名实现完整性。数字证书CA实现身份认证。加密实现密文传输。

常见的状态码
100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。
500-599 用于支持服务器错误。

如果服务器收到头信息中带有100-continue的请求,这是指客户端询问是否可以在后续的请求中发送附件。
200 OK:客户端请求成功。
300表示被请求的文档可以在多个地方找到,并将在返回的文档中列出来。如果服务器有首选设置,首选项将会被列于定位响应头信息中。
301 状态是指所请求的文档在别的地方;文档新的URL会在定位响应头信息中给出。浏览器会自动连接到新的URL。永久重定向。
302:页面暂时性转移,表示资源或页面暂时转移到另一个位置,常被用作网址劫持或负载均衡
304 告诉客户端可以使用缓存资源
403 Forbidden:指的是服务器端有能力处理该请求,但是拒绝授权访问。404 Not Found:请求资源不存在,比如资源被删除了,或用户输入了错误的URL。
408 (Request Timeout/请求超时)
500 Internal Server Error:服务器发生不可预期的错误,一般是代码的BUG所导致的。500 (SC_INTERNAL_SERVER_ERROR) 是常用的“服务器错误”状态。该状态经常由CGI程序引起
502 (Bad Gateway/错误的网关)
503 服务器繁忙

HTTP 缓存技术
对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了。HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存
强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。
强缓存是利用下面这两个 HTTP 响应头部(Response Header)字段实现的,它们都用来表示资源在客户端缓存的有效期:
Cache-Control, 是一个相对时间;
Expires,是一个绝对时间;
如果 HTTP 响应头部同时有 Cache-Control 和 Expires 字段的话,Cache-Control 的优先级高于 Expires

当我们在浏览器使用开发者工具的时候,你可能会看到过某些请求的响应码是 304,这个是告诉浏览器可以使用本地缓存的资源,通常这种通过服务端告知客户端是否可以使用缓存的方式被称为协商缓存。

3、get post put delete等区别
这些都是http定义的与服务器进行交互的不同方法。
从数据库角度来说,get相当于查询,从服务器查询相关数据; post是增加服务器的资源;delete是删除资源;put是修改服务器的资源。
还有其余的,head用来查询头部信息,不返回实体信息;trace用来回环诊断,回显服务器收到的请求,因为请求传递过程中会经过防火墙等,trace查看请求中途是否被更改;options允许客户端查看服务器性能;

由于put是幂等的,也就是如果两次请求相同,那么第二次会覆盖第一次,所以put用来更新资源;而post是非幂等的,不会覆盖,所以用来添加资源。

重点是get和post的区别和联系:
1.一个请求数据,一个上传数据;
2、安全性:get因为参数会放在url中,,get请求会保存在浏览器历史,可保存为书签,所以隐私性,安全性较差,post的数据在body中。
3、数据长度:由于get的请求放在url中,虽然http对url长度没有限制,但是服务器了浏览器有限制,一般在1024字节以内。因为长url解析消耗性能太大,并且容易收到恶意构造长url的攻击。post由于数据放在body中,所以没有限制。示例如下:

GET /updateInfo?name=Javanx&age=25 HTTP/1.1
Host: localhost

POST /updateInfo HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
name=Javanx&age=25

GET 和 POST 只是 HTTP 协议中两种请求方式(异曲同工),而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。
但如果不按规范来也是可以的,可以在 URL 上写参数,然后方法使用 POST;也可以在 Body 写参数,然后方法使用 GET。当然,这需要服务端支持。
GET 方法参数写法是固定的吗?
在约定中,我们的参数是写在 ? 后面,用 & 分割。
我们知道,解析报文的过程是通过获取 TCP 数据,用正则等工具从数据中获取 Header 和 Body,从而提取参数。
POST 方法比 GET 方法安全?
有人说POST 比 GET 安全,因为数据在地址栏上不可见。

然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。

要想安全传输,就只有加密,也就是 HTTPS。
POST 方法会产生两个 TCP 数据包?
有些文章中提到,post 会将 header 和 body 分开发送,先发送 header,服务端返回 100 状态码再发送 body。
HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送。
所以,header 和 body 分开发送是部分浏览器或框架的请求方法,不属于 post 必然行为。

14. cookie,session区别
http是无连接的,这次请求和上次请求没有关系。但是如果需要数据共享,追踪用户行为(购物车)就需要知道用户信息。
cookie是一种存储在浏览器的字段信息,只有4kb,以键值对形式存在。一般访问流程:
用户http请求;服务器在响应头加一个set-cookie选项,里面包含cookie。之后用户再发送http请求时就会把cookie信息加在请求部分里面,服务器就会进行相应的业务响应。
session和cookie看起来很像。但是我们要分清session概念和session实现。session就是一个会话,相当于给服务器和浏览器建立一个连接。那么session的实现就是利用cookie为载体的,服务器会为每个浏览器产生一个独一的session id来标识连接,之后每次请求只要把id放在请求头部就可以知道浏览器是谁了。而一些用户信息上下文信息都是存储在服务器中,请求时只需要复制id就可以。而这个id往往就是通过cookie实现的。也就是说cookie是实现session id传递的载体之一。如果浏览器禁用cookie的话,session id也可以通过url重写实现。
所以综合来说,cookie很具体,就是一种服务器生成,存储在浏览器上的小字段,实现鉴权的具体方式。而session是一种宽泛的会话技术,通过session id标识,为服务器浏览器建立连接。
区别总结:
1、cookie存储在浏览器中,所以安全性较差,容易被劫持伪造;session只有id在浏览器中,具体信息存储在服务器中,安全性好一点,但是会增加服务器的负担,而且多个服务器的话负载均衡后很有可能找不到了。比如自动保存的密码等。
2、cookie只有4kb大小,只能存ASCII字符,而session存储信息不限,类型也很多。

15. 谈一谈http长连接、短连接、超时
明确一个概念,http是无状态的应用层协议,没有长短连接一说,请求响应和下一次没有关系的。这里的长连接实际上是指TCP连接。
短连接就是这一次请求响应结束后,下一次请求响应就要重新建立TCP连接。Connection:close就是短连接
长连接就是TCP连接不关闭,下一次请求响应就不用再三次握手四次挥手了,减少资源消耗,比如一次请求 HTML,可能还需要请求后续的 JS/CSS/图片等。http1.0默认是短连接,1.1默认是长连接。
一般长连接就是在请求头设置:Connection:keep-alive 和Keep-Alive: timeout=60。有timeout说明60s后连接失效,没有的话说明连接一直有效。
对于点对点的,交互频繁的。比如数据库就是长连接。对于web网页这种,用户很多,一般用短连接。不然的话会有成千上万的连接同时保存在服务器端。
长连接还有一个额外的问题,就是队头阻塞。在请求应答过程中,如果出现任何状况,剩下所有的工作都会被阻塞在那次请求应答之后。
解决办法:现代浏览器会针对单个域名开启6个连接,通过各个连接分别发送请求。它实现了某种程度上的并行,但治标不治本。
HTTP/2是完全多路复用的,而非有序并阻塞的。http2在一个连接上处理多个请求,实现流式传输,将请求分片,每个请求都有自己的id标识,到达服务器后再组装起来。这样就实现多路复用,提高效率。

超时的情况:请求超时,比如现在网络超级不好,当客户端发起一个请求,通信层开始请求与服务器建立连接(包括在重试),如果在5S之内还没有连接到服务器,那么认为超时。
响应超时一个不正确的url,将会响应404。或者服务器响应速度太慢,连接已经关闭。

http协议各个版本的演进
http1.0 默认是短连接,效率不高。
http1.1默认是长连接。另外,支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。(缺点:请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大;队头阻塞;请求只能从客户端开始,服务器只能被动响应)
http2的改进:(是基于https的)
头部压缩
HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。
这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
二进制格式
HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据帧(Data Frame)。
并行发送:针对不同的 HTTP 请求用独一无二的 Stream ID 来区分,接收端可以通过 Stream ID 有序组装成 HTTP 消息,不同 Stream 的帧是可以乱序发送的,因此可以并发不同的 Stream ,也就是 HTTP/2 可以并行交错地发送请求和响应。
服务器推送:客户端和服务器双方都可以建立 Stream, Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。
HTTP/2 的缺点:
但是 HTTP/2 还是存在“队头阻塞”的问题,只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层。一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。

HTTP/3 做了哪些优化
所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
在这里插入图片描述
无队头阻塞
更快的连接建立
对于 HTTP/1 和 HTTP/2 协议,TCP 和 TLS 是分层的,分别属于内核实现的传输层、openssl 库实现的表示层,因此它们难以合并在一起,需要分批次来握手,先 TCP 握手,再 TLS 握手。
HTTP/3 在传输数据前虽然需要 QUIC 协议握手,但是这个握手过程只需要 1 RTT,握手的目的是为确认双方的「连接 ID」,连接迁移就是基于连接 ID 实现的。
但是 HTTP/3 的 QUIC 协议并不是与 TLS 分层,而是 QUIC 内部包含了 TLS,它在自己的帧会携带 TLS 里的“记录”,再加上 QUIC 使用的是 TLS/1.3,因此仅需 1 个 RTT 就可以「同时」完成建立连接与密钥协商
连接迁移
而 QUIC 协议没有用四元组的方式来“绑定”连接,而是通过连接 ID 来标记通信的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致 IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本,没有丝毫卡顿感,达到了连接迁移的功能。

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

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

相关文章

联想Thinkpad X1 Carbon (7th Gen)电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。硬件型号驱动情况主板Thinkpad X1 Carbon处理器Intel Core i5-10210U (formerly Comet Lake)已驱动内存8GB DDR3 (or something like that)已驱动硬盘WDC PC SN730 SDBQNTY-256G-1001已驱动显卡Intel UHD 620Nvidia GeForce…

【AcWing-Python-785】快速排序

题目:https://www.acwing.com/problem/content/description/787/对应视频讲解:https://www.acwing.com/video/227/题目描述注意本题数据已加强。快速排序过程中,如果每次取区间起点或者终点作为分界点,则会超时。分界点换成随机值…

自动化测试工具airtest之上传文件或图片(web自动化上传图片)

web自动化测试图片上传的方法&#xff1a; 第一种为当具有input标签时&#xff0c;如&#xff1a; <input type"file" name"file" multiple"multiple"> 这类可以通过selenium中的send_keys()上传 直接实现&#xff1a; driver.find_eleme…

成功“拿捏”金三银四!汇总Java面试突击班后的面试小册

最近很多同学已经开始进行今年的面试了&#xff0c;好多同学说&#xff0c;想要今年最新版的Java面试突击班的内容话说回来&#xff0c;今天给大家分享的就是咱们面试突击班的文字PDF版本&#xff0c;下面是文字版的分享大家可以详细往下看&#xff01;由于文章的篇幅有限&…

常见web安全漏洞-暴力破解,xss,SQL注入,csrf

1&#xff0c;暴力破解 原理&#xff1a; 使用大量的认证信息在认证接口进行登录认证&#xff0c;知道正确为止。为提高效率一般使用带有字典的工具自动化操作 基于表单的暴力破解 --- 若用户没有安全认证&#xff0c;直接进行抓包破解。 验证码绕过 on server ---验证码校验在…

局域网下mac与win通过ssh互联(端口映射)

目录一、前置条件ip查看关闭防火墙二、win端ssh连接mac三、mac端ssh连接win四、mac端ssh连接win上的linux虚拟机此文章欢迎访问我的个人博客&#xff1a;https://qiandao.space/archives/portmapping mac端ssh连接win mac端ssh连接win上的linux虚拟机 win端ssh连接mac 日常开发…

【知识蒸馏】知识蒸馏(Knowledge Distillation)技术详解

参考论文&#xff1a;Knowledge Distillation: A Survey 1.前言 ​ 近年来&#xff0c;深度学习在学术界和工业界取得了巨大的成功&#xff0c;根本原因在于其可拓展性和编码大规模数据的能力。但是&#xff0c;深度学习的主要挑战在于&#xff0c;受限制于资源容量&#xff0…

Unity——使用铰链关节制作悬挂物体效果

目的在场景中创建一个悬挂的物体&#xff0c;是把多个模型悬挂在一起可以自由摇摆&#xff0c;类似链条的效果效果图前言什么是铰链关节&#xff1f;铰链关节 将两个刚体&#xff08;Rigid body&#xff09;组会在一起&#xff0c;从而将其约束为如同通过铰链连接一样进行移动。…

JavaSE基础部分总结

JavaSe基础部分 文章目录JavaSe基础部分1.命名规范2.基本的数据类型3.方法3.1方法的基本格式3.2 方法的分类3.3 方法的注释4.数组4.1 数组的命名格式4.2 数组中存在的址交换的操作4.3数组Arrays常用的方法1. Arrays.asList(数组作为参数或者数据作为参数)&#xff1a;2.Arrays.…

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介绍

前言 本文为 Spring Cloud Alibaba介绍 相关知识&#xff0c;下边将对微服务介绍&#xff08;包括&#xff1a;系统架构演变、微服务架构介绍、常见微服务架构&#xff09;&#xff0c;Spring Cloud Alibaba介绍&#xff08;包括&#xff1a;Spring Cloud Alibaba 的定位、Spri…

图表类可视化开发采坑记录之旅3

如图所示的扇形图样式改造&#xff1a; 开发框架&#xff1a; 基于vue2&#xff0c;echarts5.0.0 基于组件&#xff1a; html代码&#xff1a; <div class"showCanvas"><div id"midError"></div> </div> css代码&#xff1a; …

【算法数据结构体系篇class09】:链表问题:快慢指针、回文结构、复制、中点,分区、相交

一、链表解题的方法论 1)对于笔试&#xff0c;不用太在乎空间复杂度&#xff0c;一切为了时间复杂度2)对于面试&#xff0c;时间复杂度依然放在第一位&#xff0c;但是一定要找到空间最省的方法二、链表常用数据结构和技巧1&#xff09;使用容器(哈希表、数组等)2&#xff09;快…

Eth-trunk :LACP模式链路聚合实战

Eth-trunk : LACP模式链路聚合实战 需求描述 PC1和PC3数据vlan10 &#xff0c;网段为192.168.10.0 /24PC2和PC4数据vlan20 &#xff0c;网段为192.168.20.0 /24确保设备之间互联互通&#xff0c;使用最大互联带宽并没有环路确保相同网段的PC可以互通判断交换机之间的每个端口…

【Spark分布式内存计算框架——离线综合实战】6. 广告投放的地域分布

3.3 广告投放的地域分布 按照产品需求&#xff0c;需要完成如下统计的报表&#xff1a; 从上面的统计报表可以看出&#xff0c;其中包含三个“率”计算&#xff0c;说明如下&#xff1a; 报表字段信息 针对广告投放的地域分布统计&#xff0c;各个指标字段信息说明如下&…

JDBC学习(复习)-面试总结详细

JDBC详细介绍一、JDBC详细介绍二、jdbc面试总结2.1 JDBC操作数据库的步骤 &#xff1f;2.2 JDBC中的Statement 和PreparedStatement&#xff0c;CallableStatement的区别&#xff1f;2.3 JDBC中大数据量的分页解决方法?2.4 说说数据库连接池工作原理和实现方案&#xff1f;2.4…

九方财富冲刺上市:付费用户开始减少,退款金额飙升至4.9亿元

日前&#xff0c;九方财富控股有限公司&#xff08;下称“九方财富”&#xff09;通过港交所上市聆讯&#xff0c;并披露了聆讯后招股书。据贝多财经了解&#xff0c;九方财富最早于2021年8月31日在港交所递表&#xff0c;后在2022年3月、9月分别进行了更新。 据每日经济新闻报…

vue3.0 模板语法

文章目录前言&#xff1a;1. 内容渲染指令1.1 v-text1.2 {{ }}插值表达式1.3 v-html2. 双向绑定指令2.1 v-model2.2 v-model的修饰符3. 属性绑定指令3.1 动态绑定多个属性值3.2 绑定class和style属性4.条件渲染指令4.1 v-if、v-else-if、v-else4.2 v-show4.3 v-if与v-show的区别…

RebbitMQ 消息队列(简单使用)

消息队列介绍 MQ的优势 1.业务解耦&#xff1a;不同系统消费信息互不关联&#xff0c;灵活增减系统数量&#xff0c;修改某个系统其他系统也不影响 2.异步提速&#xff1a;不同系统之间可同时响应&#xff0c;提升并发量 3.削峰填谷&#xff1a;处理消息高峰期&#xff0c;均摊…

《图机器学习》-Graph Neural Network

前言 回顾之前的Node Embedding&#xff1a; 将图中的节点嵌入到d维空间&#xff0c;并确保图中相似的节点能够嵌在一起。 即学习一个编码器ENCENCENC确保图的节点嵌入到embedding space依然能够描述原空间节点之间的相似性。 在Node Embedding中&#xff0c;我们需要设计&…

DEXTUpload .NET增强的上传速度和可靠性

DEXTUpload .NET增强的上传速度和可靠性 DEXTUpload.NET Pro托管在Windows操作系统上的Internet Information Server(IIS)上&#xff0c;服务器端组件基于HTTP协议&#xff0c;支持从web浏览器到web服务器的文件上载。它也可以在ASP.NET服务器应用程序平台开发的任何网站上使用…