Cloud Endpoints: Architectural Overview provides a high-level view of Cloud Endpoints Architecture, and thus, the architecture of my web application.
From the highest level, it's just a client-server architecture with an NGINX HTTP reverse proxy server.
browser <----> ESP <----------> gRPC
client <JSON> proxy <-ProtoBuf-> server
The proxy
and server
run on the same Google Compute Engine virtual machine but in separate Docker containers connected with a Docker bridge network.
The proxy trans-codes between JSON and Protocol Buffers.
When a request originates from the proxy
to the server
, Docker logs show:
call.cc:879] Invalid entry in accept encodingmetadata: 'deflate'. Ignoring.
call.cc:879] Invalid entry in accept encodingmetadata: 'br'. Ignoring.
From MDN web docs for accept-encoding
The Accept-Encoding request HTTP header advertises which content encoding, usually a compression algorithm, the client is able to understand.
deflate
: A compression format using the zlib structure, with the deflate compression algorithm.br
: A compression format using the Brotli algorithm.
From this I assume the ESP is advertising deflate
and br
compression formats, but both are ignored by the gRPC server. I don't recall specifying any compression methods when I built the pulled the ESP or built the gRPC server.
A Google Search yielded only one related issue against a Google run public repo: Invalid entry in accept encoding metadata. The problem there was a mismatch of gPRC library versions.
My gRPC server is installed with
- grpcio-1.10.1
- grpcio-tools-1.10.1
- protobuf-3.5.2.post1
The ESP is a pre-built Docker image (based on NGINX) from https://console.cloud.google.com/gcr/images/endpoints-release/GLOBAL/endpoints-runtime. I'm using tags 1
, 1.15
or 1.15.0
(they all tag the same, latest version).
My gRPC server uses the latest gPRC version (1.10.1), so I'm unsure how there could be a mismatch here?