В чем разница между httpS и http / 2? - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь понять, в чем разница между https и http / 2?

Если я собираюсь создать приложение node.js / express, что мне следует использовать?

Могу ли я использовать https с http / 2?

Может быть, если я использую https, мне не нужен http / 2, потому что он тот же или https использует http / 2 под капотом?

IЯ в замешательстве.

Кто-то связан со мной "разница между HTTP 1.1 и HTTP 2.0 [закрыто]", но я понимаю разницу между HTTP и HTTP2.Я спрашиваю о HTTP S и HTTP / 2

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

HTTP - протокол, используемый клиентами (например, веб-браузерами) для запроса ресурсов с серверов (например, веб-серверов).

HTTPS - способ шифрованияHTTP.Он в основном оборачивает HTTP-сообщения в зашифрованном формате с использованием SSL / TLS.Интернет все больше и больше движется к HTTPS, и веб-браузеры начинают все больше и больше предупреждать, когда веб-сайт обслуживается по незашифрованному HTTP.Если у вас нет веских причин использовать HTTPS и любые веб-сайты, которые вы создаете сейчас.

Копаясь в HTTP, у нас есть еще:

HTTP / 1.1 - распространенный формат HTTPв настоящий момент.Это текстовый протокол, в котором есть некоторые недостатки, особенно при запросе большого количества ресурсов, таких как обычная веб-страница.Сообщения HTTP / 1.1 могут быть незашифрованы (где адрес веб-сайта обычно начинается http://) или шифруются с помощью HTTPS (где адрес веб-сайта обычно начинается https://). Клиент использовал начало URL-адреса, чтобы решить, какой из них использовать.

HTTP / 2 - новая версия HTTP, выпущенная в 2015 году, которая устраняет некоторые проблемы с производительностью, переходя от текстового протокола к двоичному протоколу, где каждый байт четко определен.для клиентов и серверов оставляет меньше места для ошибок, а также позволяет мультиплексировать . HTTP / 2, как и HTTP / 1.1, доступен через незашифрованные (http://) и зашифрованные (https://) каналы), но веб-браузеры поддерживают толькоэто через HTTPS, где решено, использовать ли HTTP / 1.1 или HTTP / 2 как часть HTTPS-согласования в начале соединения.

HTTP / 2 используется примерно третьювсе сайты на момент написания . Однако не все клиенты поддерживают HTTP / 2, поэтому вы должны поддерживать HTTP / 1.1 через HTTPS и HTTP / 2 over HTTPS, где это возможно (я полагаю, что узел автоматически делает это за вас при использовании модуля http).Я не верю, что HTTP / 1.1 будет удален в ближайшее время.Вам также следует рассмотреть возможность поддержки HTTP / 1.1 поверх незашифрованного HTTP и затем перенаправить на версию HTTPS (которая затем будет использовать HTTP / 1.1 или HTTP / 2 в зависимости от ситуации).Веб-сервер, такой как Apache или Nginx перед Node, облегчает эту задачу.

HTTP / 3 - следующая версия HTTP, находящаяся в стадии разработки.Ожидается, что он будет завершен в 2019 году, хотя, скорее всего, будет 2020, когда вы увидите это доступным на веб-серверах и языках, таких как узел.Он будет построен поверх транспортного протокола UDP, называемого QUIC (а не протокола TCP, на котором основаны HTTP / 1.1 и HTTP / 2).Он будет включать часть протокола HTTPS в протокол, поэтому HTTP / 3 будет доступен только через HTTPS.

Короче говоря, вы должны использовать HTTP / 1.1 поверх HTTPS, также следует рассмотреть HTTP / 2, если его легко реализовать (невсегда возможно, хотя и не совсем вездесуще - но получается) и в будущем вы, возможно, будете использовать HTTP / 3.

Я предлагаю вам получить четкое представление обо всех этих технологиях (за исключением, может быть, HTTP / 3 только сейчас)если вы хотите заняться веб-разработкой.Это поможет вам.

0 голосов
/ 27 ноября 2018

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)
...