728x90
HTTP(Hyper Text Transfer Protocol)
- 정의
- 웹 컨텐츠(HTML, 문서, 이미지, 파일 등)를 교환하기 위한 프로토콜
- 어떤 방식으로 데이터를 교환할 지 정해놓은 표준 규칙
- 연결 방식(HTTP 버전별 상이)
- 데이터 전송 방식(Method)
- 데이터 형식(Content - Type)
- 기능
- 다양한 클라이언트 - 웹서버 통신의 효율과 호환성을 높인다.
- 클라이언트 - 서버 간 데이터 통신은 다양한 방식으로 이뤄질 수 있다. 모든 클라이언트와 서버가 각각의 방식으로 데이터를 교환한다면 매번 방식이 달라서 번거롭고 복잡하다. HTTP는 통신 과정에서 모든 클라이언트와 웹서버가 표준적으로 사용할 규칙이다.
- Hyper Text로 분류되는 데이터를 교환하는 데 최적화 되어 있다.
- HTML 문서
- CSS 파일
- JavaScript 파일
- 기타 데이터 타입의 통신도 지원한다.
- Content - Type 헤더를 통해 다양한 미디어 타입을 교환할 수 있도록 지원한다.
- 이 덕분에, 다양한 유형의 데이터 전송이 HTTP 하나만 따르더라도 가능하다.
- 다양한 클라이언트 - 웹서버 통신의 효율과 호환성을 높인다.
- 용도
- 웹 서버 - 웹 브라우저 클라이언트 통신
- RESTful API 통신 : JSON 데이터만 주고받는 통신
- IoT Device 통신 : 웹서버 - IoT Device(사람이 아니라 기기가 자동으로 데이터 통신)
- Web Socket 통신 : HTTP로 소켓 연결 후, 연결을 지속적으로 유지하여 실시간으로 양방향 통신을 실행한다.
- Cloud Service : 클라우드 스토리지, 컴퓨팅, 데이터베이스 - 클라이언트
- Webhooks : 이벤트를 발생시키는 시스템과 이벤트를 수신하여 처리하는 시스템간의 통신이다. 웹 클라이언트가 없이도, 미리 설정해둔 ULR로 HTTP 요청을 자동으로 보내 이벤트를 알린다.
- HTTPS와의 차이
- HTTP방식의 프로토콜에 SSL/TLS를 사용하여 데이터를 암호화한 방식
- HTTP 메시지 구조는 동일하다
- Server쪽에 추가로 구현해야 할 사항이 있다.
- SSL/TLS 인증서 설치
- 서버 설정 : Apache,NginX 등 구성, 포트 443 설정
- 클라이언트와 연결 수립 후, 암호화 알고리즘 설정
- 암호화/복호화를 위한 성능 고려
HTTP에서 정해둔 규칙
- 연결 병식
- HTTP 버전 별로 상이하다
- HTTP/1.1
- 지속 연결(Persistent Connection)
- 하나의 TCP 연결을 통해 여러 요청과 응답을 전송한다
- HTTP/2
- 멀티플렉싱(Multi Flexing)
- 여러 요청과 응답을 동시에 전송 가능하다
- 데이터 전송 방식
- 클라이언트가 데이터를 어떻게 처리할지 서버에게 작업 내용을 알려주는 메세지다
- 각 타입에 따라 서버가 데이터를 다루는 액션이 달라진다
- GET : 리소스 조회
- POST : 리소스 생성
- PUT : 리소스 업데이트
- DELETE : 리소스 삭제
- HEAD : 리소스의 메타 데이터를 빠르게 조회한다.(데이터 없이 메타 데이터만)
- OPTIONS : 해당 서버에서 사용가능한 메소드를 확인한다
- 데이터 형식
- 보내거나 받는 데이터의 형식이다.
- MIME(Multipurpose Internet Mail Extensions) 타입을 사용하여 형식을 규정한다.
- HTML : text/html
- JSON : application/json
- Image : image/png, image/jpeg
HTTP 메시지
- HTTP를 따르는 클라이언트-서버 간 데이터 교환에 사용되는 데이터의 포맷이다.
# HTTP 메시지 예시
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
- 종류
- 요청(Request)
- 응답(Response)
- 구조
- 시작줄(Start Line)
- 요청 메세지
- HTTP method
- 요청 대상(URL)
- HTTP 버전
- GET <http://naver.com> HTTP/1.1
- 응답 메시지
- HTTP 버전
- 상태코드(Status Code)
- 상태메세지(Status Message)
- HTTP/1.1 200 OK
- 요청 메세지
- 헤더(Header)
- 메세지에 대한 메타데이터
- Content - Type : 메세지 본문의 유형(MIME type)
- Content-Length : 메세지 본문의 길이(byte)
- Connection : keep-alive 지속 연결(HTTP/1.1의 기본 값)
- Authorization
- 서버에 대한 클라이언트의 인증정보
- 기본 인증 방식으로 사용
- : username: password 를 BASE64로 인코딩 Basic YWRtaW46cGfzc3lsfQ=
- 베어러 토큰 방식으로 사용
- : OAuth 2.0 토큰 기반 인증 시스템에서 발급 받은 토큰 넣기 Bearer access_token_from_oauth
- 빈 줄(Empty Line)
- 헤더와 본문 구분
- 본문(Body)
- 실제 전송하려는 데이터
- 메소드나 상태에 따라 본문이 없을 수 있다.
- 시작줄(Start Line)
728x90
'Computer > 서버 & 네트워크' 카테고리의 다른 글
CGI(Common Gateway Interface) (0) | 2024.02.27 |
---|---|
스트림 소켓(Stream Socket) / 데이터그램 소켓(Datagram Socket) (0) | 2024.02.27 |
웹 서버 (0) | 2024.02.25 |
파일 식별자File Descriptor(FD) (0) | 2024.02.25 |
소켓/소켓 API (0) | 2024.02.25 |