HTTP
- 클라이언트와 서버 사이에 이루어지는 요청/응답(Request/Response) 프로토콜
- HyperText Transfer Protocol : Hyper Text를 전송하기 위한 프로토콜
- Hyper Text : 웹문서를 구성하고 있는 언어 HTML
- 프로토콜 : 상호간에 정의한 규칙. 특정기기 간에 데이터를 주고받기 위해 정의됨
특징
1. Connecetionless
- 비연결성 프로토콜
- 클라이언트와 서버가 연결을 맺은 후
클라이언트 요청에 대해 서버가 응답을 하고나면, 맺고 있었던 연결을 종료시키는 것
- 잦은 연결/해제에 따른 오버헤드를 줄이고자 HTTP1.1 에서는 KeepAlive 속성 사용 가능
- KeepAlive : 지정된 시간동안 서버와 클라이언트 사이에 패킷교환이 없는 경우, 상대방의 상태를 확인하기 위해 패킷을 주기적으로 보내고, 이에 대한 응답이 없으면 접속을 종효하는 것
2. Stateless
- 상태가 없는 프로토콜
- 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리됨을 의미
=> 이전 데이터의 요청과 다음 데이터 요청이 서로 관련없음
=> 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능상의 이점이 생김
3. TCP/IP, 80
- 일반적으로 TCP/IP 통신 위에서 동작
- 기본포트는 80번
과정
1. 접속(Connect)
2. 요청(Request)
3. 응답(Response)
4. 닫기(Close)
메시지 구조
Request
Request Line
HTTP Method / Reqeust Target / HTTP버전
ex) GET /restapi/v1.0 HTTP/1.1
- HTTP Method
요청의 의도를 담고 있음 GET/POST
- Request Target
HTTP 요청이 전송되는 목표 주소
- HTTP 버전
버전에 따라 요청 메시지 구조나 데이터가 다를 수 있어서 버전을 명시함
HTTP 요청 그 자체에 대한 정보를 담고 있음
key:value 로 이루어져 있음
- 헤더정보
- Host : 요청이 전송되는 Target의 호스트 url 주소
- User-Agent : 요청을 보내는 클라이언트의 정보 (ex. 웹브라우저의 정보)
- Accept
- 해당 요청이 받을 수 있는 응답 body 데이터 타입의 정보
- 모든 타입을 허용하는 경우 */*로 지정
- MIME type : Multipurpose Internet Mail Extensions
바이너리 데이터인 첨부파일을 아스키 코드로 인코딩하여 본문에 덧붙이겠다는 뜻
메인타입/서브타입 으로 구성
- Connection
- 해당 요청이 끝난 후 클라이언트와 서버간의 연결을 계속 유지할 것인지 끊을 것인지 알려주는 헤더
- Keep Alive : 네트워크 연결 유지
- close : 더 이상 요청을 보내지 않으니 연결을 닫아라
- Content-Type
- HTTP 요청이 보내는 메시지 body 타입을 알려줌
- MIME type
- Content-Length : 요청이 보내는 메시지 body의 총 사이즈 정보
Empty Line
- 공백(빈줄)
- Header와 Body를 분리해주는 역할
Body
- HTTP 요청이 전송하는 실제 데이터를 담고 있는 부분
- 전송하는 데이터가 없다면 body부분은 비어있음
- GET 메서드 등의 경우 Body 부분 생략 가능함
Response
Status Line
HTTP 버전 / Status Code / Status Text
ex) HTTP/1.1 200 OK
- HTTP 요청 메시지의 헤더와 동일 → Header
- 단 User-Agent 헤더 대신 Server 헤더가 사용됨
Empty Line
Body
- HTTP 요청 메시지의 body와 동일
- 전송하는 데이터가 없으면 비어 있음
상태 Code & Text
100번대 : 정보 응답
- 요청을 받았으며, 작업을 계속함
- 요청을 처리중이라는 것을 알려주는 코드
200번대 : 성공 응답
대부분 성공을 의미함
300번대 : 리다이렉션 메시지
클라이언트가 요청을 마치기 위해 추가 동작을 취해야 함
400번대 : 클라이언트 에러
- 400 Bad Request : HTTP 요청이 잘못된 요청일 때, 주로 input값이 잘못됐을 때 사용
- 401 Unauthorized : 인증 실패, 주로 사용자 로그인 필요한 경우 사용
- 403 Forbidden : 접근 권한이 없음
ex. 회원만 볼수 있는 페이지를 비회원이 보려고 하는 경우
- 404 Not Found : 페이지 없음
500번대 : 서버 에러
서버가 요청을 수행하지 못함
- 500 Internal Server Error : 서버 내부 처리 중 오류 발생
HTTP & HTTPS 차이
HTTP
HyperText Transfer Protocol
하이퍼 텍스트 전송 프로토콜
HTTPS
HyperText Transfer Protocol Secure
하이퍼 텍스트 전송 프로토콜 보안
- 일반 HTTP 프로토콜의 문제점은 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는 다는 것.
=> 데이터가 쉽게 도난당할 수 있음
- SSL 인증서 : 데이터 암호화
- TLS(전송계층보안)프로토콜 : 데이터무결성 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웨사이트와 통신하고 있음을 입증하는 인증 기능 제공
참고