HTTP 요청과 응답

SOLEE_DEV·2023년 1월 8일
0
post-custom-banner

1. 프로토콜 (Protocol)

  • 서로 간의 통신을 위한 약속 규칙 / 주고 받을 데이터에 대한 형식을 정의

1) HTTP (Hyper Text Transfer Protocol)

  1. 텍스트(html) 기반의 프로토콜
  2. 상태를 유지하지 않음 (stateless) => 클라이언트 정보를 저장 X, 요청을 구분할 수 없음
  • 이를 보완하고자 쿠키 & 세션을 이용해서 사용자를 구분
  1. 확장 가능 => 커스텀 헤더 추가 가능
    ex) HTTP 응답 메세지
  • 헤더 = 헤더 이름 : 값 (Content-Length : 1024) => 대소문자 구분 X
    => 표준에 정해놓지 않은 헤더들을 사용할 수 있음!

2. HTTP 메세지 (요청 - 응답 편지)

1) HTTP 메세지 - 응답 메세지 형식 (구성요소)

(1) 상태코드 (상태라인) // 요청라인

  • 1xx : Informational => HTTP/1.1 때 추가 (정보교환의 의미)
  • 2xx : Success
  • 3xx : Redirect (다른 URL로 재요청하라는 의미)
  • 4xx : Client Error
  • 5xx : Server Error
    → 요청 OK, 서버처리 中 에러

(2) 헤더

(3) 바디 (실제 응답 내용)

2) HTTP 메세지 - 요청 메세지

- 요청 Method

(1) GET

  • 리소스를 가져오기 위함 (read)
  • 대신 데이터를 보낼게 있으면 쿼리스트링 형태(소용량)로 보낼 수 있음
    => But. URL에 데이터 노출되므로 보안에 취약!
  • 데이터 공유에 유리
  • body X

(2) POST

  • 서버에 정보를 제공해줄 때 사용!
  • body를 통해서 서버에 전송할 data를 body에 담아서 전달 (대용량)
    (write / login / join / 파일 첨부)
  • body O
  • HTTPS를 통해 전달 (HTTP + TLS / 암호화) => TLS 프로토콜을 써서 보안에 유리!
  • <form> 태그를 써야되는데 귀찮아서.. postman 사용할거

3. HTTP 요청과 응답

1) 텍스트 파일 VS 바이너리 파일

  • 바이너리 파일 : 문자 / 숫자 (image) (데이터를 있는 그대로 읽고 씀)
  • 텍스트 : 문자만 (숫자를 문자로 변환 후 씀)
    ex) 숫자 : 12 (int 4byte), 12.625f (float 4byte)
    => 문자 : '1','2' / '1','2','.','6','2','5'

2) MIME (Multipurpose Internet Mail Extensions)

  • 텍스트 기반 프로토콜바이너리 데이터 전송하기 위해 고안
  • HTTP의 Content-Type 헤더에 사용. 데이터 타입을 명시

ex) text = text/plain, text/html
image = image/bmp
...
=> 바이너리인지 텍스트인지 구분하기 위해서 어떤 타입을 보낼건지 정확히 보냄!

Preview Limitations
POST /ch2/getYoil HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="year"

2023
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="img file"; filename="그림1.png"
Content-Type: image/png


----WebKitFormBoundaryE19zNvXGzXaLvS5C

3) Base64 인코딩

  • 바이너리 데이터를 텍스트 데이터로 변환할 때 사용
  • 64진법은 '0' ~ '9', 'A' ~ 'Z', 'a' ~ 'z', '+', '/' 모두 64개의 문자로 구성
  • 2^6 = 6bit
    => 빈자리는 padding!
  • 16진수 = 2^4 = 4bit씩!
  • ASCII = 128개 = 2^7 = 7bit (특수문자)
  • UTF-8 : 영문자, 숫자가 1byte
<img src="data:image/jpeg;base64,[img를 base64로 인코딩한 값]">
profile
Front-End Developer
post-custom-banner

0개의 댓글