计算机网络(六): HTTP,HTTPS,DNS,网页解析全过程

news2024/12/24 2:20:57

文章目录

  • 一、HTTP头部包含的信息
    • 通用头部
    • 请求头部
    • 响应头部
    • 实体头部
  • 二、Keep-Alive和非Keep-Alive的区别
  • 三、HTTP的方法
  • 四、HTTP和HTTPS建立连接的过程
    • 4.1 HTTP
    • 4.2 HTTPS
  • 五、HTTP和HTTPS的区别
  • 六、HTTPS的加密方式
  • 七、cookie和session
    • session
    • cookie
  • 八、HTTP状态码
    • 状态码200:
    • 状态码301:
    • 状态码302 :
    • 状态码304:
    • 状态码403:
    • 状态码404:
    • 状态码500:
  • 九、HTTP/1.1和HTTP/1.0的区别
  • 十、HTTP1.X和HTTP2.0的区别
  • 十一、HTTP3


一、HTTP头部包含的信息

http头部可以分为通用头部,请求头部,响应头部和实体头部。

通用头部

请添加图片描述

请求头部

请添加图片描述

响应头部

请添加图片描述

实体头部

请添加图片描述

二、Keep-Alive和非Keep-Alive的区别

Keep-Alive是用来告诉连接的对方在这个请求响应完成之后不要马上关闭连接,下一次继续用这个连接进行交流,也就是TCP的长连接的实现方式。HTTP的长连接是通过Client和Server的一些关闭策略来实现的。
长连接用于操作频繁,点对点的通讯,而且客户端连接数相对较少比如即时通讯IM,网络游戏。
短连接用于用户数目较多的Web网站的H TTP服务,比如京东淘宝。

请添加图片描述

三、HTTP的方法

HTTP/1.0 定义了三种请求方法:GET, POST 和 HEAD 方法。

HTTP/1.1 增加了六种请求方法:OPTIONS, PUT, PATCH, DELETE, TRACE 和 CONNECT 方法。

请添加图片描述
Get和Post的区别
请添加图片描述

四、HTTP和HTTPS建立连接的过程

4.1 HTTP

http是一种简单的请求-响应协议,使用TCP作为传输协议,且默认的工作端口为80,http客户端和服务端通过socket建立连接。

4.2 HTTPS

https = http + ssl
其建立连接的过程如下:

  1. 客户端发起一个https请求,并连接到服务器的443端口,发送的信息主要包括自身支持的算法列表和密钥长度等。
  2. 服务端将自身支持的所有加密算法和客户端的算法列表进行对比并且选择一种支持的加密算法,然后将他和他其他密钥组件一起发送给客户端。
  3. 服务器向客户端发送一个包含数字证书的报文,该数字证书中包含有证书的颁发机构,过期时间以及服务端的公钥等信息。
  4. 最后服务端发送一个完成报文通知客户端SSL的第一阶段协商已经完成。
  5. SSL第一次协商完成之后,客户端回复一个回应报文,报文中包含一个客户端生成的随机密码串,称为pre_master_secret, 并且该报文是经过证书中的公钥加密过的。
  6. 紧接着客户端发送一个报文提示服务端在此之后的报文是采用pre_master_secret加密的。
  7. 客户端向服务器发送一个finish报文,这次握手中包含第一次握手至今所有报文的整体校验值,最终协商是否完成取决于服务端能否成功解密。
  8. 服务端同样发送和第六步类似的报文,已让客户端进行确认,最后发送finish报文告诉客户端自己能够正确解密报文。
    当服务端和客户端的 finish 报文交换完成之后,SSL 连接就算建立完成了,之后就进行和 HTTP 相同的通信过程,唯一不同的是在 HTTP 通信过程中并不是采用明文传输,而是采用对称加密的方式,其中对称密钥已经在 SSL 的建立过程中协商好了。

五、HTTP和HTTPS的区别

可以从这几点来说:

  1. 加密:http通过明文方式发送内容,数据都是未加密的,安全性较差;https数据传输过程是加密的,采用了对称加密和非对称加密结合的方式。
  2. 端口:http使用80端口,https使用443端口。
  3. CA:https协议需要到数字认证机构CA申请证书,需要一定的费用。
  4. 响应速度:http页面响应要比https更快,主要因为http建立连接只需要三次握手,而https除了三次握手还需要ssl协商

六、HTTPS的加密方式

HTTPS采用对称加密和非对称加密结合的方式。首先使用SSL/TLS协议进行加密传输,为了弥补非对称加密的缺点,HTTPS采用证书进一步加强安全性。通过非对称加密,客户端和服务端协商好之后进行通信传输的对称密钥,后续所有信息的传输都通过这一对对称密钥进行。

