TCP/IP(六):HTTP 与 HTTPS 简介
本文是准备面试过程中网络部分总结整理的最后一篇文章,主要介绍以下知识:
- HTTP 协议概述
- POST 请求和 GET 请求
- Cookie 和 Session
- 数据传输时的加密
- HTTPS 简介
HTTP 协议
在 OSI 七层模型中,HTTP 协议位于最顶层的应用层中。通过浏览器访问网页就直接使用了 HTTP 协议。使用 HTTP 协议时,客户端首先与服务端的 80 端口建立一个 TCP 连接,然后在这个连接的基础上进行请求和应答,以及数据的交换。
HTTP 有两个常用版本,分别是 1.0 和 1.1。主要区别在于 HTTP 1.0 中每次请求和应答都会使用一个新的 TCP 连接,而从 HTTP 1.1 开始,运行在一个 TCP 连接上发送多个命令和应答。因此大幅度减少了 TCP 连接的建立和断开,提高了效率。
由 HTTP 协议加载出来的网页,通常使用 HTML 语言来描述,因此 HTML 也可以理解为网页的一种数据格式。HTML 是一段纯文本,可以指定网页中的文字、图像、音频视频图片、链接,以及它们的颜色、位置等。无论计算机的底层结构如何,也无论网络底层使用了哪些协议,使用 HTML 展示出来的效果基本上是一致的。从这个角度来说 HTML 位于 OSI 七层模型的表现层。
POST 请求和 GET 请求
HTTP 有八种请求(也称方法),其中最常见的是 GET 请求和 POST 请求。
GET 请求通常用于查询、获取数据,而 POST 请求则用于发送数据,除了用途上的区别,它们还有以下这些不同:
- GET 请求可以被缓存,可以被收藏为书签,但 POST 不行。
- GET 请求会保留在浏览器的历史记录中,POST 不会。
- GET 请求的长度有限制(不同的浏览器不一样,大约在几 Kb 左右),URL 的数据类型只能是 ASCII 字符,POST 请求没有限制。
- GET 请求的参数在 URL 中,因此绝不能用 GET 请求传输敏感数据。POST 请求数据则写在 HTTP 的请求头中,安全性略高于 GET 请求。
注意:
POST 请求仅比 GET 请求略安全一点,它的数据不在 URL 中,但依然以明文的形式存放于 HTTP 的请求头中。
Cookie 和 Session
HTTP 是一种无状态的连接,客户端每次读取 web 页面时,服务器都会认为这是一次新的会话。但有时候我们又需要持久保持某些信息,比如登录时的用户名、密码,用户上一次连接时的信息等。这些信息就由 Cookie 和 Session 保存。
这两者的根本性区别在于,cookie 保存在客户端上,而 session 则保存在服务器中。由此我们还可以拓展出以下结论:
- cookie 相对来说不安全,浏览器可以分析本地的 cookie 进行 cookie 欺骗。
- session 可以设置超时时间,超过这个时间后就失效,以免长期占用服务端内存。
- 单个 cookie 的大小有限制(4 Kb),每个站点的 cookie 数量一般也有限制(20个)。
- 客户端每次都会把 cookie 发送到服务端,因此服务端可以知道 cookie,但是客户端不知道 session。
当服务器接收到 cookie 后,会根据 cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 发送给客户端。
加密
加密分为两种,对称加密和非对称加密。在解释这两者的含义前,先来看一下简单的加密、解密过程:
所谓的对称,就是指加密秘钥和解密秘钥相同,而非对称自然就是指两者不同。
举一个对称加密的例子。假设这里的加密算法是加法,解密算法是减法。如果明文数据是 10,秘钥是 1,那么加密数据就是 10 + 1 = 11
,如果接收方不知道秘钥,就不知道密文 11 应该减去几。反之,如果接收方知道秘钥是 1,就可以通过 11 - 1 = 10
计算出明文数据。
常见的一个非对称加密算法是 RSA 算法,它主要利用了“两个素数求乘积容易,但是将乘积分解为两个素数很难”这一思想。它的具体原理不在本文讨论范围,有兴趣的读者可以查看文章末尾的参考文章。
在非对称加密中,利用公钥加密的数据能且只能通过私钥解密,通过私钥加密的数据能且只能通过公钥解密。
对称加密的优点在于速度快,但是假设秘钥由服务器保存,如何安全的让客户端得到秘钥是需要解决的问题。因此实际的网络传输中,通常使用对称加密与非对称加密结合的方式,服务端通过非对称加密将对称秘钥发给客户端。此后双方使用这个对称密钥进行通信。
HTTPS
我们知道 HTTP 协议直接使用了 TCP 协议进行数据传输。由于数据没有加密,都是直接明文传输,所以存在以下三个风险:
- 窃听风险:第三方节点可以获知通信内容。
- 篡改风险:第三方节点可以修改通信内容。
- 冒充风险:第三方节点可以冒充他人身份参与通信。
比如你在手机上打开应用内的网页时,有时会看到网页底部弹出了广告,这实际上就说明你的 HTTP 内容被窃听、并篡改了。
HTTPS 协议旨在解决以上三个风险,因此它可以:
- 保证所有信息加密传输,无法被第三方窃取。
- 为信息添加校验机制,如果被第三方恶意破坏,可以检测出来。
- 配备身份证书,防止第三方伪装参与通信。
HTTPS 的结构如图所示:
可见它仅仅是在 HTTP 和 TCP 之间新增了一个 TLS/SSL 加密层,这也印证了一句名言:“一切计算机问题都可以通过添加中间层解决”。
使用 HTTPS 时,服务端会将自己的证书发送给客户端,其中包含了服务端的公钥。基于非对称加密的传输过程如下:
- 客户端使用公钥将信息加密,密文发送给服务端
- 服务端用自己的私钥解密,再将返回数据用私钥加密发回客户端
- 客户端用公钥解密
这里的证书是服务器证明自己身份的工具,它由权威的证书颁发机构(CA)发给申请者。如果证书是虚假的,或者是自己给自己颁发的证书,服务器就会不认可这个证书并发出警告:
总结一下 HTTPS 协议是如何避免前文所说的三大风险的:
- 先用非对称加密传输密码,然后用这个密码对称加密数据,使得第三方无法获得通信内容
- 发送方将数据的哈希结果写到数据中,接收方解密后对比数据的哈希结果,如果不一致则说明被修改。由于传输数据加密,第三方无法修改哈希结果。
- 由权威机构颁发证书,再加上证书校验机制,避免第三方伪装参与通信。
参考文章
- HTTPS科普扫盲帖
- SSL/TLS协议运行机制的概述
- RSA 加密
- HTTP 方法:GET 对比 POST
原文链接:http://www.jianshu.com/p/6e7521041e92
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
TCP/IP(六):HTTP 与 HTTPS 简介相关推荐
- 万字长文,一文搞懂TCP/IP和HTTP、HTTPS
来自:非科班的科班 TCP/IP概念 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现 ...
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
- TCP/IP SOCKET HTTP及HTTPS之间的关系
GET跟POST的区别: get只能传送128K的数据 而post是无限制的 post提交是不在会IE上带上参数 就算你加密了别人也会解密 一般比较重要的数据通过post 传,因为get是别人可以改参 ...
- TCP/IP、SOCKET、HTTP之间的联系与区别
主要内容: 1.网络的七层协议 2.TCP/IP.SOCKET.HTTP简介 3.TCP连接.HTTP连接.Socket连接的区别 一.网络的七层协议 网络七层由下往上分别为物理层.数据链路层.网络层 ...
- TCP/IP入门(4) --应用层
/** 本篇博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP中的 ...
- CCNA--OSI、TCP/IP
1.OSI模型 2.TCP/IP模型 转载于:https://www.cnblogs.com/halai/p/8329526.html
- TCP/IP、Http的区别
2019独角兽企业重金招聘Python工程师标准>>> TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和H ...
- Practice:Demonstrating the Key TCP/IP Protocols
This practice uses common UNIX and Windows NT utilities to visualize key TCP/IP protocols. 转载于:https ...
- TwinCAT3以太网TCP/IP自由协议通讯
目录 一.TwinCAT3以太网TCP/IP客户端创建 1.系统连接示意图 1.程序创建 (1)工程创建和授权添加 (2)库文件添加 (3)变量创建 (4)程序 2.测试 (1)网络调试助手创建服务端 ...
最新文章
- 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素
- 尚硅谷学Javaweb,关于正则表达式笔记
- Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结
- jvm类加载机制总结
- ResNet在分别在Keras和tensorflow框架下的应用案例
- logitech鼠标接收器配对
- Bodymovin插件的使用
- 字符串的编码格式转换
- 一拍是多少秒 计算机制音乐,音乐一个节拍是几秒钟?
- 分治回溯--Nqueen
- 社群发现算法--强连通和连通在关联图谱中的应用
- svn: E175003:The server at ‘https://XXX/!/#XXX/XXX‘ does not support the HTTP/DAV protocol解决方案
- 51单片机 YF-S201水流量检测传感器的使用
- HTML5 APP开发环境的框架搭建
- 目标检测(后处理):从 NMS 到 Soft-NMS 到 Softer NMS
- Win10 下安装Win7双系统
- 304413存储过程和触发器
- python实现局域网攻击_牛逼了!一行Python代码搭建一个局域网服务器
- 在 Windows 10 中通过命令提示符或控制面板启用 Telnet
- 随便记记~Chrome中,退格键失灵、搜狗输入法不能正常输入、点击网页变成下载html文件的解决办法
热门文章
- 数据结构-队列之循环队列
- windows下SecureCRT无法使用backspace(空格键)和上下左右键
- pads layout 中 hatch和flood之区别
- 现在多少钱能和以80年代的万元户持平?
- 历史是“混合体”,也是“内幕”:说说《三国大传》
- 男人是消耗品,女人是战利品?
- centos php mysql 5.6 安装_centos 6.8 yum安装 PHP 5.6
- oracle轮询方式循环输出,LGWR的两种模式(POST/WAIT和POLLING)
- python if name main 的作用_Python中if __name__ == __main__: 的作用
- Unity 2017 Game Optimization 读书笔记 Scripting Strategies Part 5