Para construir correctamente mis direcciones URL en mis mapas de sitio xml y fuentes rss, quiero determinar si la página web se sirve actualmente en http o https, por lo que también funciona localmente en desarrollo.
export default function handler(req, res) { const host = req.headers.host; const proto = req.connection.encrypted ? "https" : "http"; //construct url for xml sitemaps } Sin embargo, con el código anterior también en Vercel, todavía se muestra que se sirve a través de http . Espero que se ejecute como https . ¿Hay una mejor manera de averiguar http vs https ?
Como las rutas api de Next.js se ejecutan detrás de un proxy que se descarga a http, el protocolo es http .
Al cambiar el código a lo siguiente, pude verificar primero en qué protocolo se ejecuta el proxy.
const proto = req.headers["x-forwarded-proto"];Sin embargo, esto romperá la cosa en el desarrollo donde no se ejecuta detrás de un proxy, o una forma diferente de implementar la solución que también podría no involucrar un proxy. Para admitir ambos casos de uso, finalmente terminé con el siguiente código.
const proto = req.headers["x-forwarded-proto"] || req.connection.encrypted ? "https" : "http"; Siempre que el encabezado x-forwarded-proto no esté presente ( undefined ), recurrimos a req.connection.encrypted para determinar si debemos servir en http o en https .
Ahora funciona tanto en localhost como en una implementación de Vercel.