七、cookie和session

http协议是一个不保存客户机的协议。因此需要引入cookie和session来辅助保存用户状态。

session

在客户端第一次向服务器发送HTTP请求之后,服务器会创建一个session对象并将客户端的身份信息以键值对的形式存储,然后分配一个session id给客户端,这个session id一般会保存在客户端本地的cookie中。 之后每一次客户端发送http请求都会携带session id到服务器,服务器根据会话标识就可以将之前的状态信息和会话进行联系,从而保持会话。
优点: Session是保存在服务器上的,安全性高。
缺点: 速度慢一点。而且如果服务端采用了负载均衡策略,客户端的两次连接请求打在两个不同的主机上,基于session就不能实现会话保持了。这个时候可以通过redis来解决问题。

cookie

当服务器发送响应消息的时候,在http头部设置set-cookie字段,用来存储客户端的状态信息。 客户端解析出http响应头中的字段信息,并根据其生命周期创建不同的cookie,这样以来每一次浏览器发送http请求的时候都会带上cookie字段,从而实现状态保持。基于cookie的会话保持和基于session实现的会话保持最主要的区别就是前者将会话状态信息存储在浏览器的cookie中。

优点: 服务器不用保存状态信息,减轻服务器的存储压力,同时便于服务器负载均衡策略的实现。
缺点: 不够安全。且每次发送http请求都会发送额外的cookie到服务器中,会占用更多的带宽。

八、HTTP状态码

状态码200:

状态码200表示服务器响应成功,也就是服务器找到了客户端请求的内容,并且将内容返回给客户端。

状态码301:

状态码301代表临时跳转。例如:URL地址A可以向URL地址B上跳转,但这并不是永久性的,在经过一段时间后,URL地址A还可能向URL地址C上跳转。

状态码302 :

状态码302和状态码301相似,不同的是状态码302往往代表的是永久性的重定向,值得注意的是,这种重定向跳转,从严格意义来讲不是服务器跳转,而是客户端跳转的。这个“跳”的动作是服务器是通过回传状态码302来下达给客户端的,让客户端完成跳转。

状态码304:

服务器通过返回状态码304可以告诉客户端请求资源成功,但是这个资源不是由服务器提供返回给客户端的,而是客户端本地浏览器缓存中就有的这个资源,因为可以从缓存中获取这个资源,从而节省传输的开销。

状态码403:

状态码403代表请求的服务器资源权限不够,也就是说,没有权限去访问服务器的资源,或者请求的IP地址被封掉了。

状态码404:

状态码404代表服务器上没有该资源,或者说服务器找不到客户端请求的资源,是最常见的请求错误码。

状态码500:

状态码500代表程序错误,也就是说请求的网页程序本身报错了。在服务器端的网页程序出错。由于现在的浏览器都会对状态码500做一定的处理,所以在一般情况下会返回一个定制的错误页面

九、HTTP/1.1和HTTP/1.0的区别

主要区别如下:

  • 缓存处理:在 HTTP/1.0 中主要使用 header 里的 if-modified-Since, Expries 来做缓存判断的标准。而 HTTP/1.1 请求头中添加了更多与缓存相关的字段,从而支持更为灵活的缓存策略,例如 Entity-tag, If-Unmodified-Since, If-Match, If-None-Match 等可供选择的缓存头来控制缓存策略。

  • 节约带宽: 当客户端请求某个资源时,HTTP/1.0 默认将该资源相关的整个对象传送给请求方,但很多时候可能客户端并不需要对象的所有信息。而在 HTTP/1.1 的请求头中引入了 range 头域,它允许只请求部分资源,其使得开发者可以多线程请求某一资源,从而充分的利用带宽资源,实现高效并发。

  • 错误通知的管理:HTTP/1.1 在 1.0 的基础上新增了 24 个错误状态响应码,例如 414 表示客户端请求中所包含的 URL 地址太长,以至于服务器无法处理;410 表示所请求的资源已经被永久删除。

  • Host 请求头:早期 HTTP/1.0 中认为每台服务器都绑定一个唯一的 IP 地址并提供单一的服务,请求消息中的 URL 并没有传递主机名。而随着虚拟主机的出现,一台物理服务器上可以存在多个虚拟主机,并且它们共享同一个 IP 地址。为了支持虚拟主机,HTTP/1.1 中添加了 host 请求头,请求消息和响应消息中应声明这个字段,若请求消息中缺少该字段时服务端会响应一个 404 错误状态码。

  • 长连接:HTTP/1.0 默认浏览器和服务器之间保持短暂连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器完成后立即断开 TCP 连接。HTTP/1.1 默认使用的是持久连接,其支持在同一个 TCP 请求中传送多个 HTTP 请求和响应。此之前的 HTTP 版本的默认连接都是使用非持久连接,如果想要在旧版本的 HTTP 协议上维持持久连接,则需要指定 Connection 的首部字段的值为 Keep-Alive

