Кэши Firebase кешируют запросы Google Cloud Run - PullRequest
0 голосов
/ 06 ноября 2019

Итак, я экспериментирую с хостингом Firebase и Google Cloud Run для веб-приложения.

Я получил статический SPA, развернутый на хостинге firebase, и правило перезаписи, чтобы направлять все запросы, начиная с / api, на мойСлужба Google Cloud Run.

Мой файл firebase.json выглядит следующим образом:

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**/api/**",
        "run": {
          "serviceId": "myservice-api",  
          "region": "europe-west1"     
        }
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

Сначала казалось, что все работает должным образом, все запросы / api были обработаны моим облаком GoogleЗапустите сервис. Однако я начал замечать странное поведение для некоторых запросов, поскольку ответ, возвращаемый сервером, оказался совсем не таким, как я ожидал. Посмотрев немного подробнее, я заметил, что эти запросы не отображаются в журналах моей службы Cloud Run.

Поэтому я проверил заголовки ответов, полученные браузером, и заметил, что ответ приходит от Firebase. кэш вместо службы Cloud Run:

accept-ranges: bytes
access-control-allow-origin: *
content-length: 245
content-type: application/json
date: Wed, 06 Nov 2019 11:24:32 GMT
server: Google Frontend
status: 200
vary: x-fh-requested-host, accept-encoding
x-cache: HIT
x-cache-hits: 5
x-served-by: cache-cdg20776-CDG

Документация гласит:

Однако, поскольку службы Cloud Functions и Cloud Run генерируют контент динамически,содержание для данного URL-адреса может варьироваться в зависимости от таких факторов, как ввод данных пользователем или идентификация пользователя. В связи с этим запросы, которые обрабатываются внутренним кодом, по умолчанию не кэшируются в CDN.

Так что я бы ожидал, что ни один из запросов, идущих в / api, не будет кэширован, никогда. Что-то не так в том, как я определил свои правила перезаписи, или я должен рассматривать это как проблему в том, как хостинг Firebase обрабатывает маршрутизацию Cloud Run?

UPDATE

Здесьэто клиентский запрос в деталях, как показано в инструментах разработчика Chrome:

Request URL: https://myproject.web.app/api/users/me
Request Method: GET

Headers:
:authority: myproject.web.app
:method: GET
:path: /api/users/me
:scheme: https
accept: application/json;charset=UTF-8
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,fr;q=0.8
authorization: Bearer xxx
cookie: G_ENABLED_IDPS=google; G_AUTHUSER_H=0
referer: https://myproject.web.app/auth/login/
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36

Запрос возвращает данные JSON, вот заголовки ответа, возвращаемые серверной частью при фактической обработке Cloud Run:

content-type: application/json
access-control-allow-origin: *
X-Cloud-Trace-Context: eeb4c0dbd22dd46f3c42fbe0b85b6420;o=1
Date: Wed, 06 Nov 2019 11:24:26 GMT
Server: Google Frontend
Content-Length: 240

Таким образом, сервер не устанавливает специальный заголовок, указывающий, что ответ должен кэшироваться.

...