20210201 - TIL

Starve·2021년 2월 1일
0

TIL

목록 보기
24/38
post-thumbnail

TIL

HTTP란?

  • HTTP(Hyper Text Transfer Protocol)는 텍스트 기반의 통신 규약으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜.
    하이퍼텍스트 문서를 교환하기 위하여 사용된 통신 규약이다.
  • 웹에서만 사용하는 프로토콜로, TCP/IP기반으로 서버와 클라이언트의 요청과 응답을 전송한다.
  • 이전에는 http가 많았지만, 안전상의 문제로 최근엔 대부분 https를 사용한다.
    • http :
      안전하지 않다. 보안에 취약하여 내가 입력한 정보나 파일들이 그대로 노출될 가능성이 높다.
    • https :
      여기의 s는 secure의 약자로, http보다 안전하다는 특징이 있다.
      입력한 정보나 파일들이 암호화되기 때문에 노출이 되어도 알아볼 수 없다.

HTTP의 특징

  • HTTP메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석이 된다.

  • TCP/ IP를 이용하는 응용 프로토콜(application protocol)이다.

  • 무상태(stateless)프로토콜. 연결 상태를 유지하지 않는 비연결성 프로토콜이다.

    무상태 프로토콜:

    • 서버가 클라이언트의 상태를 보존하지 않음.

    • 중간에 다른 서버로 변경되어도, 클라이언트가 서버에 요청 시 필요한 정보들을 모두 담아 요청하기 때문에 문제가 발생하지 않는다.

    • 클라이언트 요청이 갑자기 증가하더라도 서버 대거 투입이 가능하다.

    비연결성 프로토콜:

    • 필요시에만 연결하여 최소한의 자원으로 서버를 유지할 수 있다.

    • HTTP는 기본 연결을 유지하지 않음.

    • TCP/IP 연결을 다시 연결할 때 마다 새로 맺어야 하기 때문에 시간이 소요된다.

    • 사이트 연결 시, 수많은 자원이 다시 다운로드되기 때문에, 이를 HTTP 지속연결로 해결하였다.

      지속연결: 요청이 다 끝날 때 까지 연결 유지.

    이런 단점을 해결하기 위해 쿠키라는 것을 사용한다.

    • 쿠키: 사용자가 같은 웹사이트를 방문 할 때 마다 읽힌 정보를 해당 웹사이트의 서버에 저장해놓는 정보조각.
  • 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답(request/ response) 방식으로 동작.

  • HTTP의 동작:

    • 클라이언트(Client, 사용자): 브라우저를 통해 어떠한 서비스 URL을 통하거나, 다른 것을 통해 서버에게 요청(request) 함.
      서버(Server): 클라이언트가 보낸 요청사항에 맞는 결과를 찾아서, 클라이언트에게 응답(response)함.
  • 예로, 클라이언트 프로그램에서 사용자가 회원 가입 시도 시, 서버로 회원 정보를 보내게 되고
    서버는 회원 정보를 저장한다.

    1. Client -(회원 가입 요청 / request)-> Server
    2. Server -(가입 정보 저장/data save)-> (회원 가입 완료 페이지 전송/response) -> Client
  • HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니며,
    Plain text로 부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있다.

HTTP 메서드

Request(요청)

  • 이 URI를 통해 IP 주소를 찾으면, 포트 번호와 함께 HTTP 프로토콜을 통해 요청메세지를 발송.
  • 요청 메세지는 정해진 규칙에 따르며, 이를 요청 데이터 포맷이라 함.
    • 메세지의 구조는 헤더 / 빈 줄 / 요청 바디 로 나뉘어져 있다.

  • Request Method :
    • GET: 자료를 요청할 때 사용
    • POST: 자료의 생성을 요청할 때 사용
    • PUT: 자료의 수정을 요청할 때 사용
    • DELETE: 자료의 삭제를 요청할 때 사용

Response(응답)

메세지의 구조는 Request와 유사하게 이루어져 있다.

  • 헤더 / 빈 줄 /요청바디
  • 첫 줄에는 반드시 HTTP 프로토콜 버전, 응답상태 등을 출력한다.

  • 상태코드:
    상태 코드는 모두 숫자 세자리로 이루어져 있으며, 굉장히 많은 종류가 있다.
    크게 다섯 가지 부류로 나눌 수 있다.
    • 1XX(조건부 응답): 요청을 받았으며 작업을 계속한다.
    • 2XX(성공): 클라이언트가 요청한 동작을 수신하여 이해했고, 승낙했으며, 성공적으로 처리했다.
    • 3XX(리다이렉션 완료): 클라이언트는 요청을 마치기 위해 추가동작을 취해야한다.
    • 4XX(요청 오류): 클라이언트에 오류가 있음을 나타낸다.
    • 5XX(서버 오류): 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.

메세지 구조

  • 시작줄/ 헤더/ 바디로 나눌 수 있다.
    • 시작줄: 요청내용
      • Request 시, 메서드와 요청 URL, HTTP version | ex) GET /image/logo.gif HTTP/1.1
      • Response 시, HTTP version, 상태코드 및 사유 구절 | ex) HTTP/1.1 200 OK
    • 헤더:
      • 요청과 응답 메세지에 대한 추가적인 정보를 담고있다.
      • Key/Value 형식으로 나타냄 | ex) Accept-Language: en / Content-Type: text/html
    • 바디:
      • 전송하고 싶은 실질적인 데이터를 나타낸다.
      • 헤더를 마치고 \n 후에 나타난다.

Todo

  • 자바의 정석 네트워크 정리

  • 미션 1,2 구현 도전

  • 듀오링고 문제 풀기

느낀점

  • 듀오링고! 추천받아서 해봤는데 재미있다.
  • 네트워크 강의를 듣고 메소드도 어떻게 사용해야하는지 정리를 했는데, 머릿속에서 뒤죽박죽으로 섞여서 약간 혼미해진 것 같다.
    내일 마스터 클래스를 듣고 다시한 번 정리하는 시간을 가져야겠다!
profile
노력

0개의 댓글