Добавление заголовков HSTS в app.yaml (Google App Engine)

У меня есть следующий раздел обработчиков в моем app.yaml:

handlers:
  - url: /(robots\.txt|sitemap\.xml)
    static_files: \1
    upload: (robots\.txt|sitemap\.xml)
    secure: always
    http_headers:
      Strict-Transport-Security: 'max-age=63072000; includeSubDomains; preload'
  - url: /.*
    script: main.app
    secure: always
    http_headers:
      Strict-Transport-Security: 'max-age=63072000; includeSubDomains; preload'

а другой поддомен, обслуживаемый другим подмодулем (static.yaml), имеет следующее:

handlers:
  - url: /
    static_dir: files
    secure: always
    http_headers:
      Access-Control-Allow-Origin: '*'
      Strict-Transport-Security: 'max-age=63072000; preload'

Я смог развернуть static.yaml без каких-либо проблем с appengine:

$ appcfg.py update static.yaml
12:48 PM Host: appengine.google.com
12:48 PM Application: XXXXXX; module: static; version: 1
12:48 PM
Starting update of app: XXXXXXXX, module: static, version: 1
12:48 PM Getting current resource limits.
12:48 PM Scanning files on local disk.
[...]
[...]
12:49 PM Checking if updated app version is serving.
12:49 PM Completed update of app: XXXXXX, module: static, version: 1

тогда как, когда я пытаюсь обновить конфигурацию app.yaml, я получаю:

$ appcfg.py update app.yaml
12:48 PM Host: appengine.google.com
Usage: appcfg.py [options] update <directory> | [file, ...]

appcfg.py: error: Error parsing .\app.yaml: Unexpected attribute "http_headers" for mapping type script.
  in ".\app.yaml", line 31, column 1.

Я понимаю, что это означает, что мне придется обрабатывать конфигурацию HSTS в моем скрипте Python. Но у меня ~10 обработчиков в интерфейсе main.app. Вместо обновления каждого из них для добавления заголовка STS есть ли альтернатива сделать это на самом уровне app.yaml?

В app.yaml справочнике по GAE нет упоминания об ограничении http_header директива в сопоставлении типов script.


person hjpotter92    schedule 17.09.2016    source источник


Ответы (3)


Вы можете использовать app.yaml для управления заголовками HTTP. для статических обработчиков файлов, а не динамических обработчиков. Вам нужно будет установить заголовок в коде вашего приложения.

person Shivam    schedule 25.08.2017
comment
Это подтверждается базой знаний: чтобы добавить заголовки HTTP Strict-Transport-Security (HSTS) в ваше приложение, вы должны реализовать заголовки в коде вашего приложения, а не в файле конфигурации вашего приложения — cloud.google.com/appengine/kb - person culix; 28.12.2019

В документе: https://cloud.google.com/appengine/docs/flexible/nodejs/using-custom-domains-and-ssl

Вы не можете использовать заголовки Strict-Transport-Security, если ваш домен не внесен в белый список. Чтобы добавить свой домен в белый список, свяжитесь с ...

ОБНОВЛЕНИЕ

С 2018 года личные домены не нужно вносить в белый список. Другими словами, заголовки HSTS больше не удаляются.

person Yao Li    schedule 24.05.2017
comment
Я думаю, что это устарело. В этом документе больше не упоминается белый список. - person gaefan; 26.10.2017
comment
Упоминание осталось, ссылка изменилась: cloud.google.com/appengine/docs/flexible/nodejs/ - person dmitrych; 15.11.2017

Сегодня я просматривал заголовки http в app.yaml и увидел это. Похоже, это связано с вашей проблемой.

Кроме того, заголовок Strict-Transport-Security удаляется из ответов, отправленных с любых доменов, кроме *.appspot.com.

https://cloud.google.com/appengine/docs/python/how-requests-are-handled#Python_Responses

person George Bittmann    schedule 07.12.2016