티스토리 뷰
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은 표준 프로토콜로 사용되고 있습니다.
- 커넥션 재사용 : 단일 HTML 문서안에 내장되어있는 이미지같은 리소스를 보여주기 위해 사용된 커넥션을 계속 사용하는 기능을 제공합니다.
- 파이프라이닝 : 첫번째 요청에 대한 응답이 전송되기 전에 두번째 요청이 전송될 수 있도록합니다.
- 데이터가 암호화되지 않고 텍스트로 전송합니다.
- TCP/IP 를 활용하여 전송합니다.
HTTP/2
- HTTP/1.1은 HTTP 데이터를 텍스트로 전달하지만 HTTP/2는 이진 데이터 바이너리 형식으로 데이터를 전달합니다.
- 동일한 TCP 연결 상에서 병렬 요청이 처리될 수 있도록 해줍니다.
- 전송된 데이터의 중복과 이로인한 오버헤드를 줄이기 위해 연속된 요청에 유사한 내용이 있다면 헤더를 압축시켜줍니다.
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
링크
TAG
- ORA-27125
- OS
- JPA
- 트랜잭션격리성
- 파일업로드설정
- ci/cd
- ddl-auto
- db
- 네이버클라우드
- SpringGraphQL
- CodeDeploy
- 인덱스
- N+1
- SpringSecurity
- 프로그래머스
- 운영체제
- level0
- AWS
- spring
- EC2
- Til
- graphql
- Java
- Travis CI
- Oracle
- TCP
- 트랜잭션
- nginx
- 기술면접
- 람다식
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함