Облачная функция Google вводит заголовок «Cache-Control: Private» в ответ на пользовательский агент Bingbot независимо от кода функции - PullRequest
0 голосов
/ 21 мая 2019

У нас есть Google Cloud Function в прямом эфире, которая, по сути, возвращает нам правильные перенаправления с ныне не существующего сайта, используя очень простой скрипт Python, поддерживаемый CDN, который кэширует ответы, чтобы избежать болеенеобходимо.

У нас нет никаких проблем с тем, как работает сама функция, однако мы заметили, что в ответ на передачу определенного пользовательского агента (Bingbot) с запросом, Google Cloud Function вводитзаголовок Cache-Control: Private в ответе, независимый от кода функции (который не указывает заголовок Cache-Control внутри ответа 301, который он отправляет обратно).Это приводит к тому, что все запросы от Bingbots каждый раз передаются на сервер, в результате чего использование нашей облачной функции оказывается намного выше, чем обычно, и влечет за собой более высокие затраты.

Это также вызывает изменения в Content and Transfer Encoding, хотя нас это меньше беспокоит.

Мы проверили это, удалив заголовок User-Agent на уровне CDN перед запросом к бэкэнду (функция) и подтвердили, что без заголовков Bingbot мы получаем 0постоянные пассы;после повторного разрешения заголовка воссоздана проблема с гораздо большим количеством проходов, чем мы должны видеть.

На этом этапе мы начали удалять все заголовки User-Agent, что решило проблему на мелкой основе, но мыобеспокоен тем, что это недокументированное поведение, и у нас нет информации о том, когда облачные функции могут в других обстоятельствах вводить или манипулировать заголовками ответа в ответ на заголовки запроса.

Чтобы подтвердить, что это не происходит из нашего скрипта Python, соответствующаячасть, возвращающая наш ответ, выглядит следующим образом:

try:
     return flask.redirect(redirect_dict[request.path], code=301)
except:
     return flask.redirect(os.environ.get('FALLBACK_URL'), code=301)

Завиток с Bingbot UA (фактический URL и хост скрыты):

curl -v -X GET $function/$path -H 'User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)' -H $host

И соответствующий ответ:

< HTTP/1.1 301 Moved Permanently
< Content-Type: text/html; charset=utf-8
< Function-Execution-Id: jzlrm3k4ndhv
< Location: $redirectURL
< X-Cloud-Trace-Context: 83841aa8390d4ea4c1c8349c3aca21be
< Content-Encoding: gzip
< Date: Mon, 20 May 2019 13:02:22 GMT
< Server: Google Frontend
< Cache-Control: private
< Alt-Svc: quic=":443"; ma=2592000; v="46,44,43,39"
< Transfer-Encoding: chunked

Без Bingbot UA ответ будет таким:

< HTTP/1.1 301 Moved Permanently
< Content-Type: text/html; charset=utf-8
< Function-Execution-Id: t8frc9wsdvzp
< Location: $redirectURL
< X-Cloud-Trace-Context: 1f817eecdc84ad4a7542fba5898caf50;o=1
< Date: Mon, 20 May 2019 13:02:37 GMT
< Server: Google Frontend
< Content-Length: 319
< Alt-Svc: quic=":443"; ma=2592000; v="46,44,43,39"

Мы ожидаем, что ответы будут такими же, поскольку мы не вводим какие-либо заголовки управления кэшем в ответ на запросы.Очевидно, что изменение пользовательского агента заставляет облачные функции Google вставлять дополнительные заголовки, изменять кодировку и иным образом преобразовывать ответы.Проблема в том, что нет документации или другой информации об этом (если я не пропустил это).Если бы кто-то мог указать мне какое-либо объяснение или кто-то из Google мог бы объяснить, почему это происходит, и любые другие параметры, которые мы могли бы использовать, чтобы предотвратить это, это было бы идеальным результатом здесь.

...