文章目录

  • 前言
  • 一、HTTP
    • 1.HTTP是什么
    • 2.HTTP请求响应的过程:
    • 3.HTTP 报文
  • 二、HTTPS
    • 1.什么是HTTPS
    • 2.HTTPS的流程
    • 3.HTTP和HTTPS的区别
  • 总结

前言

今天在学习网络协议里的一个很重要的协议HTTP协议,也就是超文本传输协议,查资料的时候看到HTTPS协议放在一起讲,于是写博客记录二者的相同点和不同点。下面是我对两种协议的理解与认识。


一、HTTP

1.HTTP是什么

HTTP(HyperText Transfer Protocol:超文本传输协议) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。其实我也说不清分布式协作式到底是个什么……反正记住功能,就是去发布和接收 HTML 的方法,该协议用于在 Web 浏览器和网站服务器之间传递信息。

HTTP 默认工作在 TCP 协议 80 端口。
http:// 打头的网站都是标准 HTTP 服务。

HTTP 协议以明文方式发送内容,明文的意思就是没有任何的数据加密,所以就不是很安全,这种情况下截取传输报文就直接知道了其中的信息了,所以敏感信息不适合HTTP协议去传输。

HTTP工作在 TCP/IP协议体系中的TCP协议上。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

还有就是格式,分为请求协议和响应协议。还有就是格式,客户端发送给服务器的格式叫“请求协议(request)”;服务器发送给客户端的格式叫“响应协议(response)”。

2.HTTP请求响应的过程:

输入网址之后发生了什么?

首先,浏览器查找域名对应IP,我们假设访问的 URL 地址为 http://www.someSchool.edu/someDepartment/home.index,当我们输入网址并点击回车时,浏览器内部会进行如下操作:
DNS服务器会首先进行域名的映射,找到访问www.someSchool.edu所在的地址,找的过程如下
浏览器缓存——浏览器会记录DNS一段时间(2-30分钟不等,视浏览器而定)
系统缓存——浏览器里没找到DNS缓存,此事浏览器做一个系统调用(window下是gethostbyname)。如发现匹配则采用。(与此对应有host恶意劫持更改攻击)
路由器缓存——路由器也会有DNS缓存(缓存你上过的网站,所以有时路由器需要进行DNS刷新)
ISP DNS缓存——接下来是在ISP(互联网服务提供商)的DNS服务器的缓存上查找。
递归查找——DNS缓存里没有的话,ISP DNS服务器会先后从根域名服务器(root)、.com顶级域名服务器、Facebook域名服务器获取IP(一般缓存内都会有,所以这一步一般不会发生)

然后HTTP 客户端进程在 80 端口发起一个到服务器 www.someSchool.edu 的 TCP 连接(80 端口是 HTTP 的默认端口)。在客户和服务器进程中都会有一个套接字与其相连。HTTP 客户端通过它的套接字向服务器发送一个 HTTP 请求报文。该报文中包含了路径 someDepartment/home.index 的资源。

得到域名对应的IP后,就开始发送HTTP(S)请求了.

请求头详解:
GET http://www.someSchool.edu/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, […]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; […]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: someSchool.edu
Cookie: datr=1265876274-[…]; locale=en_US; lsd=WW[…]; c_user=2101[…]

请求告诉服务器:
我要获取(GET) http://www.someSchool.edu/(GET的URL)这个页面
Accept:我能接受这些类型的文件
我使用的是何种操作系统上的哪个类型那个版本的浏览器
承认接受何种方式的压缩文件
连接类型:短连接?长连接?
主机域名
发送存储在本机的cookies信息给服务器

cookies不是小饼干的意思,是指小型文本文件,不会就只有我才知道吧,不会吧

除了发送获取请求,还能发送提交响应请求(如:搜索时要把搜索的内容一并发给服务器进行处理(在请求URL后面增加特定的用户参数),以获取特定的内容)

HTTP 服务器通过它的套接字接受该报文,进行请求的解析工作,并从其存储器(RAM 或磁盘)中检索出对象 www.someSchool.edu/someDepartment/home.index,然后把检索出来的对象进行封装,封装到 HTTP 响应报文中,并通过套接字向客户进行发送。

HTTP 服务器随即通知 TCP 断开 TCP 连接,实际上是需要等到客户接受完响应报文后才会断开 TCP 连接。

HTTP 客户端接受完响应报文后,TCP 连接会关闭。HTTP 客户端从响应中提取出报文中是一个 HTML 响应文件,并检查该 HTML 文件,然后循环检查报文中其他内部对象。
检查完成后,HTTP 客户端会把对应的资源通过显示器呈现给用户。

这部分我学习了这位博主的博客:link

但我们会发现,我们这输入的网址是非常完整的,要是不完整该怎么办呢?

