HTTP和HTTPS请求的整个过程详解

HTTP和HTTPS请求的整个过程详解

小橙子 小橘子的日记 4月17日

HTTP和HTTPS的请求流程也是面试的时候一大考点,如果不掌握的话,容易丢失印象分。这两种请求都是基于TCP/IP,不明白的请看上一篇文章。这里总结HTTP/HTTPS请求的整个过程,以备不时之需。

一、HTTP请求的过程

1.浏览器根据域名解析IP地址

浏览器根据访问的域名找到其IP地址。DNS查找过程如下:

  • 浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否是有域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束。

  • 系统缓存:如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。

  • 路由器缓存:如果系统缓存也没有找到,则会向路由器发送查询请求。

  • ISP(互联网服务提供商) DNS缓存:如果在路由缓存也没找到,最后要查的就是ISP缓存DNS的服务器。

2.浏览器与WEB服务器建立一个TCP连接

TCP的3次握手过程。

3.浏览器给WEB服务器发送一个HTTP请求

一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。

请求行

请求行分为三个部分:请求方法URLHTTP协议版本,它们之间用空格分割。例如,GET /index.html HTTP/1.1;

请求方法

HTTP/1.1 定义的请求方法有8种:GET(完整请求一个资源)、POST(提交表单)、PUT(上传文件)、DELETE(删除)、PATCH、HEAD(仅请求响应首部)、OPTIONS(返回请求的资源所支持的方法)、TRACE(追求一个资源请求中间所经过的代理)。最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。

URL

统一资源定位符,是一种资源位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>

协议版本

协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1

请求头部

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。下面列出小部分请求头内容:

请求头说明
Host接受请求的服务器地址,可以是IP:端口,也可以是域名
User-Agent发送请求的应用程序信息
Connection指定与连接相关的属性,如Connection:Keep-Alive

请求数据

请求数据一般用在POST、PUT等请求上,如:

1username=aa&password=1234
2//或
3{"username":"aa","password":"1234"}

4.服务器端响应HTTP请求,浏览器得到HTML代码

HTTP响应报文由状态行(status line)、响应头部(headers)、空行(blank line)和响应数据(response body)4个部分组成。

状态行

状态行由3部分组成,分别为:协议版本状态码状态码描述。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。如下:

1Status Code: 200 OK
2//或者
3Status Code: 302 Found

响应头部

下面列出部分响应头内容:

响应头说明
Server服务器应用程序软件的名称和版本
Content-Type响应正文的类型
Content-Length响应正文长度

响应数据

用于存放需要返回给客户端的数据信息。如下:

1<html>
2<head><title>响应信息</title></head>
3<body>我是正文</body>
4</html>

5.浏览器解析HTML代码,并请求HTML代码中的资源

浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器端去请求下载。

6.关闭TCP连接,浏览器对页面进行渲染呈现给用户

浏览器利用自己内部的工作机制,把请求到的静态资源和HTML代码进行渲染,呈现给用户。完成后根据Connection来决定是否关闭TCP连接。

二、HTTPS请求的过程

HTTP 协议由于其简单快速、占用资源少,一直被用于网站服务器和浏览器之间进行数据传输。但是在数据传输的过程中也存在很明显的问题,由于 HTTP 是明文协议,不会对数据进行任何方式的加密。当黑客攻击窃取了网站服务器和浏览器之间的传输报文的时,可以直接读取传输的信息,造成网站、用户资料的泄密。因此 HTTP 不适用于敏感信息的传播,这个时候需要引入 HTTPS(超文本传输安全协议)。

我们下面将具体过程整理如下:

  • 1.客户端向服务器发起HTTPS的请求,连接到服务器的443端口;

  • 2.服务器将非对称加密的公钥传递给客户端,以证书的形式回传到客户端;

  • 3.客户端接受到该公钥进行验证,如果有问题,则HTTPS请求无法继续;如果没有问题,客户端这个时候随机生成一个私钥,称为client key,用于对称加密数据的。使用前面的公钥对client key进行非对称加密;客户端发起二次HTTP请求,将加密之后的client key传递给服务器;

  • 4.服务器使用私钥进行解密,得到client key,使用client key对数据进行对称加密;

  • 5.将对称加密的数据传递给客户端,客户端使用对称解密,得到服务器发送的数据,完成第二次HTTP请求。

 

