HTTP의 구조와 핵심 요소
- HyperText Tranfer Protocol의 약자
- HTML 문서를 교환하기 위해서 만들어진 Protocol
- 어떠한 방식 또는 형태로 통신을 하자고 사전에 규정을 한 "통신 구조" 또는 "통신 형식이라고 보면 됨.
- 프론트앤드 서버 - 백엔드 서버 뿐 아니라 프론트앤드 서버와 클라이언트간의 통신에도 사용됨
- TCP/IP를 기반으로 규정되었다.
HTTP의 핵심 요소
- HTTP의 통신방식은 기본적으로 요청과 그에대한 응답으로 구성된다.
- 클라이언트가 서버에 HTTP Request(요청)을 보내면 서버는 HTTP Response(응답) 보내는 구조
- 클라이언트는 Request만 서버는 Response만 수행하는 것이 아니고 양 쪽에서 둘 다 수행할 수 있다.
- HTTP는 stateless하다.
- stateless란 state(상태)를 저장하지 않는다는 뜻
- 여러개의 요청과 응답이 서로 연결되지 않는다는 의미로 각각의 요청-응답은 독립적이다.
- 예를 들어서 1차로 현재시간을 요청하면 서버는 현재시간을 응답해주면 된다.
- 이후에 2차요청에서 1차 응답에서 사용된 시간을 요청한다면 문제가 발생한다는 의미
- 여러 요청과 응답이 필요한 경우에는 쿠키나 세션 등을 사용해야 한다.
- Request 구조
- Start Line
- start line 또한 3부분으로 구성된다.
- HTTP Method - 해당 request가 의도한 action을 정의하는 부분
- GET, POST, PUT, DELETE, OPTIONS 등등
- Request Target - 해당 request가 전송되는 목표지점
- /login, /user 등등
- HTTP Version - 사용되는 HTTP버전
- 1.0, 1.1, 2.0 등이 있다.
- HTTP Method - 해당 request가 의도한 action을 정의하는 부분
- start line 또한 3부분으로 구성된다.
- Headers
- 해당 Request에 대한 추가 정보를 가지고 있는 부분
- [KEY] : [VALUE] 로 구성된다.
- Headers 또한 3부분으로 나뉜다.
- 자주 사용되는 Headers 정보들
- Host - 요청이 전송되는 Target의 host url
- User-Agent - 요청을 보내는 클라이언트에 대한 정보
- Accept - 해당 요청이 받을 수 있는 응답(response) 타입
- Connection - 해당 요청이 끝난 후, 클라이언트와 서버간의 컨넥션 유지에 대한 부분
- Content-Type - 해당 요청이 보내는 메세지 body의 타입
- Content-Length - 메세지 body의 길이
- Body
- 해당 request의 실제 메세지 / 내용
- Body가 없는 request도 많음
- 예를 들면 GET request 같은 경우들
- Start Line
- Response 구조
- Status Line
- Response의 상태를 간략하게 나타내주는 부분
- 구조 ex)"HTTP/1.1 404 Not Found"
- HTTP 버전
- status code - 응답 상태를 나타내는 코드, 숫자로 이루어져있다.
- 200, 404 같은 코드들
- Status Text - 응답 상태를 간략하게 설명해주는 부분
- "Not Found" 같은 메세지들
- Headers
- Request의 headers와 동일하다.
- Response에서만 사용되는 header 값들이 있다.
- User-Agent 대신 Server헤더 등등
- Body
- Request의 body와 동일하다.
- Request와 동일하게 모든 Response에 body가 있는 것이 아님, 데이터를 전송할 필요가 있을 때만 body에 데이터를 채운다.
- Status Line
자주 쓰이는 HTTP Methods
- GET
- 어떤 데이터를 서버에서 받아(GET)올 때 주로 사용하는 Method
- 데이터 생성, 수정, 삭제 없이 단순하게 받아오기만 할 때 사용된다.
- 가장 간단하고 많이 사용됨
- body가 비어있는 경우가 많음
- POST
- 데이터를 생성, 수정, 삭제할 때 주로 사용하는 Method
- 대부분의 경우 body에 데이터가 채워져있다.
- 그외에 알고 있으면 좋은 Method
- OPTIONS
- 요청 URI에서 사용할 수 있는 Method를 확인할 때 사용한다.
- PUT
- POST와 비슷하게 데이터를 생성할 때 사용하는 Method
- POST와 겹치기 때문에 위치가 애매함, 최근에는 POST를 쓰는 추세
- DELETE
- 특정 데이터를 삭제하는 요청을 보낼 때 사용하는 Method
- POST를 사용해도 삭제가 가능해서 잘 안쓰는 편
- OPTIONS
자주 쓰이는 HTTP Status Code
- 200 - OK
- 문제없이 잘 실행되었음을 알리는 코드
- 301 - Moved Permanently
- 해당 URI가 다른 주소호 바뀌었음을 알리는 코드
- 400 - Bad Request
- 해당 요청이 잘못된 요청임을 알릴 때 사용하는 코드
- 401 - Unauthorized
- 해당 요청을 진행하려면 먼저 선행할 작업이 있다는 것을 알릴 때 사용하는 코드
- 403 - Forbidden
- 유저가 해당 요청에 대해서 권한이 없음을 알릴 때 사용하는 코드
- 404 - Not Found
- 요청한 URI가 존재하지 않을 때 사용하는 코드
- 500 - Internal Server Error
- 서버에서 에러가 발생했을 때 사용되는 코드
'wecode > TIL 정리' 카테고리의 다른 글
위코드 Pre Course - Django 개념과 흐름 (0) | 2020.08.08 |
---|---|
위코드 Foundation - HTTP RESTful API의 기본 (0) | 2020.08.08 |
자료구조 TIL - 1. Array, Tuple (0) | 2020.08.03 |
위코드 Pre Course - 파이썬의 Co-routine (0) | 2020.07.28 |
위코드 Pre Course - 웹 크롤링 (0) | 2020.07.28 |