HTTP与HTTPS初识
HTTP
HTTP是一个属于应用层的协议,特点是简介、快速

HTTP客户端发起请求,创建端口
HTTP服务器在端口监听客户端请求
HTTP服务器向客户端返回状态和内容网络请求,页面渲染
1、Chrome搜索自身的DNS缓存2、搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经过期失效):chrome://net-internals/#dns查看DNS缓存记录
3、读取本地的HOST文件
4、浏览器发起一个DNS的一个系统调用,一般向本地主控DNS服务器
5、浏览器获得域名对应的IP地址后,发起HTTP
"三次握手"6、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了,使用了比如说,用HTTP的GET方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。
7、服务器端接收到了这个请求,根据根路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回浏览器,如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。
8、浏览器拿到了慕课网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,它们同样也是一个个HTTP请求,都需要经过上面的主要的七个步骤。
9、浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
1、宽带运营商服务器查看本身缓存
2、运营商服务器发起一个迭代的DNS解析请求
- 运营商服务器把结果返回操作系统内核同时缓存起来
- 操作系统内核把结果返回浏览器
- 最终浏览器拿到了www.imooc.com对应的IP地址

、客户端发送SYN同步报文给服务端
、服务端收到SYN同步报文之后,给客户端一个回复报文SYN,ACK报文
、客户端收到第二条报文之后,会再给服务端回复一个ACK报文 连接建立完成之后,客户端和服务端就可以进行正常的HTTP网络请求 、客户端发送一个HTTP请求报文到服务端
、服务端收到客户端的HTTP请求报文,处理之后把数据返回给客户端,产生第五条HTTP响应报文 当客户端和服务端之间结束网络请求之后,这条TCP连接通道就会关闭
假如断开由客户端发起,流程:
、客户端发送FIN终止信号报文
、服务端收到客户端发送的终止信号之后,服务端会回复给客户端一个ACK确认报文 当客户端收到第七条报文之后,有客户端向服务端方向的连接就已经断开 、过一段时间,服务端又会发送给客户端第八条FIN、ACK终止报文
、客户端收到第八条报文之后,会回复给服务端一条ACK确认报文,此时由服务端到客户端方向的TCP连接通道关闭。 TCP 连接通道是一个全双工的通道,并不是两条通道
Wireshark工具查看HTTP工作流程


HTTP Request 协议格式
• {请求方法}{/相对路径} HTTP/{http版本}\r\n \r\n = CRLF
• Header-Name-:value\r\n
• Header-Name-:value\r\n
• \r\n
• Optional Request Boby
Headers:头信息
Preview:资源预览
Response:么有处理的响应的响应的正文
Cookies:请求和返回的Cookies
Timing:图形化显示每个阶段耗费的时间
Stalled:等待时间:浏览器要发出请求到请求可以发出的等待时间,一般是代理协商以及要等到TCP连接释放的时间不包含DNS查询和建立TCP连接的时间。
Proxy negotiation:代理协商的时间
Request sent:请求时间:第一个字节发出前,到最后一个字节发出后的时间,可以理解为请求时间或上传时间
Watting(TTFB):请求发出以后到收到响应的第一个字节所花费的时间,包括整个数据在路由贯穿中所延迟的时间,以及服务器端响应这个请求做的处理时间
Content Download:收到第一个字节开始到收到最后一个字节结束所花费的时间
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费;
- HTTP是明文传输,HTTPS则是具有安全性的SSL加密传输;
- HTTP和HTTPS使用的端口也不一样,前者是80,后者是443;
- HTTPS可进行加密传输,身份认证,比HTTP安全。
限制每次连接只处理一个请求,服务器处理完客户的请求之后并且接收到客户端的答应后断开此连接。这种方式的最大好处是节省传输时间。HTTP1.0,早期客户端与服务端交换的间歇性较大,大部分通道处于空闲,会无端占用资源,利用这一特点设计了请求时建立连接,请求完毕后释放连接,这样可以尽快释放资源,服务其他客户端。
随着时间推移,keep-alive诞生,解决效率低的问题,功能是客户端到服务端连接持续有效。当出现对服务器后续请求时,keep-alive避免了重新建立连接。也可以叫做HTTP的持久连接,可以使用同一TCP连接来发送和接受多个HTTP请求和应答。
- SSL:Secure Sockets Layer安全套接层
- TLS:Transport Layer Securuty 传输层安全,SSL继任者
- TLS与SSL在传输层之上对网络连接进行加密,为网络通信提供安全及数据完整性
为了解决以下风险而设计产生:
- 所有信息都是加密传播,第三方无法窃听
- 具有校验机制,一旦被篡改,通信双方会立刻发现
- 配备身份证书,防止身份被冒充


