1. 프로토콜 (Protocol)
- 서로 간의 통신을 위한 약속 규칙 / 주고 받을 데이터에 대한 형식을 정의
1) HTTP (Hyper Text Transfer Protocol)
- 텍스트(html) 기반의 프로토콜
- 상태를 유지하지 않음 (stateless) => 클라이언트 정보를 저장 X, 요청을 구분할 수 없음
- 이를 보완하고자 쿠키 & 세션을 이용해서 사용자를 구분
- 확장 가능 => 커스텀 헤더 추가 가능
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로 인코딩한 값]">