Httpsとhttp/2の違いを理解しようとしていますか?
Node.js/expressアプリをビルドする場合、何を使用すればよいですか?
Http/2でhttpsを使用できますか?
たぶん、httpsを使用する場合、http/2は同じであるか、httpsが内部でhttp/2を使用するため、http/2は不要ですか?
よくわかりません。
「HTTP 1.1とHTTP 2.0の違い[非公開]」とリンクされていますが、HTTPとHTTP2の違いを理解しています。私はHTTPについて尋ねています[〜#〜] s [〜#〜] and HTTP/2
[〜#〜] http [〜#〜]-クライアント(Webブラウザーなど)がサーバー(Webサーバーなど)にリソースを要求するために使用するプロトコル。
[〜#〜] https [〜#〜]-HTTPを暗号化する方法。基本的に、SSL/TLSを使用して暗号化された形式でHTTPメッセージをラップします。暗号化されていないHTTPでWebサイトが提供されると、WebはますますHTTPSに移行し、Webブラウザはますます多くの警告を出し始めています。特に理由がない限り、今作成するWebサイトでHTTPSを使用してください。
HTTPの詳細については、次をご覧ください。
HTTP/1.1-これは最近まで一般的なHTTP形式でした。これはテキストベースのプロトコルであり、いくつかの非効率性があります-特に典型的なWebページのような多くのリソースを要求する場合。 HTTP/1.1メッセージは、非暗号化(Webサイトアドレスがhttp://で始まる)またはHTTPSで暗号化(Webサイトアドレスがhttps://で始まる)できます。クライアントはURLの先頭を使用して、使用するプロトコルを決定します。通常、指定されていない場合はデフォルトでhttp://が使用されます。
HTTP/2-2015年にリリースされたHTTPの新しいバージョンは、テキストベースのプロトコルからバイナリプロトコルに移行することにより、パフォーマンスの問題の一部に対処します。各バイトは明確に定義されています。これにより、クライアントとサーバーの解析が容易になり、エラーの余地が少なくなり、 多重化 も許可されます。 HTTP/2は、HTTP/1.1と同様に、暗号化されていない(http://)および暗号化された(https://)チャネルで使用できますが、WebブラウザーはHTTPSでのみサポートし、HTTP/1.1またはHTTP /のどちらを使用するかを決定します接続開始時のHTTPSネゴシエーションの一部として2。
執筆時点でHTTP/2はすべてのWebサイトの約3分の1で使用されています 。ただし、すべてのクライアントがHTTP/2をサポートしているわけではないため、可能な場合はHTTP/1.1 over HTTPSおよびHTTP/2 over HTTPSをサポートする必要があります(httpモジュールを使用すると、ノードが自動的にこれを行うと思われます)。 HTTP/1.1がすぐに廃止されるとは思わない。また、暗号化されていないHTTP上でHTTP/1.1をサポートすることを検討してから、HTTPSバージョンにリダイレクトする必要があります(HTTP/1.1またはHTTP/2を適宜使用します)。 Nodeの前にあるApacheやNginxのようなWebサーバーはこれを簡単にします。
HTTP/3-現在開発中のHTTPの次のバージョン。これは、Webサーバーやノードなどの言語で利用できるようになる前に2020年になる可能性がありますが、2019年に完了する予定です。 QUICと呼ばれるUDPベースのトランスポートの上に構築されます(TCP HTTP/1.1およびHTTP/2がベースとするプロトコルではなく)。HTTPSの一部を含みますこのプロトコルでは、HTTP/3はHTTPS経由でのみ使用できます。
要するに、HTTPS経由でHTTP/1.1を使用する必要があり、実装が容易な場合はHTTP/2も考慮する必要があります(まだどこにでもあるとは限りません-しかし、そこに到達している)。
Web開発をしたい場合は、これらのすべてのテクノロジー(まだHTTP/3を除く)をしっかり理解することをお勧めします。それはあなたに代わって立つでしょう。
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)