、客户端发送握手信息给服务端,2个内容:随机数number1,协商的加密算法(或者客户端支持的加密算法)
、服务端给予客户端响应握手信息,随机数number2,匹配好的协商加密算法(一定是客户端传给服务器端的加密算法的一个子集)
、服务端给客户端第一个响应报文之后,随即又会传递给客户端第二个响应报文,即服务端的证书
、客户端收到服务端传递的证书之后,对证书进行验证,是否有效、合法(
、客户端验证服务端证书的数字摘要和证书解密后的内容是否被篡改;
、证书链。逐级验证服务端的证书,一直到根证书是否在我们的操作系统的可信任证书列表当中。根证书会被植入到浏览器中或操作系统中)
、客户端组装会话秘钥(组装有三个内容:通过客户端自己保留的随机数number1、随机数number2,预主秘钥组装会话秘钥)
、客户端将预主秘钥通过服务端传递过来的证书里面的公钥加密,然后传递给服务端
、服务端拿到加密过的预主秘钥,通过私钥解密域主秘钥,服务端也获取到三个随机数
、服务端拿到三个随机数开始组装会话密钥
、客户端通过组装的会话密钥去加密一条消息,把加密后的握手消息传递给服务端,主要为了验证服务端能否正常接收客户端加密过的数据消息
预主密钥:由客户端产生,传递给服务端,在会话中起着非常重要的作用,配合随机数1和随机数2生成最终的会话密钥。传递的随机数和预主秘钥完全可以只有预主秘钥承担,为什么产生三个随机数:协议设计之初,假设客户端所产生的随机数不是真正的随机数,为了保证随机数的随机性,我们通过产生多个随机数来达到最终产生的秘钥具有非常好的随机性,防止被中间攻击人随意窃取。
公钥、私钥:非对称加密中的专业术语。


- GET:请求获取Request-URI所标识的资源
- POST:新创建资源,在Request-URI所标识的资源后附加新的数据
- PUT:请求服务器存储一个资源,并用Request-URI作为其标识。向指定资源位置上传最新内容
- DELETE:请求服务器删除Request-URI所标识的资源
- HEAD:请求获取由Request-URI所表示的资源的响应消息报头,可以不用传入全部内容
- TRACE
- OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
- 1xx:信息响应类,表示接收到请求并且继续处理
- 2xx:处理成功响应类,表示动作被成功接收、理解和接受
- 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
- 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
- 5xx:服务器端错误,服务器不能正确执行一个正确的请求
- 200 OK 客户端请求成功
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized 服务器收到请求,但是拒绝提供服务
- 404 Not Found 请求资源不存在
- 500 Internal Server Error 服务器发生不可预期的错误
- 503 Server Unavailable 服务器当前不能处理客户端的请求
HTTP与HTTPS初识的更多相关文章
- 初识HTTPS
初识HTTPS HTTPS也被叫做“基于TLS的HTTP,基于SSL的HTTP,HTTP安全“,它是一个在Internet上广泛使用的计算机网络安全通信协议. 即HTTPS是HTTP的安全版本,在了解 ...
- [web][nginx] 初识nginx -- 使用nginx搭建https DPI解码测试环境
环境 CentOS 7 X86 文档: https://nginx.org/en/docs/ 安装: [root@dpdk ~]# cat /etc/yum.repos.d/nginx.repo [n ...
- 网络爬虫深究-初识HTTP和https常识
网络爬虫专题--HTTP基本原理 URI和URL.URN的关系 超文本 HTTP和HTTPS URI和URL 首先,我们来了解一下URI和URL,URI,即统一资源标志符,URL,即统一资源定位符. ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Python开发【第一篇】:初识Python
初识python 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...
- 【读书笔记《Bootstrap 实战》】1.初识Bootstrap
作为Web前端开发框架,Bootstrap为大多数标准的UI设计常见提供了用户友好.扩浏览器的解决方案. 1.下载Bootstrap 打开官方网址 http://getbootstrap.com/ 进 ...
- HTTP & HTTPs
HTTP HTTP 消息 HTTP 方法 参考 [1]. HTTP 协议初识 - 阮一峰: HTTPS 参考 [1]. HTTPS 升级指南 - 阮一峰:
随机推荐
- read write方式打开PHYSICAL STANDBY,闪回和还原测试
以下大部分都在STANDBY执行,主库执行(两次)的会提示 [STANDBY read write方式打开测试]检查standby状态SQL> SELECT NAME,DATABASE_ROLE ...
- AcWing 799. 最长连续不重复子序列
网址 https://www.acwing.com/solution/AcWing/content/2069/ 题目描述给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长 ...
- C++ 标准库,可变参数模板。可变参数数量,可变参数类型【转】
#include <iostream> // 可变模板参数 // 此例:可以构造可变数量,可变类型的函数输入. // 摘自:https://www.cnblogs.com/qicosmos ...
- django--通过jwt获取用户信息的两种方式
HTTP请求是无状态的,我们通常会使用cookie或session对其进行状态保持,cookie存储在客户端,容易被用户误删,安全性不高,session存储在服务端,在服务器集群情况下需要解决sess ...
- 【STM32H7教程】第30章 STM32H7的USART应用之八个串口FIFO实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第30章 STM32H7的USART应用之八个串口 ...
- python接口自动化11-pytest入门
前言 pytest是一个非常成熟的全功能的Python测试框架,适合从简单的单元到复杂的功能测试,主要特点有以下几点: 简单灵活,容易上手: 支持参数化: 能够支持简单的单元测试: 标记测试功能与属性 ...
- [08]ASP.NET Core 中 launchsettings.json 启动配置文件
ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...
- 这篇文章带你彻底理解synchronized
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- MySQL入门——在Linux下安装和卸载MariaDB
MySQL入门——在Linux下安装和卸载MariaDB 摘要:本文主要学习了如何在Linux系统中安装和卸载MariaDB数据库. 查看有没有安装过MariaDB 使用命令查看有没有安装过: [ro ...
- DataGridView中获取与设置当前选中行以及SelectedRows和CurrentRow注意区分
场景 DataGridView怎样实现添加.删除.上移.下移一行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10281414 ...