2 years 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.CorsMiddleware - The 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 headers - Disabling 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 Next - Adding
DEFAULT_RENDERER_CLASSES=rest_framework.renderers.JSONRendererin Django - Praying
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.
2 years 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
2 years ago
is that supported to work?
2 years ago
json
2 years 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.
2 years ago
during build of your FE?
2 years ago
how is this url being called?
2 years ago
did you say you have disabled GZIP on the BE and still got the same garbage response?
2 years ago
is GZIP currently disabled (removed)?
2 years ago
lets leave it for now
2 years ago
just trying to parse through these logs
2 years 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:
2 years ago
right but content-encoding = gzip should be returned as a response header
2 years 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?
2 years ago
either way, can you disable / remove the gzip middleware for now?
2 years 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_882434190this is what led me to think it might be something to do with the proxy
2 years ago
the proxy doesnt touch any of these headers afaik
2 years 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
2 years ago
Hello all, we have pushed a change to our proxy, we no longer strip out that header!
2 years ago
what happens when you do deploy from last commit?
2 years ago
at this time, i dont think so
2 years ago
i can confirm with postman the BE response is no longer gzipped, no encoding header and resonse body is larger
2 years ago
interesting
2 years ago
lets use the private domain then
2 years ago
yeah

2 years 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
2 years ago
oh, it worked...
2 years ago
i was kinda hoping it wouldnt
2 years ago
exactly
2 years ago
hold on
2 years ago
not yet please
2 years ago
oh wait, this is a production site, can you afford to keep this offline as we debug?
2 years ago
are you sure? we could spin up a dev env in railway
2 years 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
2 years ago
yeah thats fine
2 years ago
well my fridge doesn't cool anymore, I gotta go AFK while I transfer everything to another fridge outside
2 years 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
was looking for special characters/fixing the size of the repsonse, etc
2 years 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?
2 years ago
there's an incident? I thought we left off in a working state with the new builder?
2 years ago
oh I thought you were serious 😅
2 years ago
I thought you were like, screw your fridge, help me with this gzip stuff
2 years ago
I'll be back at the computer as soon as I finish eating and moving the food to the other fridge
2 years ago
alright, i am back