express.js에서 요청을 시작한 도메인을 얻으려면 어떻게해야합니까?


84

나는 express.js를 사용하고 있으며 호출을 시작하는 도메인을 알아야합니다. 이것은 간단한 코드입니다

app.get(
    '/verify_license_key.json',
    function( req, res ) {
        // do something

req또는 res개체 에서 도메인을 가져 오려면 어떻게합니까 ? somesite.com 또는 someothersite.com에서 API를 호출했는지 알아야합니다. 나는 모두의 console.dir 일을 시도 req하고 res있지만, 나 또한 문서를 읽을 수 있지만 그것은 나에게 아무런 도움을주지 않았다, 거기에서 아무 생각 없어.


1
시도 : req.host또는 req.get('host') 문서 표현
dc5 2013-08-28

2
node.js : req.headers["x-forwarded-for"] || req.connection.remoteAddress x-forwarded-for 는 프록시,로드 밸런서 뒤에있는 기반을 커버합니다 ...
Eat at Joes

이 경고가 표시됩니다. express deprecated req.host : 대신 req.hostname을 사용하세요. index.js : 20 : 8
Adam F

답변:


142

HOST헤더 에서 검색해야합니다 .

var host = req.get('host');

HTTP 1.0에서는 선택 사항이지만 1.1에서는 필요합니다. 또한 앱은 항상 자체 요구 사항을 부과 할 수 있습니다.


이것이 cross-origin 요청 을 지원하는 경우 대신 Origin헤더 를 사용합니다 .

var origin = req.get('origin');

일부 교차 출처 요청에는 " preflight "요청을 통한 유효성 검사가 필요합니다 .

req.options('/route', function (req, res) {
    var origin = req.get('origin');
    // ...
});

클라이언트의 IP를 찾는 경우 다음을 사용하여 검색 할 수 있습니다.

var userIP = req.socket.remoteAddress;

서버가 프록시 뒤에있는 경우 프록시의 IP를 제공 할 수 있습니다. 사용자의 IP를 얻을 수 있는지 여부는 프록시가 전달하는 정보에 따라 다릅니다. 그러나 일반적으로 헤더에도 있습니다.


1
하지만 이것은 나에게 API의 호스트를 제공하지 않습니까? 로컬에서 이것을하고 있고 api.time.ly가 127.0.0.1로 해결되도록 설정되어 있고 내가 만드는 호출은 localhost에서,하지만 내가 사용하는 경우 host는 "api.time.ly"입니다. 나를 호출하는 도메인을 알아야합니다. 라이브 사이트에서 테스트하겠습니다.
Nicola Peluchetti 2013 년

1
@NicolaPeluchetti " 나를 부르는 도메인 "이 의미하는 바를 이해하지 못하는 것 같습니다 . HTTP 클라이언트는 일반적으로 요청에 자체 호스트 이름을 제공하지 않습니다. 이입니다 CORS ?
Jonathan Lonowski

api.time.ly에있는 중앙 API가 있습니다. 이 API는 워드 프레스 플러그인을 설치하는 다른 클라이언트 웹 사이트에서 호출됩니다. 그래서 우리는 church1.comsauna1.com 이 우리의 API를 호출하도록 할 수 있습니다 . API에서 church1.com 또는 sauna1.com 에서 전화를 걸면 얻을 수 있습니까? 헤더를 봤는데 'user-agent': 'WordPress/3.6; http://localhost/wordpress_clean'파싱해야하나요?
Nicola Peluchetti 2013 년

Domain이 전달되지 않으면 문제가되지 않습니다. 당연히 API 호출에 추가 할 수 있습니다.
Nicola Peluchetti 2013 년

@NicolaPeluchetti 사용자 에이전트를 분할 및 구문 분석 하거나 요청에서 데이터로 요구할 수 있습니다. 그러나 OAuth 와 같은 것이 클라이언트 식별에 더 적합하다고 말하고 싶습니다 .
Jonathan Lonowski는

38

대신에:

var host = req.get('host');
var origin = req.get('origin');

다음을 사용할 수도 있습니다.

var host = req.headers.host;
var origin = req.headers.origin;

8
점점undefined
Himanshu 반살

나에게 127.0.0.1:3000 제공
user1709076

8

Express 4.x에서는 req.hostname포트없이 도메인 이름을 반환 하는를 사용할 수 있습니다 . 즉 :

// Host: "example.com:3000"
req.hostname
// => "example.com"

참조 : http://expressjs.com/en/4x/api.html#req.hostname


8
요청을 받고있는 서버의 호스트 이름을 반환합니다. 이 경우에만 작동합니다 동일한 서버 및 발신에 API와 웹 사이트를 실행하고 파티를 수신하는 호스트와 동일한 호스트이다.
폴 T. Rawkeen

0

최근에 'Origin'요청 헤더를 가져 오는 데 문제가 발생하여이 질문을 발견했습니다. 그러나 결과와 상당히 혼란스럽고 req.get('host')사용되지 않으므로 Undefined. 사용하다,

    req.header('Origin');
    req.header('Host');
    // this method can be used to access other request headers like, 'Referer', 'User-Agent' etc.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.