web-dev-qa-db-ja.com

httpSとhttp / 2の違いは何ですか?

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

6
RTW

[〜#〜] 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を除く)をしっかり理解することをお勧めします。それはあなたに代わって立つでしょう。

9
Barry Pollard

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)
0
RTW