文章目录

  • 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 服务器通信时有以下几个步骤,如图所示。
  1. 客户使用 https 的 URL 访问 Web 服务器,要求与 Web 服务器建立 SSL 连接。

  2. Web 服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

  3. 客户端的浏览器与 Web 服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级。

  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

  5. Web 服务器利用自己的私钥解密出会话密钥。

  6. Web 服务器利用会话密钥加密与客户端之间的通信。

  • 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:

  • 内容加密:采用混合加密技术,中间者无法直接查看明文内容

  • 验证身份:通过证书认证客户端访问的是自己的服务器

  • 保护数据完整性:防止传输的内容被中间人冒充或者篡改

  • 混合加密:结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。

  • 数字摘要:通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。

  • 数字签名技术:数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。

10 HTTPS缺点

HTTPS 有很大的优势,但其相对来说,还是存在不足之处的:

  1. HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;
  2. HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
  3. SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
  4. SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。
  5. HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

11 HTTP和HTTPS的区别

面试官问:HTTP和HTTPS的区别?

  • http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 SSL加密传输协议。
  • HTTP协议的默认端口是80,HTTPS的默认端口是443
  • http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
  • https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。

【网络知识】_详解HTTP和HTTPS相关推荐

  1. 网络知识:详解各种路由器组网方法!

    很多朋友可能会问到,关不同网段的两个电脑如何实现互相访问?这个问题通常在企业办公中会遇到,我们经常会遇到企业随着员工或部门的增多,增加了一个路由器,分了两个网段,A子网和B子网处于不同网段,当网络中存 ...

  2. 微信小程序 渲染层网络错误_详解微信小程序「渲染层网络层错误」的解决方法...

    问题描述: 情况是这样的,我需要在小程序中通过image标签显示三张我的图片,毫无疑问,其重点部分肯定在image的src属性上,请看思路分析: 我们可以新建一个专门放图片的文件夹,然后将我们项目所需 ...

  3. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

  4. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

  5. 台式计算机硬件图文详解,[计算机硬件及网络]电脑硬件知识图文详解.pdf

    [计算机硬件及网络]电脑硬件知识图文详解 电脑硬件图文详解(一)构成 开机壳看光光 做为这系列的起头,当然先从最简单的聊起:把机壳侧板打开瞧一下电脑内部. 如果你有兴趣的话,准备一支螺丝起子,不用五分 ...

  6. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

    日常水开篇 自1991年诞生起,Linux已经走过了接近三十年.Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力. 以Linux为基础,也衍生出了各种开源生态,例如网络和存储.而生态离 ...

  7. [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. 【算法知识】详解堆排序算法

    点击蓝色字关注我们! 什么是堆 「堆」首先是一个完全二叉树,「堆」分为「大顶堆」和「小顶堆」: 「大顶堆」 : 每个节点的值大于或等于其左右孩子节点的值,称为大顶堆. 「小顶堆」同理就是每个节点的值小 ...

  9. 【算法知识】详解基数排序算法

    已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 [算法知识]详解快速排序算法 [算法知识]详解归并排序算法 基本思想 基数排序的思想是将整数按位数切 ...

最新文章

  1. 有趣的 Mysql 存储引擎
  2. mysql unix 安装教程_在UNIX系统下安装MySQL_MySQL
  3. python项目实例代码-python开源项目及示例代码
  4. [Docker系列·8] Docker远程接口
  5. [物理学与PDEs]第1章第6节 电磁场的标势与矢势 6.3 例 --- 电偶极辐射
  6. 1104File Space Bitmap Block损坏能修复吗
  7. PL/SQL Developer 导入导出操作
  8. python zen_The Zen of Python
  9. 北理乐学大学计算机实验4,北理乐学C语言答案.docx
  10. matlab卷积不从0开始,matlab 编辑卷积出错
  11. Win10正式版激活方法有哪些?如何激活Win10?
  12. 70.(cesium之家)cesium接入天地图影像与注记(经纬度)
  13. html中的特殊符号表示法
  14. java从键盘读入数据_关于Java中从键盘读入各种数据的方式
  15. C语言程序设计现代方法第二版,第八章课后编程题——第9题生成贯穿10乘10字符组的随机步法
  16. 计算机应用能力提升研修计划,教师信息技术应用能力提升培训个人研修计划.doc...
  17. c# 通过读取Json文件生成HTML页并在浏览器显示
  18. java——html
  19. 计算机专业实习计划包括哪些,计算机专业实习计划.doc
  20. 初级——如何进行Android单元测试

热门文章

  1. vue 自定义指令弹窗鼠标拖拽弹窗表头,弹窗移动
  2. 如何找客户,营销值得学介绍四种方法让你轻松找到客户
  3. 华为手机滚动截屏的2种方法
  4. 网络爬虫--python抓取豆瓣同城北京地区活动信息
  5. Splinter入门(十)Cookies manipulation(Cookies操作)
  6. java.lang.IllegalStateException解决合集
  7. 根据.svg文件借助IconMoon生成字体图标及应用的方法
  8. yolov5 detect报错
  9. oracle for循环遍历数组,foreach循环
  10. JAVA UTC时间和本地时间