-
Notifications
You must be signed in to change notification settings - Fork 72
Description
This might be how it should work, but let me confirm.
c.req.url
is always http, even on https requests:
app.get('/foo', c => {
// Always http, in prod too
console.log(c.req.url)
console.log(c.req.raw.url)
return c.text('OK')
})
I'm on fly.io, basically a proxy that handles my ssl (plus other things). But in Hono I always get the url as http, and my JWT verification fails. It's easy to fix but I somehow expected the proto to be the same as the original request.
Here's my serve:
serve({
fetch: app.fetch,
port: Number(PORT),
})
More details on my use-case
This is specifically a request from QStash. It's a queue thing, works something like this:
curl -XPOST \
-H 'Authorization: Bearer <QSTASH_TOKEN>' \
-H "Content-type: application/json" \
-d '{ "hello": "world" }' \
'https://qstash.upstash.io/v2/publish/https://example.com/foo'
Notice the url after the QStash endpoint, that's the callback URL that Hono is listening to, and which I've set it to https. Here's the headers QStash sends:
{
'accept-encoding': 'gzip',
authorization: 'Basic xxx',
'content-length': '203',
'content-type': 'application/json',
host: 'example.com/foo',
'upstash-caller-ip': 'xxx.xx.xx.xx',
'upstash-message-id': 'msg_xxx',
'upstash-retried': '0',
'upstash-signature': 'xxx',
'user-agent': 'Upstash-QStash',
'x-forwarded-for': 'x.xxx.xxx.xxx',
'x-forwarded-host': 'example.com/foo',
'x-forwarded-proto': 'https'
}
I'm guessing it would be https if I used the https server like shown in the docs:
import { createServer } from 'node:https'
serve({
fetch: app.fetch,
createServer: createServer,
serverOptions: { /* keys */},
})
But I don't need to because of fly.
Correct me if I'm mistaken but it feels like Hono should use x-forwarded-proto
to set the correct proto?