网络知识_详解HTTP和HTTPS
Posted LHlucky_2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络知识_详解HTTP和HTTPS相关的知识,希望对你有一定的参考价值。
文章目录
- 1. HTTP简介
- 2. HTTP发展历史
- 3. HTTP工作原理
- 4. HTTP消息结构
- 5. HTTP请求方法
- 6. HTTP状态码
- 7. HTTP 的优点和缺点
- 8. HTTPS协议
- 9 HTTPS协议的工作原理
- 10 HTTPS缺点
- 11 HTTP和HTTPS的区别
1. HTTP简介
- HTTP协议是Hyper Text Transfer Protocol(
超文本传输协议
)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 - HTTP是一个基于TCP/IP通信协议来传递数据(html 文件, 图片文件, 查询结果等)。
- HTTP 是
应用层协议
。
应用层
:
- 应用层也称为应用实体,它由若干个特定应用服务元素(SASE)和一个或多个公用应用服务元素(CASE)组成。电子邮件传送协议
SMTP
、端系统文件上传协议FTP
、进行域名解析的DNS
协议。应用层协议分布在多个端系统上,一个端系统应用程序与另外一个端系统应用程序交换信息分组,把位于应用层的信息分组称为 报文(message)
。
面试官问:什么是超文本传输协议?
- 超文本传输协议可以进行文字分割:
超文本(Hypertext)
、传输(Transfer
)、协议(Protocol)
,关系如下: - 按照范围的大小: 协议 > 传输 > 超文本
超文本
:
- 在互联网早期的时候,输入的信息只能保存在本地,无法和其他电脑进行交互。我们保存的信息通常都以
文本
即简单字符的形式存在,而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转
,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)
。
传输
:
- 两台计算机之间会形成互联关系进行通信,存储的超文本会被解析成为二进制数据包,由传输载体(例如同轴电缆,电话线,光缆)负责把二进制数据包由计算机终端传输到另一个终端的过程称为
传输(transfer)。
协议
:
- 协议,
网络协议的简称
,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
- 为了使数据在网络上从源到达目的,
网络通信的参与方必须遵循相同的规则
,这套规则称为协议(protocol)
,它最终体现为在网络上传输的数据包的格式。协议往往分成几个层次进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。
2. HTTP发展历史
版本 | 产生时间 | 内容 | 发展现状 |
---|---|---|---|
HTTP/0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 | 没有作为正式的标准 |
HTTP/1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 | 正式作为标准 |
HTTP/1.1 | 1997年 | 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 | 2015年前使用最广泛 |
HTTP/2 | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 | 逐渐覆盖市场 |
3. HTTP工作原理
- HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过
URL
向HTTP服务端即WEB服务器发送所有请求。 - Web服务器根据接收到的请求后,向客户端发送响应信息。
- HTTP
默认端口号为80
,也可以改为8080或者其他端口。
URL
:
- 平时我们所说的“网址”其实就是说的URL,在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。
- URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
- 也可认为由4部分组成:
协议、主机、端口、路径
。
urlencode和urldecode
:
- 像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。 - 转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。 - urldecode就是urlencode的
逆过程
。 - urlencode工具链接->link
- “+” -> UrlEncode-> “%2B”。
HTTP三点注意事项
:
- HTTP是
无连接
:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 - HTTP是
媒体独立
的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。 - HTTP是
无状态
:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
4. HTTP消息结构
请求
:
- 请求由四个部分组成,分别是:请求行、请求报头、空行和正文。
HTTP 的请求标头分为四种: 通用标头、请求标头、响应标头 和 实体标头 着重讲解通用标头:
通用标头
:
- 通用标头主要有三个,分别是 Date、Cache-Control 和 Connection
Date
:
- Date 是一个通用标头,它可以出现在请求标头和响应标头中,它的基本表示如下
Date: Wed, 21 Oct 2015 07:28:00 GMT
Cache-Control
:
- Cache-Control 是一个通用标头,他可以出现在请求标头和响应标头中,Cache-Control 的种类比较多,虽然说这是一个通用标头,但是又一些特性是请求标头具有的,有一些是响应标头才有的。主要大类有
可缓存性、阈值性、 重新验证并重新加载 和其他特性
。 - 可缓存性是唯一响应标头才具有的特性,我们会在响应标头中详述。
- 阈值性,它的原英文是 Expiration。
max-age: 资源被认为仍然有效的最长时间,与 Expires 不同,这个请求是相对于 request标头的时间,而 Expires 是相对于响应标头。(请求标头)
s-maxage
: 重写了 max-age 和 Expires 请求头,仅仅适用于共享缓存,被私有缓存所忽略(这块不理解,看完响应头的 Cache-Control 再进行理解)(请求标头)
max-stale
:表示客户端将接受的最大响应时间,以秒为单位。(响应标头)
min-fresh
: 表示客户端希望响应在指定的最小时间内有效。(响应标头)
Connection
:
- Connection 决定当前事务(一次三次握手和四次挥手)完成后,是否会关闭网络连接。Connection 有两种。
持久性连接
,即一次事务完成后不关闭网络连接
Connection: keep-alive
非持久性连接
,即一次事务完成后关闭网络连接
Connection: close
响应
:
- 响应四个部分组成,分别是:状态行、相应报头、空行和响应正文。
实例
:
部分标头解释
:
Keep-Alive:
- 上面我们提到,HTTP 报文标头会分为四种,这其实是按着上下文来分类的还有一种分类是根据代理进行分类,根据代理会分为端到端头 和 逐跳标头。
而 Keep-Alive 表示的是 Connection 非持续连接的存活时间,如下 Connection: Keep-Alive
Keep-Alive: timeout=5, max=997
- Keep-Alive 有两个参数,它们是以逗号分隔的参数列表,每个参数由一个标识符和一个由等号 = 分隔的值组成。
- timeout:指示空闲连接必须保持打开状态的最短时间(以秒为单位)。
- max:指示在关闭连接之前可以在此连接上发送的最大请求数。
- 上述 HTTP 代码的意思就是限制最大的超时时间是 5s 和 最大的连接请求是 997 个。
Server:
- 服务器标头包含有关原始服务器用来处理请求的软件的信息。
- 应该避免使用过于冗长和详细的 Server 值,因为它们可能会泄露内部实施细节,这可能会使攻击者容易地发现并利用已知的安全漏洞。例如下面这种写法
Server: Apache/2.4.1 (Unix)
下面实例是一点典型的使用GET来传递数据的实例:
客户端请求:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
服务端响应:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
5. HTTP请求方法
- 根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
- HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
- HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
http请求方法对照表
->link
6. HTTP状态码
- 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
- HTTP状态码的英文为
HTTP Status Code
。
下面是常见的HTTP状态码
:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
HTTP状态码分类
:
- HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
HTTP状态码列表
->link
- 以下是部分展示:
7. HTTP 的优点和缺点
HTTP 的优点
:
简单灵活易扩展
:
- HTTP 最重要也是最突出的优点是 简单、灵活、易于扩展。
- HTTP 的协议比较简单,它的主要组成就是 header + body,头部信息也是简单的文本格式,而且HTTP 的请求报文根据英文也能猜出来个大概的意思,降低学习门槛,能够让更多的人研究和开发 HTTP 应用。
- 所以,在简单的基础上,HTTP 协议又多了灵活 和 易扩展 的优点。
- HTTP 协议里的请求方法、URI、状态码、原因短语、头字段等每一个核心组成要素都没有被制定死,允许开发者任意定制、扩充或解释,给予了浏览器和服务器最大程度的信任和自由。
应用广泛、环境成熟
:
- 因为过于简单,普及,因此应用很广泛。因为 HTTP 协议本身不属于一种语言,它并不限定某种编程语言或者操作系统,所以天然具有跨语言、跨平台的优越性。而且,因为本身的简单特性很容易实现,所以几乎所有的编程语言都有 HTTP 调用库和外围的开发测试工具。
- 随着移动互联网的发展, HTTP 的触角已经延伸到了世界的每一个角落,从简单的 Web 页面到复杂的 JSON、XML 数据,从台式机上的浏览器到手机上的各种 APP、新闻、论坛、购物、手机游戏,你很难找到一个没有使用 HTTP 的地方。
无状态
:
- 无状态其实既是优点又是缺点。因为服务器没有记忆能力,所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些,而且还能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。
HTTP 缺点
:
无状态
:
- 既然服务器没有记忆能力,它就无法支持需要连续多个步骤的事务操作。每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量。由此出现了 Cookie 技术。
明文
:
- HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式。
- 对比 TCP、UDP 这样的二进制协议,它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark 或者 tcpdump 抓包后,直接用肉眼就可以很容易地查看或者修改,为我们的开发调试工作带来极大的便利。
- 当然缺点也是显而易见的,就是不安全,可以被监听和被窥探。因为无法判断通信双方的身份,不能判断报文是否被更改过。
性能
:
- HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。
8. HTTPS协议
- HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的
安全基础是 SSL
,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层
(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。
9 HTTPS协议的工作原理
- 我们都知道 HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。
客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤,如图所示。
-
客户使用 https 的 URL 访问 Web 服务器,要求与 Web 服务器建立 SSL 连接。
-
Web 服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
-
客户端的浏览器与 Web 服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级。
-
客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
-
Web 服务器利用自己的私钥解密出会话密钥。
-
Web 服务器利用会话密钥加密与客户端之间的通信。
- 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:
-
内容加密
:采用混合加密技术,中间者无法直接查看明文内容 -
验证身份
:通过证书认证客户端访问的是自己的服务器 -
保护数据完整性
:防止传输的内容被中间人冒充或者篡改 -
混合加密
:结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。 -
数字摘要
:通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。 -
数字签名技术
:数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
10 HTTPS缺点
HTTPS 有很大的优势,但其相对来说,还是存在不足之处的:
- HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;
- HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
- SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
- SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。
- HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
11 HTTP和HTTPS的区别
面试官问:HTTP和HTTPS的区别?
- http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 SSL加密传输协议。
- HTTP协议的默认端口是80,HTTPS的默认端口是443
- http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
- https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。
以上是关于网络知识_详解HTTP和HTTPS的主要内容,如果未能解决你的问题,请参考以下文章