기본적으로 request / response 구조로 되어 있음
상태를 저장하지 않는 형식을 가지고 있음(Stateless)
각각의 요청/응답은 독립 상태로, 여러 요청/응답끼리 연결되지 않음
(클라이언트가 요청을 보내고 응답을 받은 후, 다시 요청을 보내면 그 전의 상태를 알지 못함)
만약 여러 요청/응답의 진행 과정, 데이터가 필요할 때는 쿠키, 세션 등을 사용
(ex. 과거 로그인을 했을 경우 매번 새로 진행해야하기 때문에 과거의 로그인 정보를 첨부하여 쿠키 등에 포함해 request를 진행해야 함)
HTTP request는 크게 3부분으로 구성
1) Start LIne
2) Headers
3) Body
HTTP의 첫 라인으로 이 또한 3부분으로 구성되어 있음
HTTP Method
해당 request가 의도한 action을 정의
GET, POST, PUT, DELETE, OPTIONS 등이 있음
주로 GET, POST가 쓰임
1) GET
2) POST
3) PUT
4) DELETE
Request target
HTTP Version
GET / search HTTP / 1.1
해당 request에 대한 추가 정보를 담고 있는 부분으로 key:value형태로 되어 있음
(HOST: google.com -----> key : HOST, value = google.com)
headers 역시 general headers, request headers, entity headers로 구성
headers에는 아래의 정보가 담겨 있음(주로 메타 정보)
Host : 요청이 전송되는 target의 host url (ex. google.com)
User-Agent : 요청을 보내는 클라이언트에 대한 정보(ex. 웹브라우저 정보)
Accept : 해당 요청이 받을 수 있는 응답(response) 타입
Connection : 해당 요청이 끝난 후 클라이언트와 서버가 계속해서 커넥션을 유지할 것인지를 지시하는 부분
Content-Type : 해당 요청이 보내는 메세지 body의 타입(ex. application/json)
Content-Length : 메세지 body의 길이
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3
해당 request의 실제 메세지 / 내용
Body가 없는 request도 많음
(GET request들은 대부분 body가 없는 경우가 많음)
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와 마찬가지로 3부분으로 구성
1) Status line
2) Headers
3) Body
Response의 상태를 간략하게 나타내주며 3부분으로 구성
1) Http version
2) Status code : 응답 상태를 나타내는 숫자 코드(200, 301, 400 등)
- 200 OK : 문제가 잘 실행 되었을 때 보내는 코드
- 301 Moved Permanenely : 해당 URI가 다른 주소로 바뀌었을 때 보내는 코드
- 400 Bad Request
- 해당 요청이 잘못된 요청일 때 보내는 코드
- 주로 요청에 포함된 input 값들이 보내졌을 때 사용되는 코드
- 401 Unauthorized : 로그인, 회원 가입 등 유저가 해당 요청이 필요하다는 것을 나타내는 코드
- 403 Forbidden : 유저가 해당 요청에 대한 권한이 없다는 뜻(유료 컨텐츠 등)
- 404 Not Found : 요청된 uri가 존재하지 않는다는 뜻
- 500 Internal Server Error : 서버에서 에러가 났을 때 사용하는 코드(백엔드 에러)
3) Status text : 응답 상태를 간략하게 설명해주는 부분(Not Found 등)
Request의 header와 동일하나, user-agent 대신에 server가 사용
Request와 마찬가지로 데이터를 전송할 필요가 없을 경우 body가 비어있게 됨