Как заставить локальный сервер функций Azure использовать HTTP 2.0 вместо 1.1?

Я использую azure-cli v 2.8.0 с Python 3.8 на Mac High Sierra. У меня есть приложение-функция, которое я запускаю локально, используя

func start

Мои функции определены с помощью базовой структуры папок ...

my-func/__init__.py
my-func/function.json

в котором файл function.json выглядит как

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "post",
        "get"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

У меня есть файл host.json, который выглядит как

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  }
}

Не уверен, как / где указать, что я хочу использовать протокол HTTP 2.0, но это будет отображаться из запросов к моему локальному серверу из приложения Angular, которое я использую http 1.1, поскольку инспектор сообщает мне

введите описание изображения здесь

Как заставить мой локальный функциональный сервер использовать HTTP 2.0?


person Dave    schedule 13.11.2020    source источник


Ответы (1)


Это не представляется возможным: поддержка HTTP / 2 - это функция, предоставляемая сетевой инфраструктурой функций Azure в Azure, и она недоступна локально.

См. эту проблему на Github с основными инструментами функций Azure. репозиторий: разработчик не дает ответа, но и не говорит ничего вопреки мнению автора.

Кроме того, как вы можете видеть в страница документации по функциям Azure, когда они говорят о различных вариантах, поддерживаемых для локального запуска функций, нет возможности указать поддержку HTTP / 2.

Если вы посмотрите на исходный код StartHostAction.cs в Репозиторий Github основных инструментов Azure Functions, если вы используете HTTPS, который является поддерживаемым вариантом, кажется, что внутри него будет включен Krestrel. Но даже в этом случае, в предположении существования какого-либо свойства конфигурации среды или чего-то подобного для включения этой функции, HTTP / 2 по-прежнему не поддерживается в MacOS.

Возможно, одной из возможностей может быть реализация какого-то прокси, поддерживающего HTTP / 2 между вашим приложением Angular и вашими функциями, и маршрутизация трафика через него.

Например, рассмотрите возможность использования https://nghttp2.org/documentation/nghttpx-howto.html.

Например, вы можете заставить nghttpx прослушивать запросы HTTP / 2 на порту 8443, и, если ваши функции работают на порту 7071, запускайте nghttpx из командной строки, как это (пример представляет собой просто адаптацию того, что предоставлено в документации библиотеки) :

nghttpx -f0.0.0.0,8443 -b127.0.0.1,7071 /path/to/server.key /path/to/server.crt

Вы можете установить его с помощью brew или собрать его из исходного кода.

person jccampanero    schedule 15.11.2020
comment
@Dave Я предлагаю вам новый вариант, основанный на nghttp2 и nghttpx. Я надеюсь, что это помогает. - person jccampanero; 21.11.2020