<깔끔한 파이썬 탄탄한 백엔드 책 참조>
1. HTTP 통신방식
HTTP의 통신 방식에는 2가지 특징이 있다.
- 요청, 응답 방식
- stateless
1-1. HTTP 요청과 응답
클라이언트가 서버에 요청한 정보를, 서버는 클라이언트에게 응답 해주는 방식이다.
request - response 방식.
1-2. stateless
HTTP 통신은 상태가 없음(stateless)의 특징을 가진다. 모든 통신(요청-응답 과정)은 독립적이다. 동일한 클라이언트와 동일한 서버간에서의 통신들이어도 독립적이라는 특징을 가진다. 이 덕에 서버 디자인이 훨씬 간단해지고 효과적이게 된다.
그러나 매 번 통신에 필요한 모든 정보를 담고 요청-응답을 해야 하는 단점이 있기는 하다(예를 들어, 로그인 한 후의 로직은 로그인 정보를 함께 담아 통신해야 한다).
이러한 문제점을 보완하기 위해 session, cookie라는 개념을 만들었다.
추가 정보들을 담는 파일을 의미하는데
- cookie
- 웹 브라우저, 클라이언트 측에서 데이터를 저장
- session
- 서버 측에서 데이터를 저장
2. HTTP 요청 구조
HTTP의 요청, request는 다음과 같은 구조로 되어있다.
POST /payment-sync HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3
{
"imp_uid": "imp_1234567890",
"merchant_uid": "order_id_8237352",
"status": "paid"
}
위 request message는 크게 세 부분으로 구성되어있다.
- 맨 첫줄의 Start Line
- Start Line 이후, 중괄호의 Body시작 전까지의 Header
- 중괄호로 구성된 Body
각각의 의미는 다음과 같다.
2-1. Start Line
Start Line은 세 부분으로 구성되어있다.
HTTP method, Request target, HTTP version
POST, 목표 주소, version
POST /payment-sync HTTP/1.1
2-2. Headers
HTTP 요청 그 자체에 대한 정보(메타데이터)를 담고 있다.
key:value 쌍으로 저장되어있다.
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3
- Host
- request가 전송되는 target의 host url 주소를 알려주는 헤더
- User-Agent
- 요청을 보내는 클라이언트에 대한 정보 - ex) 웹 브라우저에 대한 정보
- Accept
- 해당 요청이 받을 수 있는 body의 data type에 대한 정보
- Connection
- 해당 요청이 끝난 후에 계속하여 클라이언트와 서버의 연결을 유지시킬건지 아닌지 확인
- Content-type
- HTTP 요청이 보내는 메시지 body의 type을 알려줌
- Content Length
- HTTP 요청의 메시지 body의 총 size를 알려줌
2-3. Body
HTTP 요청이 전송하는 데이터를 담고 있는 부분. 전송하는 데이터가 없으면 body부분은 비어 있음.
3. HTTP 응답 구조
얘도 request와 마찬가지로 크게 세 부분으로 나뉜다.
Status Line, Headers, Body 이다.
3-1. Status Line
404 not found라는 걸 본 적이 있는가? 이때의 404는 status code, not found는 status text를 의미한다.
HTTP/1.1 404 Not Found
- http version
- "HTTP/1.1"
- http status code
- "404"
- http status text
- "Not Found"
3-2. header와 body
request header와 request body와 동일한 역할을 한다.
4. 자주 사용되는 HTTP method
- GET
- 어떠한 데이터를 서버로부터 요청할 때 주로 사용하는 메소드이다. 단순히 데이터를 받아올 때 사용한다.
- 이때 HTTP요청의 body는 비어있는 경우가 많다.
- POST
- 데이터 생성, 수정, 삭제 요청을 할 때 주로 사용한다.
- OPTIONS
- 특정 엔드포인트에서 허용하는 메소드들이 뭐가 있는지 알아보기 위한 요청에서 사용된다.
- PUT
- 데이터를 처음 생성할 때 사용하는 메소드이나, POST로 대체가능해 잘 안쓴다.
- DELETE
- 데이터를 삭제할 때 사용하는 메소드이나, 이 역시 POST로 대체가능해 잘 안쓰인다.
5. 자주 사용되는 HTTP Status Code, Text
- 200 OK
- HTTP 요청이 문제없이 잘 처리가 됐을 때 볼 수 있는 자주 보고 싶은 친구다.
- 301 Moved Permanently
- HTTP 요청을 보낸 엔드포인트의 URL 주소가 변경되었다는 것을 나타내는 상태코드이다.
- 보통 해당 엔드포인트의 새로운 주소를 담은 Location header가 HTTP 응답에 포함되는게 일반적이다.
- 이렇게 새로운 주소에 해당 요청을 다시 보내는 것을 redirection 이라고 한다.
- 400 Bad Request
- HTTP 요청이 잘못된 요청일 때 보내는 응답 코드이다.
- 주로 요청에 포함된 인풋 값들이 잘못되었을 때 주로 볼 수 있다.
- 401 Unauthorized
- HTTP 요청 처리를 위해 신분확인이 요구되나, 확인할 수 없었을 때 보내는 응답 코드이다.
- 주로 로그인이 필요한 경우 401 response를 보낸다.
- 403 Forbidden
- HTTP 요청을 보내는 주체가 해당 요청에 대한 권한이 없음을 나타내는 응답 코드이다.
- 404 Not Found
- HTTP 요청을 보내고자 하는 URI가 존재하지 않을 때 보내는 응답 코드다.
- 500 Internal Server Error
- 내부 서버 오류가 발생했다는 것을 의미한다.