http란 ?
http는 HyperText Transfer Protocol의 약자로, 인터넷 상에서 정보를 주고 받을 수 있는 프로토콜.
즉, 웹 상에서 서로 통신할 때 어떠한 방식으로 통신하자고 정해놓은 약속을 의미한다.
http의 구조
http는 요청(Request)와 응답(Response)로 구성되어 있고, 클라이언트가 요청하면 서버가 응답을 하는 구조로 되어 있다.
또, http는 Stateless 이다. 즉 상태가 저장되지 않는다는 뜻이다. 각 요청과 응답은 독립적이며, 만약 서로 연관성있게 연결되어야 한다면(로그인) 세션 또는 쿠키를 이용한다.
이해를 돕기 위해 사진을 보면, http의 request는 세 가지 부분으로 이루어진다.
- start line
- header
- body
먼저 start line부터 보자
Request
POST / HTTP/1.1
먼저 POST는 http 메소드로 GET, POST, PUT, DELETE 등등이 존재한다. 대부분 GET과 POST를 많이 사용한다.
GET은 주로 URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청할 때 사용하고, POST는 요청 URI(URL)에 폼 입력을 처리하기 위해 사용한다. 즉 무언가의 입력을 바탕으로 서버로부터 정보를 받아오고 싶을 때 주로 사용한다.
/
위 사진에서 / 에는 아무것도 쓰여 있지 않지만, 주로 도메인의 절대주소나 URL 등이 들어간다.
1.1
http 버전을 의미한다.
header에는 여러가지 정보들이 담겨있는데, 서버의 호스트를 알려주는 Host, 유저가 어떤 브라우저와 환경에서 요청을 보내는지 저장하는 User-Agent 등등.. 궁금한 것은 각각 구글에 검색하면 나올 것이다.
body는 POST요청을 보낼 때 사용한다. GET 요청같은 그저 리소스를 가져오는 요청에는 body를 사용할 필요가 없다.
만약 서버에다가 body에 내 이름을 담은 json을 담아서 넘길 때 서버가 내 전화번호를 넘기기로 약속했다면, 서버에 전화번호를 요청하고 싶을 때 계속 내 이름을 담은 json을 담아 넘기면 되는 것이다. 공공데이터 API에서 이런 형태가 많이 보인다.
Response
http의 Response는 Request와 거의 똑같다.
우선 다른점은, start line에서 맨 뒤에 성공이나 실패를 알려주는 코드가 추가된다는 점이다. 많이들 봐왔을 404 코드나 200 성공 코드 같은 것들이 뒤에 따라붙는다.
header는 Request와 몇몇 다른 부분이 존재한다. 워낙 수가 많기 때문에 개발하다 궁금해질 때 그 부분을 찾아보는게 좋을 것 같다.
Response의 body에는 GET이나 POST 요청에 따른 html이나 json, xml 같은 정보들이 들어가 있다. 물론 모든 Response의 body에 정보가 들어가있진 않다.