L'URL completo non è memorizzato da qualche parte è possibile ottenerlo. È necessario crearlo autonomamente dalle parti:
const url = request.connection.info.protocol + '://' + request.info.host + request.url.path
;
Anche se può sembrare un gioco da ragazzi, ha senso se ci si pensa perché non esiste un URL originale, non modificato, non modificato. La richiesta HTTP che va oltre il filo non contiene l'URL come digitato nella barra degli indirizzi del browser per esempio:
GET /hello?a=1&b=2 HTTP/1.1 // request.url.path
Host: localhost:4000 // request.info.host
Connection: keep-alive
Accept-Encoding: gzip, deflate, sdch
...
E si sa solo il protocollo in base al fatto la connessione al server Hapi è in modalità TLS o no (request.connection.info.protocol
).
cose di essere a conoscenza di
Se si seleziona uno:
request.connection.info.uri
o request.server.info.uri
l'hostname riportato sarà il nome host della macchina reale che il server è in esecuzione (la uscita di hostname
su * nix). Se si desidera che l'host effettivo della persona digitato nel browser (che potrebbe essere diverso) è necessario controllare request.info.host
che viene analizzato dal intestazione host della richiesta HTTP)
Proxy e X-Forwarded-Proto intestazione
Se la tua richiesta è passata attraverso un proxy (i)/load balancers/terminatori HTTPS, è possibile che qualche parte del traffico HTTPS sia terminato e che sia stato inviato al tuo server su una connessione HTTP, in questo caso dovrai usare il valore dell'intestazione x-forwarded-proto
se è presente:
const url = (request.headers['x-forwarded-proto'] || request.connection.info.protocol) + '://' + request.info.host + request.url.path
;
con stringhe di modello:
const url = `${request.headers['x-forwarded-proto'] || request.connection.info.protocol}://${request.info.host}${request.url.path}`;
fonte
2015-08-05 19:55:58
Buon punto sull'URL originale e sulla richiesta HTTP non elaborata. – gilly3
'request.connection.info.protocol' non è la soluzione migliore. Se hai bisogno di usare meglio il protocollo 'request.headers ['x-forwarded-proto']' – Petroff
@Petroff ringrazia, aggiorna la mia risposta con una nota sui proxy. –