我试图了解https和http / 2之间的区别是什么?
如果我要构建node.js / express应用,应该使用什么?
我可以将https与http / 2一起使用吗?
也许如果我使用https,我不需要http / 2,因为它是相同的,还是https在后台使用了http / 2?
我很困惑。
有人链接到我“ HTTP 1.1和HTTP 2.0之间的差异[关闭]”,但我了解HTTP和HTTP2之间的差异。我在问HTTP S 和HTTP / 2
答案 0 :(得分:1)
HTTP -客户端(例如Web浏览器)用来从服务器(例如Web服务器)请求资源的协议。
HTTPS -一种加密HTTP的方式。它基本上使用SSL / TLS将HTTP消息包装为加密格式。当通过未加密的HTTP为网站提供服务时,Web越来越趋向于HTTPS,并且Web浏览器开始发出越来越多的警告。除非您有充分的理由,否则请使用HTTPS和您现在创建的任何网站。
深入了解HTTP,我们有:
HTTP / 1.1 -当前HTTP的普遍格式。这是一个基于文本的协议,并且效率低下-尤其是在请求大量资源(例如典型的网页)时。 HTTP / 1.1消息可以不加密(网站地址通常以http://开头),也可以使用HTTPS加密(网站地址通常以https://开头)。客户端使用URL的开头来决定使用哪个。
HTTP / 2 -2015年发布的HTTP的新版本,通过从基于文本的协议转移到明确定义每个字节的二进制协议,解决了一些性能问题。对于客户端和服务器而言,这更容易解析,为错误留出了更少的空间,并且还允许multiplexing。 HTTP / 2与HTTP / 1.1一样,可通过未加密(http://)和加密(https://)通道使用,但是Web浏览器仅通过HTTPS支持它,在此情况下,是决定使用HTTP / 1.1还是HTTP / 2作为连接开始时HTTPS协商的一部分。
HTTP/2 is used by about a third of all websites at the time of writing。但是,并非所有客户端都支持HTTP / 2,因此您应尽可能支持HTTPS上的HTTP / 1.1和HTTPS上的HTTP / 2(我相信节点在使用http模块时会自动为您执行此操作)。我认为HTTP / 1.1不会在不久的将来淘汰。您还应该考虑通过未加密的HTTP支持HTTP / 1.1,然后重定向到HTTPS版本(然后将视情况使用HTTP / 1.1或HTTP / 2)。 Node前面的Web服务器(如Apache或Nginx)使此操作变得容易。
HTTP / 3 -HTTP的下一版本,目前正在开发中。预计将在2019年完成,但可能要到2020年才能在Web服务器和节点等语言中看到。它将建立在称为QUIC的基于UDP的传输之上(而不是HTTP / 1.1和HTTP / 2所基于的基于TCP的协议)。该协议将在协议中包含HTTPS的一部分,因此HTTP / 3仅可通过HTTPS使用。
简而言之,您应该在HTTPS上使用HTTP / 1.1,并且如果易于实现(不总是可能还不很普遍-可以实现),还应该考虑HTTP / 2,将来您可能会使用HTTP / 3。
如果您想进行Web开发,我建议您对所有这些技术(到目前为止可能还没有HTTP / 3)有深入的了解。它将使您站稳脚跟。
答案 1 :(得分:0)
所有现代浏览器都仅通过安全连接支持HTTP2。
因此,如果要使用http / 2,则需要使用https。
我找到了一种使用fastify的方法,如下所示:
'use strict'
const fs = require('fs')
const path = require('path')
const fastify = require('fastify')({
http2: true,
https: {
key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')),
cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert'))
}
})
fastify.get('/', function (request, reply) {
reply.code(200).send({ hello: 'world' })
})
fastify.listen(3000)