새소식

기술 습관/Javascript

[Node.js/http] http response.writeHead()의 인자값들

  • -

http 통신 할 때 항상 이런것들이 있구나~ 하고 어렴풋하게 인지만 하고 넘어갔는데, 해당 메서드의 필요로 하는 인자값이 왜 필요로 하는지 등을 짚고 넘어가지 않으면 기억에 오래 남지 않는 것 같아서 기본적인 것들은 숙지해두자는 취지로, 오늘은 Node.js에서 기본으로 제공되는 http response.writeHead()에 대한 간략한 공부를 해보고 넘어가겠다.

response.writeHead(statusCode, headers)

  • statusCode : http 통신 후 받은 response의 상태코드를 특정. 서버로부터 특정한 상태코드를 받으면 어떤 식으로 반응할 것이다. 라고 했을 때 특정한 상태코드 중 '어떤 것' 에 대한 정의를 하는 파라미터
      Status Code 막간 상식  
      2XX : Successful Res  
      4XX : Client Err Res  
      400 : Bad Request 잘못된 문법으로 인해 서버가 이해할 수 없음.  
      401 : Unauthorised 비인증. 응답받기 위해 클라이언트는 스스로를 인증해야 함  
      403 : Fobbiden 콘텐츠에 접근할 권리를 갖고있지 않음. 
            401과의 차이점은 서버가 해당 클라이언트가 누구인지 식별하고 있음.
            ex) 관리자 페이지에 일반 사용자가 접근하려 할 때

      404 : Not Found 서버는 해당 사용자가 누구인지 인지하고 있으며, 
            API 종점은 확실하나 리소스 자체는 존재하지 않을 때. 
            즉, 해당 URL에 대한 대응하는 페이지가 없을 때 흔히 보여지는 에러코드.  
      5XX : Server Err Res  
      502 : Bad Gateway 서버가 게이트웨이로부터 잘못된 응답을 수신. 
            인터넷상의 서버가 다른 서버로부터 유효하지 않은 응답을 받았을 때.  
      503 : Service Unavailable. 서버가 요청을 처리할 수 없는 상태. 
            보통은 서버가 죽었거나.. 유지보수를 위해 잠시 내려놨을 때. 아무튼 가장 두려운 상태.  
  • headers : http response header를 어떻게 나타낼 지에 대한 정의가 담긴 {key:value} 객체. 전달하지 않을 경우 기본값으로 설정된다.
    • Content-Type : response body MIME(Multipurpose Internet Mail Extensions)을 특정
      실제로 사용해본 여러 예시들) text/html, application/json, image/jpeg
    • Content-Length : res body의 길이를 특정. (bytes)
      왜 사용하는가? 간단히 얘기하자면 서버 충돌로 인해 메시지가 잘렸는지 감지하고자 할 때와 지속 커넥션을 공유하는 메시지를 올바르게 분할하고자 할 때 사용한다고 한다. 추후 더 자세히 작성해볼 수 있다면 작성해둘 것.
    • Cache-Control : 클라이언트가 response를 캐싱하는 방법을 특정.
    • Location : 클라이언트의 리다이렉션을 할 url을 특정하기 위해 사용
    • Set-Cookie : 클라이언트의 브라우저에서 쿠키를 설정하기 위해 사용
    • Access-Control-Allow-Origin : CORS(교차 원본 리소스 공유)에 허용되는 원본을 지정.  해당 부분에서 에러가 발생한 적이 있어 눈에 익었다. 관련해 좋은 링크를 찾아 첨부해두겠다. 추후 내가 이해한 방식대로 다시 한 번 정리해 포스팅 해볼 것.

header를 특정하면 생기는 이점

  • 사용자 경험 개선 : Content Type 헤더를 특정하여 다른 형태로 해석될 여지를 없애 브라우저가 화면 및 데이터를 올바른 형태로 렌더링 또는 제공
  • 성능 향상 : Cache-Control 헤더 설정시 브라우저가 응답을 캐싱하여 서버에 대한 요청 수를 줄여 페이지 로드 시간 개선이 가능
  • 보안성 향상 : X-Frame-Options 헤더를 DENY로 설정하여 웹 페이지가 다른 웹사이트의 iframe에 포함되지 않도록 하여 클릭재킹 공격을 방지할 수 있다.

해당 글을 작성하면서 구글링하다보니 HTTP라는게 생각보다 단순하지 않음을 깨닫는다.
관련해 참고하기 좋은 블로그 링크를 찾아 첨부해둔다. 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.