十、HTTP1.X和HTTP2.0的区别

  • 二进制传送:之前版本 数据都是用文本传输,因为文本有多种格式,所以不能很好地适应所有场景; 2.0传送的是二进制,相当于统一了格式

  • 多路复用:1.1虽然默认复用TCP连接,但是每个请求是串行执行的,如果前面的请求超时,后面的请求只能等着(也就是线头阻塞); 2.0的时候每个请求有自己的ID,多个请求可以在同一个TCP连接上并行执行,不会互相影响

  • header压缩:每次进行HTTP请求响应的时候,头部里很多的字段都是重复的,在2.0中,将字段记录到一张表中,头部只需要存放字段对应的编号就行,用的时候只需要拿着编号去表里查找就行,减少了传输的数据量

  • 服务端推送:服务器会在客户端没发起请求的时候主动推送一些需要的资源,比如客户端请求一个html文件,服务器发送完之后会把和这个html页面相关的静态文件也发送给客户端,当客户端准备向服务器请求静态文件的时候,就可以直接从缓存中获取,就不需要再发起请求了

十一、HTTP3

HTTP/3 是在 QUIC 基础上发展起来的,其底层使用 UDP 进行数据传输,上层仍然使用 HTTP/2。在 UDP 与 HTTP/2 之间存在一个 QUIC 层,其中 TLS 加密过程在该层进行处理。HTTP/3 主要有以下几个特点:

① 使用 UDP 作为传输层进行通信;

② 在 UDP 之上的 QUIC 协议保证了 HTTP/3 的安全性。QUIC 在建立连接的过程中就完成了 TLS 加密握手;

③ 建立连接快,正常只需要 1 RTT 即可建立连接。如果有缓存之前的会话信息,则直接验证和建立连接,此过程 0 RTT。建立连接时,也可以带有少量业务数据;

④ 不和具体底层连接绑定,QUIC 为每个连接的两端分别分配了一个唯一 ID,上层连接只认这对逻辑 ID。网络切换或者断连时,只需要继续发送数据包即可完成连接的建立;

⑤ 使用 QPACK 进行头部压缩,因为 在 HTTP/2 中的 HPACK 要求传输过程有序,这会导致队头阻塞,而 QPACK 不存在这个问题。

最后我们使用一张图来清晰的表示出 HTTP 协议的发展变化:
请添加图片描述


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

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

相关文章

【微信小程序】-- WXML 模板语法 - 数据绑定(九)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

DPDK系列之四DPDK整体框架分析说明

一、网络发展和DPDK 在上篇分析过网络应用对DPDK出现的影响。而具体体现在技术上,从最简单来看就是从C10K到c100K甚至更多。而相应的计算的发展也从挖掘单CPU的性能发展到了瓶颈,同样,对于网络设备也遇到了类似的问题。而目前解决问题的方法…

MySQL到Elasticsearch实时同步构建数据检索服务的选型与思考[转载]

前言 本文具体探讨 MySQL 数据实时同步到 Elasticsearch (以下简称 ES ) 技术方案和思考,同时使用一定篇幅介绍一些前置知识,从理论到实践,让读者更好的理解这块内容和相关问题。包括: 为什么我们要将数据从 MySQL 实时同步到 ES …

Day899.Join语句优化 -MySQL实战

Join语句优化 Hi,我是阿昌,今天学习记录的是关于Join语句优化的内容。 join 语句的两种算法,分别是 Index Nested-Loop Join(NLJ) 和 Block Nested-Loop Join(BNL)。 发现在使用 NLJ 算法的时候,其实效果还是不错的&#xff0c…

【手把手一起学习】(五) Altium Designer 20 STM32核心板Demo----PCB封装库添加元件

1 PCB封装库添加元件 元件的PCB封装非常重要,关系到实际电子元件能否焊接到制作的电路板上。PCB封装的引脚顺序,引脚间距,焊盘大小,焊盘形状等都需要与元件实物严格对应,因此绘制PCB封装库时,需要参考元件…

在Windows上编译Nginx

《在Windows上编译Nginx》视频教程官方编译说明 Building nginx on the Win32 platform with Visual C 环境准备 1. Microsoft Visual Studio(Microsoft Visual C 编译器),下载地址:https://visualstudio.microsoft.com/zh-hans/。 2. Git(备用)&…

OSS存储使用之centOS系统ossfs挂载