引入一个新的东西——重定向
当我们输入不完整的网址(比如:http://facebook.com)时,或者网站迁移做了重定向设置时,服务器会进行一次重定向响应。重定向之后会发布一个新的获取请求。

3.HTTP 报文

HTTP 协议主要由三大部分组成:

起始行(start line):描述请求或响应的基本信息;
头部字段(header):使用 key-value 形式更详细地说明报文;
消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据
就拿上面的那个来看:

GET http://www.someSchool.edu/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, […]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; […]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: someSchool.edu
Cookie: datr=1265876274-[…]; locale=en_US; lsd=WW[…]; c_user=2101[…]

第一排就是起始行,请求头部就是后面的。

二、HTTPS

1.什么是HTTPS

HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议) 是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:

1、TCP 三次同步握手
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。

2.HTTPS的流程

客户端发起 HTTPS 请求就是我们在浏览器里输入一个 https 网址,这个然后连接到 server 的 443 端口。

然后就进行服务端的配置,采用 HTTPS 协议的服务器必须要有一套数字证书,这套证书其实就是一对公钥和私钥。

有了证书后就开始传送证书,这个证书就是公钥,包含了很多信息,如证书的颁发机构,过期时间等等。

客户端解析证书,这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

然后就可以传送加密信息了,这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

得到信息了就可以进行服务端解密信息,服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

传输加密后的信息,这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

客户端解密信息,客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。

看过程就知道真的挺安全的…………

HTTPS部分学习来自这位博主的分享:link

3.HTTP和HTTPS的区别

HTTP HTTPS
80端口 443端口
明文传输 加密

http 和 https 使用的是完全不同的连接方式,HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

总结

HTTP和HTTPS参考各个大佬的文章浅浅学了一下,理解流程。

HTTP 与 HTTPS 的详解和区别相关推荐

  1. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

  2. 【Java-Java集合】Java集合详解与区别

    [Java-Java集合]Java集合详解与区别 1)概述 2)集合框架图 2.1.总框架图 2.2.Iterable 框架图 2.3.Map 框架图 3)List 3.1.ArrayList 类继承 ...

  3. Sql Server 中 GAM、SGAM、PAM、IAM、DCM 和 BCM 的详解与区别

    Sql Server 中 GAM.SGAM.PAM.IAM.DCM 和 BCM 的详解与区别 GAM.SGAM.PAM.IAM.DCM 和 BCM 都是 SQL Server 中用来管理空间分配的一些 ...

  4. 【计算机网络】--- HTTP与HTTPS协议详解

    HTTP与HTTPS协议详解 一.URL 二.HTTP协议 三.HTTPS协议 四.HTTP与HTTPS区别(重中之重) 五.如何正确选择HTTP协议和HTTPS协议 引言:当我们打开一个网页时,奇妙 ...

  5. Http、Https协议详解

    Http/Https协议详解 Http协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol.它是从WEB服务器传输超文本标记语言(HTML) ...

  6. ViewPager 的适配器 PagerAdapter 、FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别

    1.FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别

  7. c语言运算符 amp 的意思,C++中运算符 amp;和amp;amp;、|和|| 的详解及区别

    C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以 ...

  8. cpu二级缓存和一级缓存详解及区别(图解)

    cpu二级缓存和一级缓存详解及区别(图解) 2012-09-02 12:27:55|  分类: 硬件技术 |字号 订阅 处理器缓存的传输速率确实很高,然而还不足以取代内存的地位,这主要是由于缓存只是内 ...

  9. Java创建comparator对象,Java Comparable 和 Comparator 的详解及区别

    Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. C ...

最新文章

  1. 从源码分析DEARGUI之add_tooltip
  2. 天池发起全球城市计算AI挑战赛-总奖池30万人民币
  3. java 实例 登录用户 equals的用法
  4. OpenShift 4 - DevSecOps Workshop (12) - 用CodeReady Workspace编辑提交应用代码
  5. word文档怎么一分为二_微信文章怎么转成word文档,这个强大工具可以帮你搞定...
  6. python集合和序列解包
  7. 做了 7 年开源数据库开发,我学到了什么?
  8. 数据结构c语言版秦锋,数据结构(C语言版)黄国瑜.pdf
  9. 华为Code Craft 2020 + ZTE 中兴捧月
  10. 英文对于程序员的重要性
  11. 首席分析师:教你解读政策取向
  12. OpenEmbedded 中文手册
  13. 用计算机计算勾股定理,勾股定理电脑计算器
  14. 如何给grldr.mbr和grldr改名
  15. 简单理解椭圆曲线的非对称加密应用
  16. 【模拟 简易银行系统~python】
  17. A - Cthulhu CodeForces - 103B (并查集)
  18. python中的坐标表示方法_Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法...
  19. IDEA设置背景颜色和字体
  20. linux do_initcalls

热门文章

  1. 面试遇到原题时,“演员”的自我修养
  2. 影像组学工作站:SCI零基础复现,三天出一个代表作
  3. 出师未捷身先死的sycm数据自动化
  4. 理解Java并发编程:volatile关键字解析
  5. 盘点2022最好用的伪原创软件
  6. 知名服务器运维软件厂商堡塔加入龙蜥社区,并完成与 Anolis OS 兼容适配
  7. java用浏览器下载文件_JAVA读取文件流,设置浏览器下载或直接预览操作
  8. linux pppoe拨号上网
  9. 关于kafka安装使用qqf
  10. 【知识点总结】电力电子技术——第二讲