a year ago
I've been having an issue I can't get to the bottom of, so finally asking here.
Context:
I have one Railway project, with several services: one frontend (NextJS, App Router, mainly SSR), one backend service (Django), a database (postgres)
Frontend tries to connect to the backend via private URL, and falls back to public URL if the initial connection fails (like when in client side, or during build)
Frontend calls various APIs, as you'd expect, APIs return JSON
There is no auth between services
The backend has
django.middleware.gzip.GZipMiddlewareandcorsheaders.middleware.CorsMiddlewareThe frontend has Cloudflare DNS, which I use to manage the domain
I'm using the new proxy
Issue:
I made a change to remove pagination in one of my APIs, and removed the associated pagination logic on the frontend
After deploy, I get the attached error from my frontend during build
Things I've tried:
Calling this API on the cmd line/postman works fine, and I get
Content-Encoding=gzipin the response headersDisabling GZipMiddleware in Django, get the same result
Mocking the response - returning hardcoded JSON - get same issue
When I make the hardcoded JSON smaller, it often works - this makes me think it's a Gzipping issue (which triggers when the response is >200 bytes)
Trying the legacy proxy - same result
Setting
Accept-Encoding=gzip, deflate, brandContent-Type=application/jsonon the request in NextAdding
DEFAULT_RENDERER_CLASSES=rest_framework.renderers.JSONRendererin DjangoPraying
c18400df-5dee-4fe7-bc56-a98db8d475bd
109 Replies
Additional:
Another API is called during build that returns an extremely small response (JSON with ~5 entries) and this works fine.
a year ago
do you have an endpoint i could curl to reproduce this issue?
curl -s -X GET 'https://share-a-podcast-be-prod.up.railway.app/test-new-endpoint/' | jq
a year ago
is that supported to work?
a year ago
json
a year ago
can i have an endpoint that reproduces the issue, im not sure what i should be doing with an enpoint that works fine
yes… I mean that's the issue
The endpoint works fine, every time, when called in curl/postman.
But in build it gives the output I shared in the first post. This is what I can't understand.
a year ago
during build of your FE?
a year ago
how is this url being called?
a year ago
did you say you have disabled GZIP on the BE and still got the same garbage response?
a year ago
is GZIP currently disabled (removed)?
a year ago
lets leave it for now
a year ago
just trying to parse through these logs
a year ago
i dont see content-encoding = gzip anywhere in these FE build logs, does response.headers.entries() strip that out?
take a look at the backend logs - I'm logging the headers on inbound requests:
a year ago
right but content-encoding = gzip should be returned as a response header
a year ago
curl -I "https://share-a-podcast-be-prod.up.railway.app/test-new-endpoint/"
HTTP/1.1 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Cross-Origin-Opener-Policy: same-origin
Date: Wed, 11 Sep 2024 16:31:23 GMT
Referrer-Policy: same-origin
Server: railway-edge
Vary: Accept-Encoding, origin, Cookie
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Railway-Request-Id: nmUVBEMHRwKJVioSmvMM1Q_2020806880misbehaving middleware?
but you said it was the same with the middleware removed?
a year ago
either way, can you disable / remove the gzip middleware for now?
a year ago
for context, curl was showing that it got the gzip response header -
C:\Users\Brody>curl --location -I "https://share-a-podcast-be-prod.up.railway.app/test-new-endpoint/" --header "Accept-Encoding: gzip, deflate, br" --header "Content-Type: application/json"
HTTP/1.1 200 OK
Allow: GET, HEAD, OPTIONS
Content-Encoding: gzip
Content-Length: 826
Content-Type: application/json
Cross-Origin-Opener-Policy: same-origin
Date: Wed, 11 Sep 2024 16:40:05 GMT
Referrer-Policy: same-origin
Server: railway-edge
Vary: Accept-Encoding, origin, Cookie
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Railway-Request-Id: 1bO2oXJ6Sn-rCTujPm4rCw_882434190a year ago
the proxy doesnt touch any of these headers afaik
a year ago
well besides the headers it does touch, you know what i mean lol
btw, I noticed that when I deploy the backend, I have to commit/push to force a rebuild on my frontend, rather than just trigging a deploy from last commit
a year ago
Hello all, we have pushed a change to our proxy, we no longer strip out that header!
a year ago
what happens when you do deploy from last commit?
a year ago
at this time, i dont think so
a year ago
i can confirm with postman the BE response is no longer gzipped, no encoding header and resonse body is larger
a year ago
interesting
a year ago
lets use the private domain then
a year ago
yeah

a year ago
yeah, just trying to move fast here, i will ask next time
didn't remember doing it and I've been battling this for 1.5 days… starting to forget what life was like before this bug
a year ago
oh, it worked…
a year ago
i was kinda hoping it wouldnt
a year ago
exactly
a year ago
hold on
a year ago
not yet please
a year ago
oh wait, this is a production site, can you afford to keep this offline as we debug?
a year ago
are you sure? we could spin up a dev env in railway
a year ago
alright, sounds good, but yeah lets keep gzip off for now, it eliminates variables
I would like to remove the hard-coded response, and replace with DB query
a year ago
yeah thats fine
a year ago
well my fridge doesn't cool anymore, I gotta go AFK while I transfer everything to another fridge outside
a year ago
they didn't before?
ah, it was just one of many things I've been trying to debug the issue - hardcoding the json response in my backend
a year ago
okay I have some more things I'd like to try when I'm back
where are we on the fridge outage, Brody? P1? Users affected? Is there an incident channel we should join?
a year ago
there's an incident? I thought we left off in a working state with the new builder?
a year ago
oh I thought you were serious 😅
a year ago
I thought you were like, screw your fridge, help me with this gzip stuff
a year ago
I'll be back at the computer as soon as I finish eating and moving the food to the other fridge
a year ago
alright, i am back