티스토리 뷰

면접질문

[네트워크] HTTP

sayho 2022. 1. 2. 00:59
HTTP

  HTTP는 애플리케이션 계층의 프로토콜입니다. 클라이언트(브라우저)와 서버가 웹상에서 데이터를 주고받기

  위해 HTTP를 사용합니다.

 

HTTP 비연결성

  HTTP는 대표적인 비연결성 프로토콜입니다. UDP와 같이 서버에 상태 정보를 저장하지 않습니다. 

  HTTP 패킷은 TCP/IP를 사용하여 전송되기 때문에 모든 요청을 할 때마다 TCP 연결을 새로 생성을 하는 의문이

  생길 수 있는데 이는 HTTP 지속연결로 해결할 수 있다.

 

HTTP 지속연결

  만약 지속 연결을 하지 않으면 다음과 같은 상황이 발생할 수 있다.

상황 : 웹 정적 페이지를 요청했는데 해당 페이지는 5개의 리소스를 필요로 한다. 
비지속 연결의 문제점 : 비지속연결 상태라면 HTML과 5개의 리소스를 받기 위해 6번의 TCP
연결 요청을 해야 한다.

 

  위와 같은 상황을 해결하기 위해 HTTP 지속 연결을 사용한다.

상황 : 웹 정적 페이지를 요청했는데 해당 페이지는 5개의 리소스를 필요로 한다. 
지속 연결을 장점 : 첫 번째 HTML의 TCP 연결 상태를 사용해서 5개의 리소스는 추가적인 TCP
연결 요청 없이 요청에 대한 응답을 한다.

 

HTTP Request 헤더
[Request Line]
GET https://hozumi.tistory.com/ HTTP/1.1

[Request Header]
Host: https://hozumi.tistory.com/
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0

[Header와 Body를 구분하기 위한 공백]
[Request Message Body]

 

  • Accept : 클라이언트가 이해 가능한 컨텐츠 타입이 무엇인지 명시해줍니다.
  • Accept-Language : 클라이언트가 이해 가능한 언어를 명시해줍니다.
  • Accept-Encoding : 클라이언트가 이해 할 수 있는 인코딩 타입을 명시해줍니다.
  • Connection : 현재 전송이 완료된 후 네트워크 접속을 유지할지 말지를 결정하는 헤더 항목입니다. keep-alive 가 설정되어 있다면 연결이 지속되고, 동일한 서버에 대한 후속 요청을 수행할 수 있습니다. HTTP의 지속연결은 Connection 으로 설정할 수 있습니다. HTTP/2 에서는 사용할 수 없는 옵션입니다.  
  • User-Agent : 사용자 대신 요청을 처리하는 브라우저라고 볼 수 있습니다.
HTTP Response Header
[Response Line]
HTTP/1.1 200 OK

[Response Header]
Date: Sun, 02 Jan 2022 12:00:00 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Access-Control-Allow-Origin: https://hozumi.tistory.com/
Vary: Accept-Encoding
Content-Length: 50000
Content-Type: text/html; charset=utf-8

[Header와 Body를 구분하기 위한 공백]
[Response Body]

 

  • Date : 메세지가 만들어진 시간을 의미합니다.
  • Server : 응답을 만들어낸 서버를 의미합니다.
  • Expires : 응답 만료 날짜를 의미합니다.
  • Cache-Control : 캐시 정책을 설정하는 헤더입니다. max-age 는 얼마동안 캐시를 유지할지, no-cache는 캐시를 저장하되 캐시가 유효한지 매번 서버에 질의를하고, no-store은 어떤 요청도 캐시로 저장하지 않음을 의미합니다.
  • Access-Control-Allow-Origin : 해당 값이 응답을 공유할 수 있게 해주는 헤더 설정입니다.
  • Vary : 캐시된 정보를 응답할지 결정하는 헤더 설정입니다.
  • Content-Length : Body의 크기를 알려주는 헤더입니다.
  • Content-Type : 요청에서 Content Type은 어떤 유형의 데이터가 전송되는지 서버에게 알려주기 위해 사용되고, 응답에서 Content Type은 응답 메세지의 실제 콘텐츠 유형을 알려주기 위해 사용한다.
HTTP 1.1

  HTTP 1.1은 표준 프로토콜로 사용되고 있습니다.

  1. 커넥션 재사용 : 단일 HTML 문서안에 내장되어있는 이미지같은 리소스를 보여주기 위해 사용된 커넥션을 계속 사용하는 기능을 제공합니다.
  2. 파이프라이닝 : 첫번째 요청에 대한 응답이 전송되기 전에 두번째 요청이 전송될 수 있도록합니다.
  3. 데이터가 암호화되지 않고 텍스트로 전송합니다.
  4. TCP/IP 를 활용하여 전송합니다.
HTTP/2
  1. HTTP/1.1은 HTTP 데이터를 텍스트로 전달하지만 HTTP/2는 이진 데이터 바이너리 형식으로 데이터를 전달합니다.
  2. 동일한 TCP 연결 상에서 병렬 요청이 처리될 수 있도록 해줍니다.
  3. 전송된 데이터의 중복과 이로인한 오버헤드를 줄이기 위해 연속된 요청에 유사한 내용이 있다면 헤더를 압축시켜줍니다.  
HTTP/3

  HTTP/3는 HTTP 1.1과 2는 TCP로 전송하는 것과 반대로 UDP를 사용한다는 것 입니다. 

'면접질문' 카테고리의 다른 글

[DB] 면접 스터디 (1)  (0) 2022.02.28
MVC 패턴  (0) 2022.01.30
API와 SDK  (0) 2022.01.30
[네트워크] TCP 3 way handshake, 4 way handshake  (0) 2022.01.01
[네트워크] TCP와 UDP  (0) 2022.01.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함