三、HTTPS和HTTP的区别

通过上面详细对HTTPS的分析,我们可得:

  • HTTPS是密文传输,HTTP是明文传输;

  • 默认连接的端口号是不同的,HTTPS是443端口,而HTTP是80端口;

  • HTTPS请求的过程需要CA证书要验证身份以保证客户端请求到服务器端之后,传回的响应是来自于服务器端,而HTTP则不需要CA证书;

  • HTTPS=HTTP+加密+认证+完整性保护。

 

四、HTTPS 加密算法

为了保护数据的安全,HTTPS 运用了诸多加密算法:

  1. 对称加密:有流式、分组两种,加密和解密都是使用的同一个密钥。

    例如:DES、AES-GCM、ChaCha20-Poly1305 等。

  2. 非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。

    例如:RSA、DSA、ECDSA、 DH、ECDHE 等。

  3. 哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。

    例如:MD5、SHA-1、SHA-2、SHA-256 等。

  4. 数字签名:签名就是在信息的后面再加上一段内容(信息经过 hash 后的值),可以证明信息没有被修改过。hash 值一般都会加密后(也就是签名)再和信息一起发送,以保证这个 hash 值不被修改。

 

 

微信扫一扫
关注该公众号

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

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

相关文章

http和https协议有什么区别

1、https协议需要到CA &#xff08;Certificate Authority&#xff0c;证书颁发机构&#xff09;申请证书&#xff0c;一般免费证书较少&#xff0c;因而需要一定费用。(原来网易官网是http&#xff0c;而网易邮箱是https。) 2、http是超文本传输协议&#xff0c;信息是明文传…

浅谈 HTTP 和 HTTPS

很多前端伙伴问题有没有体系的面试题&#xff1f; 今天为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有&#xff0c;赶快来装备自己吧&#xff01;助你面试稳操胜券&#xff0c;solo全场面试官 浅谈 HTTP 和 …

http与https概述

http与https的区别 1 背景2 基本概念3 区别4 工作原理4.1 HTTP工作原理4.2 HTTPS工作原理 5 HTTPS优缺点5.1 优点5.2 缺点 6 HTTP请求消息和响应消息6.1 请求消息6.2 响应消息 1 背景 超文本传输协议&#xff08;HTTP协议&#xff09;被用于在Web浏览器和网站服务器之间传递信…

HTTP和HTTPS协议,看一篇就够了

一、前言&#xff1a; 先来观察这两张图&#xff0c;第一张访问域名http://www.12306.cn&#xff0c;谷歌浏览器提示不安全链接&#xff0c;第二张是https://kyfw.12306.cn/otn/regist/init&#xff0c;浏览器显示安全&#xff0c;为什么会这样子呢&#xff1f;2017年1月发布的…

HTTP和HTTPS

1. 前言 近几年&#xff0c;互联网发生着翻天覆地的变化&#xff0c;尤其是我们一直习以为常的HTTP协议&#xff0c;在逐渐的被HTTPS协议所取代&#xff0c;在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下&#xff0c;互联网迎来了“HTTPS加密时代”&#xff0c;HTT…

HTTP 和 HTTPS 的区别

一、简述 1️⃣HTTP (全称 Hyper Text Transfer Protocol)&#xff0c;就是超文本传输协议&#xff0c;用来在 Internet 上传送超文本。是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准(TCP)&#xff0c;用于从 WWW 服务器传输超文本…

什么是HTTP协议和HTTPS协议,以及两者的区别

HTTP协议 超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以形式给出&#xff1b;而消息内…

HTTP与HTTPS的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息&#xff0c;HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息&#xff0c;因此&…

HTTP与HTTPS是什么?http和https的区别

一、HTTP是什么&#xff1f; HTTP 是超⽂本传输协议&#xff0c;也就是Hyper Text Transfer Protocol。 HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和规范」。 超⽂本传输协议&#xff0c;它可以拆成三个部分&…

