Web

HTTP 작동방식 (요청과 응답)

만보만보잠만보 2023. 2. 28. 18:51

HTTP 작동방식 자체는 간단하다. 웹 브라우저가 서버에 있는 어떤 자원을 읽기 위해 그에 대한 GET 요청을 웹 서버에 보낸다. 이후 200 OK라는 상태코드(상태코드는 바뀔 수 있다.)와 HTTP 헤더 몇개, 메시지 본문을 서버가 브라우저에게 보낸다.

HTTP 요청 메시지

아래 사진과 같은 HTTP 요청 메시지가 있다. 해당 내용이 어떠한 내용인지에 대해 작성한다.

HTTP 요청 메시지 예시

  • 요청을 한 주소, HTTP의 버전, IP주소
  • User-Agent : 브라우저는 서버에 보내는 모든 요청에 사용자 에이전트 문자열. 브라우저 종류, 버전 번호, 호스트 운영체제가 포함되어있다.
  • Accept : 클라이언트가 이해 가능한 컨텐츠 타입이 무엇인지를 알려준다. ;q=에서 q는 인자 가중치로 사용되는 모든 값들은 weight라고 부르는 상대적인 품질 값 (en-US)을 사용하여 표현되는 선호 순서로 대체된다.
    • 1.0>0.9>0.8순이다. 같은 품질에서는 보다 구체적인 값이 우선시된다.
  • Accept-Language : 어떤 (자연)언어를 클라이언트가 이해할 수 있는지, 그리고 지역 설정 중 어떤 것이 더 선호되는지를 알려준다.
  • Accept-Encoding : 클라이언트가 이해 가능한 컨텐츠 인코딩이 무엇인지 알려준다.
  • DNT(Do Not Track) : 사용자의 트래킹 선호 설정을 가르킨다. 0은 트래킹 허용, 1은 트래킹 불허이다.
  • Connection : 현재의 전송이 완료된 후 네트워크 접속을 유지할지 말지를 제어한다. keep-alive면 유지된다. 이러한 헤더 필드는 HTTP/2에서 금지되었다.
  • Upgrade-Insecure-Requests : 암호화 및 인증된 응답에 대한 클라이언트의 선호도를 나타내는 신호. 1로 하면 서버는 사이트의 보안 버전으로 리디렉션이 가능하다.
  • Cache-Control : 브라우저 및 공유 캐시의 캐시를 제어하는 명령. max-age은 응답이 생성된 후 N초가 될 때 까지 응답이 살아있음을 나타낸다.
 

 

HTTP 응답 메시지

아래 사진과 같은 HTTP 응답 메시지가 있다. 해당 내용이 어떠한 내용인지에 대해 작성한다.

HTTP 응답 메시지 예시

  • Server : 요청을 받은 서버의 S/W
  • Date : 메시지가 생성된 시점의 날짜와 시간
  • Content-Type : 리소스의 기존 미디어 유형을 나타낸다. (+브라우저가 MIME 스니핑을 수행할 때처럼 이 헤더 값을 무시될 수 있다. nosniff로 방지가능하다.)
  • Connection : 현재의 전송이 완료된 후 네트워크 접속을 유지할지 말지를 제어한다. keep-alive면 유지된다. 이러한 헤더 필드는 HTTP/2에서 금지되었다.
  • Set-Cookie : 쿠키를 서버에서 사용자로 전송하기 위해 사용 추후 유저가 서버로 쿠키를 다시 보낼 수 있다. 마지막 path=/의 뜻은 브라우저가 요구된 URL에 존재해야하는 경로. /문자는 디렉토리 구분자로 해석된다. HttpOnly의 경우 JS가 속성을 통해 쿠키에 엑세스하는 것을 금지하는 구문.(XSS방지)
  • Expires : 날짜와 시간이 포함되어있는 유효기간
  • Cache-Control : 브라우저 및 공유 캐시의 캐시를 제어하는 명령. max-age은 응답이 생성된 후 N초가 될 때 까지 응답이 살아있음을 나타낸다.
    • no-cache : 캐시에 저장할 수 있음을 나타내는 지시어. 이는 캐시하지 않음을 의미한다.
    • no-store : 어떤 종류의 캐시도 이 응답을 저장하지 않음을 나타내는 지시어
    • must-revalidate : 캐시에 저장할 수 있으며 새로고침중에 재사용 할 수 있음을 나타낸다. (max-age와 함께 사용되는 편)
  • Pragma : 현재는 권장되지 않는 기능. 캐시 없음과 뜻이 같다.
  • Content-Length : 수신자에게 송신되는 메시지 본문의 크기(Byte단위)

위와 같이 HTTP 메시지를 보고 찾아보았다.

관련 내용은 해당 사이트의 내용을 보고 작성하였다.

 

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers

혹시 내용중 틀린 부분이 있다하면 연락바랍니다.