본문 바로가기

알아두면 좋은 IT 지식/Network

HTTP HEADER HOST와 실제 호출 주소가 다르다면? (CORS와는 다른 문제)

HTTP/1.1 부터 필수값으로 지정이 되어 HTTP 프로토콜 헤더 중 유일한 필수값인 HOST

일반적으로 자동으로 채워지는 헤더이기 때문에 크게 신경을 안쓰는 값이지만 서버에서 서비스를 찾아가는 중요한 정보로 쓰이기 때문에 정확한 개념을 알아 둘 필요가 있다.

하나의 IP주소가 여러개의 도메인을 사용하는 경우 HOST에 도메인명과 포트를 입력함으로써 같은 IP를 호출하면서 원하는 도메인(서비스)를 정확하게 찾아갈 수 있다.

 

Client에서 요청한 서비스를 Server에서 찾는 과정은 크게 아래 두 단계로 나눌 수 있다.

  1. 요청 주소를 통해 서버에 접속한다.
  2. 서버는 요청받은 정보와 일치하는 서비스를 찾아서 실행한다.

이 때 2번 단계에서  요청받은 정보 중 서비스를 찾기 위해서 사용하는 정보는 Port와 Path 두 가지이고 해당 정보를 가져오기 위해서 아래 메소드들을 사용한다. (Java기준)

HttpServletRequest req;

int Port = req.getServerPort();
String Path = req.getContextPath() + req.getServletPath() + req.PathInfo();

 

이 때 getServerPort() 함수에서 참조하는 값이 바로 HTTP 헤더인 HOST의 포트이다.

아마도 프로그램을 코딩할 때 포트정보를 통해서 서비스를 찾아야 한다면 이 메소드를 사용할 것이고, 다른 언어나 프로그램도 동일할 것이다.

 

즉, 서버에 접속 후 요청 서비스를 찾아갈 때에는 클라이언트가 호출한 주소가 아닌 HTTP 헤더의 HOST에 명시된 포트정보를 사용한다는 것이다.

물론 일반적으로는 호출 주소와 HTTP헤더 HOST값이 동일한 것이 정상이다.

하지만 의도적으로 혹은 의도하지는 않았지만 웹서버나 프록시서버 등을 통하면서 이 두개의 값이 달라진 경우 주의가 필요하다.