HTTP 요청과 응답

뫄뫄(ahk)·2022년 9월 8일
0

Spring

목록 보기
3/18

프로토콜은 무엇일까?

통신을 하기 위한 약속, 규칙. 주고받는 데이터 형식을 정의한 것(해석하기 위해)

HTTP(Hyper Text Transfer Protocol)

  • 단순하고 읽기 쉬움(text기반)
  • stateless
    같은 클라이언트가 서버에 2번 요청을 보내도 서버는 두 요청을 각각 다른 요청으로 처리한다는 의미(쿠키와 세션을 통해 클라이언트 식별)
  • 확장가능
    클라이언트와 서버간 약속만 되어있으면 커스텀 헤더를 추가하여 내가 원하는 정보를 주고 받을 수있다.

브라우저에서 검색창에 url을 입력하여 서버에 요청하지 HTTP 메시지를 작성하지 않는데, 어떻게 요청이 가능할까?

검색창에 url을 입력하여 enter을 누르면, 브라우저가 자동적으로 요청들로 HTTP 메시지를 작성하여 서버에 보낸다. 브라우저가 알아서 하네요! 고맙다 브라우저야!

응답, 요청메시지의 작성

1. 응답


위의 6줄의 메시지가 모두 header

  • HTTP 응답 메시지 헤더의 첫째 줄은 상태라인
    HTTP/1.1 = 프로토콜명
    200 = 상태코드
  • 2번째 줄부터 각각 헤더. 줄 바꿈으로 각각 헤더가 구분됨.
  • header의 길이가 가변적이라서 header와 body는 빈 줄로 구분한다.

2. 요청메시지

  • 첫째 줄은 요청라인
    Post = 요청방식
    /ch22/getYoil = 요청의 대상
    HTTP/1.1 == 프로토콜명

요청방식

GET 방식

  • 바디가 없다
  • 리소스를 서버에서 얻어오는것이 목적이다(read)
  • 데이터를 URL뒤에 queryString으로 데이터를 전달(소용량)
  • URL에 노출되어 보안에 취약
  • 데이터 공유에 유리
  • 사용예 : 검색창에 검색

POST 방식

  • 바디 존재
  • 리소스를 서버에 저장하는 것이 목적
  • body로 보내는 데이터의 크기에 제한은 없다(대용량)
  • 보안에 유리(HTTP + TLS를 사용해야 보안이 된다)
  • 데이터 공유에 약함
  • 사용예 : 블로그에 글쓰기, 회원가입 등

binary file & text file

바이너리 파일

  • 파일을 작성할 때 문자는 문자로 숫자는 숫자로 쓰고 파일을 읽는 방식도 동일하다
  • 타입이 다르기 때문에 텍스트 파일과 비교했을 때 읽기어렵다

텍스트 파일

  • 파일을 작성할 때 문자는 문자로 숫자도 문자로 작성한다
  • 읽기가 비교적 쉽다

MIME

텍스트기반의 프로토콜로(HTTP) 바이너리 데이터를 전송하기 위해서 ContentType 헤더로 전송하는 데이터의 타입을 알려주는데, 이때 알려주는 타입을 MIME(Multipurpose Internet Mail Extentions) 타입이라고 한다.

response.setContentType("text/html");


노란색으로 표시된 부분이 boundary. 각 데이터를 구분하는 역할이다. MIME을 사용하면 하나의 HTTP 요청 메시지에 text 데이터와 binary 데이터를 함께 보낼 수 있다.

Base64

  • 바이너리 데이터를 텍스트 데이터로 변환할 때 사용한다.
  • 모든 os가 공통으로 가지고 있고, 모든 문자들이 똑같은 코드로 가지고 있는 64개 문자로 구성되어있다(a~z, A~Z, 0~9, +, /)
  • 장점 : 어떤 os에서 데이터를 주고 받아도 깨지지 않는다. 이미지의 경우 base64로 인코딩한 문자열을 html파일에 저장하면 따로 이미지파일을 저장하지 않아도 된다. html파일에 박아 놓은 격.
  • 단점 : 6bit를 8byte(utf-8)이상의 데이터 크기로 다시 변환하니 메모리를 더 사용함
profile
NONONONONONOYes!

0개의 댓글