본문 바로가기
개발 관련/http

1. HTTP 개관

by lazysnack 2022. 7. 14.

1. HTTP

  • HTTP 는 신뢰성 있는 데이터 전송 프로토콜을 사용한다. 따라서 전송 중 데이터가 손상되거나 꼬이지 않음을 보장한다.
  • 개발자는 인터넷의 결함이나 약점에 대한 걱정 없이 애플리케이션 고유의 기능을 구현하는 데 집중할 수 있다.

2. 웹 클라이언트와 서버

  1. 웹 서버 :
    • HTTP 프로토콜로 의사소통하기 때문에 보통 HTTP 서버라고 불리며, 웹 콘텐츠는 이 웹 서버에 존재한다.
    • 인터넷의 데이터를 저장하고, HTTP 클라이언트가 요청한 데이터를 제공한다.
    • HTTP 클라이언트와 함께 월드 와이드 웹 (WWW) 의 기본 요소
  2. 웹 클라이언트
    • 가장 흔한 클라이언트는 인터넷 익스플로러, 크롬 등의 웹 브라우저
    • 서버에게 HTTP 객체를 요청하고 사용자의 화면에 보여줌

3. 리소스

  • 웹 서버는 웹 리소스를 관리하고 제공한다.
  • 가장 단순한 웹 리소스는 HTML, PNG, MP4 등의 정적 파일이다.
  • 물론 정작 파일만 존재하는 것이 아닌, 동적으로 만들어주는 프로그램이 될 수도 있다.
  1. 미디어 타입

    • 웹 서버는 모든 HTTP 객체에 MIME (Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장) 타입을 붙인다. 이를 통해 웹브라우저는 자신이 다룰 수 있는 객체인지를 확인한다.
Ex) text/html, image/gif
  1. URI

    • 웹 서버 리소스는 각자 이름을 갖고 있기 때문에, 클라이언트는 관심 있는 리소스를 지목할 수 있고, 서버 리소스 이름은 통합 자원 식별자(URI : uniform resource identifier) 로 불린다.
Ex) 이미지 리소스에 대한 URI

https://ysjune.github.io/images/whoami/avatar.jpg
  • URI 에는 URL 과 URN 이라는 것이 있다.
  1. URI (uniform resource locator)

    • 리소스 식별자의 가장 흔한 형태로 위치를 나타낸다.
    • 대부분의 URL 은 세 부분으로 이루어진 표준 포멧을 따른다.
첫 번째 부분
 스킴(scheme) 라고 불리며, 리소스에 접근하기 위해 사용되는 프로토콜
 ->> https://

두 번째 부분
 서버의 인터넷 주소를 제공
 ->> ysjune.github.io

세 번째 부분
 웹 서버의 리소스를 가리킴
 ->> /images/whoami/avatar.jpg
  • 오늘날 대부분의 URI 는 URL 이다.
  1. URN (uniform resource name)

    • 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유밀무이한 이름
    • 아직 실험 중인 상태이고, 널리 채택되지 않았음. 인프라의 지원이 늦는 것도 한 몫

4. 트랜잭션

  • HTTP 트랜잭션은 요청 명령(클라이언트 -> 서버) 과 응답 결과 (서버 -> 클라이언트) 로 구성
  • 이런 상호작용은 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 이용해 이루어짐
  • GET, PUT, DELETE, POST 등의 메서드를 통해 요청 명령을 지원
  • 응답을 할 때는 200, 404 등의 상태 코드와 함께 반환된다.
  • 애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다. (한 페이지를 불러오기 위해 HTML 파일, 이미지파일, JSON 데이터 등을 가져옴)

5. 메시지

  • HTTP 메시지는 단순한 줄 단위의 문자열으로, 일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다.
  • 웹 클라이언트에서 서버로 보낸 HTTP 메시지를 요청 메시지라고 부르고, 그 반대를 응답 메시지라고 부른다.
  • 시작줄, 헤더, 본문 세 단위로 나뉜다.
Ex) 요청 메시지

시작줄 : GET /test/hi.txt HTTP/1.0

헤더 : Accept: text/*

본문 : 없음

<br>

응답 메시지

시작줄 : HTTP/1.0 200 OK

헤더 : Content-type : text/plain

본문 : hi every~

6. TCP 커넥션

  • HTTP는 애플리케이션 계층 프로토콜이므로 네트워크 통신의 세부사항에 대해 신경쓰지 않는다.

  • 신뢰성 있는 TCP/IP 통신을 사용한다.

  • TCP 커넥션이 맺어지면, 클라이언트와 서버 컴퓨터 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 뒤바뀌어 수신되는 일은 결코 없다.

  • 텔넷 유틸리티를 통해 웹서버와 직접 대화할 수 있다.

Ex) telnet www.joes-hardware.com 80

...

...

GET /tools.html HTTP/1.1

Host: www.joes-hardware.com

7. 프로토콜 버전

  • HTTP/0.9 버전부터 HTTP/1.0, 1.1, 2.0 등이 있다.
  • (90년대 초부터 후반에 거의 다 나온 것들이다.. 현재는 20년...)

8. 웹의 구성 요소

  • 추후에 자세히 다루겠지만, 트랜잭션에서 주고받는 메시지에 중점을 두어 간략히 설명한다.
    1. 프록시 : 클라이언트와 서버 사이에 위치한 HTTP 중개자
    2. 캐시 : 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
    3. 게이트웨이 : 다른 애플리케이션과 연결된 특별한 웹 서버
    4. 터널 : 단순히 HTTP 통신을 전달하기만 하는 특별한 프록시
    5. 에이전트 : 자동화된 HTTP 요청을 만드는 준지능적 웹클라이언트

'개발 관련 > http' 카테고리의 다른 글

HTTP 메시지  (0) 2022.07.14
REST (2)  (0) 2022.07.14
REST (1)  (0) 2022.07.14