개발/ETC

[HTTP] HTTP 개관

devhooney 2022. 7. 1. 23:25
728x90

HTTP 완벽가이드 1장 읽은 후 정리

HTTP: 인터넷의 멀티미디어 배달부

- HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용한다.

 

웹 클라이언트와 서버

https://server-talk.tistory.com/291

- 웹 컨텐츠는 웹 서버에 존재

- 웹 서버는 HTTP 프로토콜로 의사소통

- 클라이언트는 서버에게 HTTP 요청을 보내고 요청된 데이터를 HTTP 응답으로 돌려받는다.

 

리소스

- 웹 서버는 웹 리소스를 관리하고 제공

- 텍스트파일, html파일, 워드 등 모든 종류의 파일 관리, 제공

 

미디어 타입

- 인터넷은 수천 가지 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다.(Multipurpose Internet Mail Extentions, 다목적 인터넷 메일 확장)

- MIME 타입 종류

  1. HTML로 작성된 텍스트 문서: text/html
  2. plain ASCII 텍스트 문서: text/plain
  3. JPEG 이미지: image/jpeg
  4. GIF 이미지: image/gif
  5. 애플 퀵타임 동영상: video/quicktime
  6. MS PPT: application/vnd.ms-powerpoint
    등등...

URI

- 웹 서버 리소스는 각자 이름을 갖고 있다.

- 서버 리소스 이름은 통합 자원 식별자(uniform resource identifier), 혹은 URI라고 불린다.

- URI 종류는 2가지

  1. URL
  2. URN

URL

- 통합 자원 지시자(uniform resource locator, URL)는 리소스 식별자의 가장 흔한 형태

- URL은 특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다.

- URL은 리소스가 정확히 어디에 있고 어떻게 접근할 수 있는지 분명히 알려준다.

- 대부분의 URL은 세 부분으로 이루어진 표준 포맷을 따른다.

  1. URL의 첫 번째 부분은 스킴(scheme)이라고 불리는데, 리소스에 접근하기 위해 사용되는 프로토콜을 서술한다. 보통 HTTP 프로토콜(http://)이다.
  2. 두 번째 부분은 서버의 인터넷 주소를 제공한다.(www.naver.com)
  3. 세 번째는 웹 서버의 리소스를 가리킨다.(/write?id=4e4b473f-31cb-4f2f-a079-a049dbe19a0d)

URN

- URN(uniform resource name)은 컨텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유일무이한 이름 역할을 한다.

- 리소스를 옮겨도 이름이 변하지 않는 이상 문제없이 동작한다.

 

트랜잭션

- HTTP 트랜잭션은 요청 명령과 응답 결과로 구성되어 있다.

 

메소드

- HTTP는 HTTP 메소드라고 불리는 여러 가지 요청 명령을 지원한다.

  1. get:
    서버에서 클라이언트로 지정한 리소스를 보내라
  2. put:
    클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라
  3. delete:
    지정한 리소스를 서버에서 삭제하라
  4. post:
    클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라
  5. head:
    지정한 리소스에 대한 응답에서 http 헤더 부분만 보내라

 

상태 코드

- 모든 HTTP 응답 메시지는 상태 코드(3자리 숫자)와 함께 반환한다.

- 예시

  1. 200:
    문서가 바르게 반환되었다.
  2. 302:
    다른 곳에 가서 리소스를 가져가라.
  3. 404:
    리소스를 찾을 수 없다.

 

웹페이지는 여러 객체로 이루어질 수 있다

- 애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다.

 

메시지

- HTTP 메시지는 단순한 줄 단위의 문자열

- HTTP 메시지는 세 부분으로이루어진다.

https://www.oreilly.com/library/view/http-the-definitive/1565925092/ch01s05.html

  1. 시작줄:
    요청 - 무엇을 해야 하는지 나타냄
    응답 - 무슨 일이 일어났는지 나타냄
  2. 헤더
    0개 이상의 헤더 필드가 이어진다.
    각 헤더 필드는 쉬운 구문 분석을 위해 :으로 구분되어 있는 하나의 이름과 하나의 값으로 구성
  3. 본문
    요청 - 웹 서버로 데이터를 보냄
    응답 - 클라이언트로 데이터를 반환

 

간단한 메시지의 예

https://startfrombottom.tistory.com/70

 

TCP 커넥션

- 메시지는 TCP(Transmission Control Protocol) 커넥션을 통해 옮겨간다.

TCP/IP

- HTTP는 애플리케이션 계층 프로토콜

- TCP는 다음을 제공한다.

  1. 오류 없는 데이터 전송
  2. 순서에 맞는 전달(데이터는 언제나 보낸 순서대로 도착)
  3. 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다.)

- HTTP 네트워크 프로토콜 스택

https://velog.io/@hogu8159/4.-%EC%BB%A4%EB%84%A5%EC%85%98-%EA%B4%80%EB%A6%AC

 

접속, IP 주소 그리고 포트번호

- HTTP 클라이언트가 서버에 메시지를 전송할 수 있게 되기 전에, 인터넷 프로토콜(IP) 주소와 포트번호를 사용해 클라이언트와 서버 사이에 TCP/IP 커넥션을 맺어야 한다.

- HTTP URL에 포트 번호가 없을 경우 기본값 80이라고 가정

- 리소스 로드 순서

  1. 서버의 URL에서 호스트 명을 추출
  2. 서버의 호스트 명을 IP로 변환
  3. URL에서 포트번호(있다면)를 추출
  4. 웹 서버와 TCP 커넥션 맺음
  5. 서버에 HTTP 요청
  6. 웹브라우저에 HTTP 응답
  7. 커넥션 닫힘. 사용자에게 문서 보여줌

 

웹의 구성요소

- 프록시:
클라이언트와 서버 사이에 위치한 HTTP 중개자\

- 캐시:
많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고

- 게이트웨이:

다른 애플리케이션과 연결된 특별한 웹 서버

- 터널:
단순히 HTTP 통신을 전달하기만 하는 특별한 프록시

- 에이전트:
자동화된 HTTP 요청을 만드는 준지능적 웹클라이언트

728x90