以CentOS7系统为例 下载CentOS系统支持的ossfs工具的版本,以下载CentOS 7.0 (x64)版本为例,可以通过wget命令进行安装包的下载 wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm 也可以通过yum命令来进行安装包的下载 sud…

【网络原理9】HTTP响应篇

在前两篇文章当中,已经分别介绍了HTTP是什么,以及常见的请求头当中的属性。【网络原理7】认识HTTP_革凡成圣211的博客-CSDN博客HTTP抓包,Fiddler的使用https://blog.csdn.net/weixin_56738054/article/details/129148515?spm1001.2014.3001.…

excel格式调整:表格应用中格式刷技法汇总

格式刷很简单,点一下,就可以把格式复制到其他单元格、图形、文字上。但是格式刷的用法又不仅仅这么一点,它还可以实现快速隔行填色、隔行隐藏,实现“无损”合并单元格等。在excel中,位于开始菜单中左侧的格式刷&#x…

澜沧古茶再冲刺港交所上市:多项核心指标下滑,杜春峄为董事长

近日,普洱澜沧古茶股份有限公司(下称“澜沧古茶”)向港交所主板提交上市申请,中信建投国际、招商证券国际为其联席保荐人。据贝多财经了解,这已经是澜沧古茶第二次在港交所递表,此前曾于2022年5月30日在港交…

不同方案特性对比

特性对比项 2.4G 蓝牙 868M WIFI 通信速率 低 低 低 高 距离(实用可靠) 20米 10米 30米 15米 确定性 高 低 高 高 可靠性(距离内) 高 低 高 高 刷新一个标签时间(通常) 0.5-1s …

西北工业大学大学物理(I)下2019-2020选填考题解析

单选题12个,24分。1量子数考查前三个量子数由薛定谔方程决定,最后一个关于自旋的由狄拉克方程决定由这些量子数可以给出原子的壳层结构。考试其实考的不深,记住这个表就够了。2 书上18、19章量子物理的著名实验:光电效应&#xff…

如何安装和使用oecp工具?

运行环境:python3>3.7.9、sqlite>v3.7.17 下载安装与部署的要求: install abidiff (centos): yum install -y epel-release; yum install -y libabigail install createrepo: yum install -y createrepo install binutils: yum install -…

【Redis】初探Redis

【Redis】初探Redis 前言 很早之前写的文章,最近考虑到面试可能涉及到Redis,所以拿出来再看一遍 Redis概述 Redis是啥? Redis是Remote Dicitionary Server的缩写,翻译过来就叫做远程字典服务 是开源的、使用C完成的、支持网路…

推荐算法——NCF知识总结代码实现

NCF知识总结代码实现1. NeuralCF 模型的结构1.1 回顾CF和MF1.2 NCF 模型结构1.3 NeuralCF 模型的扩展---双塔模型2. NCF代码实现2.1 tensorflow2.2 pytorchNeuralCF:如何用深度学习改造协同过滤? 随着技术的发展,协同过滤相比深度学习模型的…

学习资料|常用的一些CMD运行命令,整理的比较齐全

CMD命令CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)appwiz.cpl:程序和功能calc:启动计算器certmgr.msc:证书管理实用程序charmap&#…

持续集成Jenkins (五)Jenkins API的使用(更新中)

前言目前,我们将要上线DevOps系统,面对未来可能需要对系统的二次开发和处于对系统的深入理解,我需要对Jenkins API有个比较熟悉的了解。在DevOps中,jenkins总是作为其中的一环集成到里面,它提供了几种语言的API,可以很…

如何在Wordpress中使用wp_nav_menu()在<li>及a标记中添加Class

我正在使用wp_nav_menu($args),我想将my_own_classCSS类名添加到<li>元素中以获得以下结果:<li classmy_own_class><a href>Link</a>怎么做&#xff1f;wp_nav_menu()在<li>标记中添加Class方法一&#xff1a;只需使用其他参数并为nav_menu_css_…

熟悉GC常用算法,熟悉常见垃圾收集器,具有实际JVM调优实战经验

程序的栈和堆 栈先进后出&#xff0c;且里面的数据自动释放&#xff0c; 堆内的空间则需要手动释放 java python go 只管创建&#xff0c;不用像c,c需要手动释放空间&#xff0c; 因为他们都会开一个进程GC&#xff08;Garbage Collector&#xff09;&#xff0c;由垃圾回收…

从早吃到晚,才是我对旅行目的地最大的尊重

点击文末“阅读原文”即可收听本期节目剪辑、音频 / 卷圈 编辑 / SandLiu 卷圈 监制 / 姝琦 文案 / 粒粒 封面 / midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间摊牌吧&#xff0c;承认吧&#xff0c;有些地方&#xff0c;你就是冲着吃东西才去的&#xff0c;旅…