HTTP与HTTPS的区别,详细介绍

需要查看更多的计算机网络相关的知识&#xff1f;点击这里 目录 HTTP与HTTPS介绍 HTTPS和HTTP的主要区别 HTTPS的主干层次介绍 客户端在使用HTTPS方式与Web服务器通信时的步骤 CA证书的申请及其使用过程 SSL与TLS SSL/TLS历史 SSL/TLS协议的基本过程 SSL/TLS 密码套件…

C++ vector与map的结合运用

目录 vector和map的简单介绍&#xff1a; 今天我们用vector容器和map容器实现以下简单的功能&#xff1a; 案例描述&#xff1a; 图解: ​ 实现步骤&#xff1a; 代码实现&#xff1a; 运行结果&#xff1a; vector和map的简单介绍&#xff1a; map和vector都是C STL&…

系统漏洞利用与提权

任务二&#xff1a;系统漏洞利用与提权 任务环境说明&#xff1a; 服务器场景&#xff1a;PYsystem0033 服务器场景操作系统&#xff1a;Ubuntu 服务器场景用户名:未知 密码&#xff1a;未知 1.使用nmap扫描靶机系统&#xff0c;将靶机开放的端口号按从小到大的顺序作为F…

pycharm内置Git操作失败的原因

文章目录 问题简介解决方案DNS缓存机制知识的自我理解 问题简介 最近在pycharm中进行代码改动递交的时候&#xff0c;总是出现了连接超时或者推送被rejected的情况&#xff0c;本以为是开了代理导致的&#xff0c;但是关闭后还是推送失败&#xff0c;于是上网查了以后&#xf…

集群模式下,redis锁的问题,红锁

在使用redis来实现分布式锁的时候&#xff0c;如果redis是集群的&#xff0c;比如1主4从&#xff0c;这种主从模式就会存在延迟问题&#xff0c;导致加锁出现问题。 此时就应该使用红锁的方案&#xff0c;即在代码中不依赖于主从&#xff0c;将这5台机器视为平等的&#xff0c…

redis锁

用django-redis很容易实现redis分布式锁&#xff0c;但本文介绍用另外一种方式redis模块来实现redis锁—过期后自动解锁。 from celery_demo.celery import app import time from celery import Celery, platforms # from django.core.cache import cache import redisplatfor…

深入理解Redis分布式锁

背景 项目中有个场景是做数据分析&#xff0c;然后将目标数据保存在db,有个要求是将同类型的目标数据值保存一次&#xff0c;因此每次保存时需要判断之前是否已经存在了&#xff0c;由于qps较高&#xff0c;之前使用redis来缓存已经保存的数据&#xff0c;来抵挡对db的大部分流…

redis锁的几种实现

1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET 2. 第一种锁命令INCR 这种加锁的思路是&#xff0c; key 不存在&#xff0c;那么 key 的值会先被初始化为 0 &#xff0c;然后再执行 INCR 操作进行加一。 然后其它用户在执行 INCR 操作进行加一时&#xff0…

java redis锁_Java中Redis锁的实现

由于具体业务场景的需求,需要保证数据在分布式环境下的正确更新,所以研究了一下Java中分布式锁的实现。 Java分布式锁的实现方式主要有以下三种: 数据库实现的乐观锁 Redis实现的分布式锁 Zookeeper实现的分布式锁 其中,较常用的是前两种方式,但是数据库实现方式需要较多的…

设计模式之~工厂系列

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式&#xff1a; 拓展&#xff1a; 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点&#xff1a;简单工厂模式的最大优点在于工厂类包含…

【无标题】win11打开VMware虚拟机蓝屏解决

win11打开VMware虚拟机蓝屏解决 win11打开虚拟机蓝屏&#xff01;&#xff01;&#xff01;解决方案&#xff1a;win11支持16.2以上版本&#xff0c;其他版本不兼容&#xff0c;可用文末的卸载工具卸载之前已安装版本&#xff08;深度卸载&#xff09;&#xff0c;然后下载16.2…