HTTP 프로토콜 구조와 상태코드

우리가 네트워크 통신을 하며, 서버와 클라이언트가 데이터 통신을 주고받을때 HTTP 프로토콜 규약에 맞춰 데이터를 통신할때 어떤구조로 오고 가는지 알아본다

 

해당 프로토콜 구조를 알게되면 다른 Open API나 설계하는 측면에서 좀더 유연한 사고를 가지게 될것이다

 

 

관련 게시글

- HTTP의 버전으로 보는 변천사 https://coco16.tistory.com/24

 

 

 

 

 

HTTP 프로토콜 구조


HTTP 주목해야할것은 Response(응답)과 Request(요청)에 주목하면된다

우리가 서버에서 요청을 보내면 해당 응답을 서버에서 클라이언트로 내려보내주며 이는 곧 모든 통신들은 대부분 Response와 Request로 이루어진다고 생각하면된다

 

HTTP의 전체적인 구조는 다음과같다

 

 

 

위에서부터 StartLine, Header, Blank Line, Body 이렇게 4개로 이루어지며 간단하게 Header와 Body가 있다고 보면된다

우선 먼저볼것은 StartLine 처음 HTTP 프로토콜에서 첫라인에는 메서드와 프로토콜 버전, 그리고 요청할려는 URL이 담긴다

 

 

POST /book/13 HTTP/1.1

 

맨앞에는 보내려는 HTTP Method 그리고 그뒤에는 요청보낼 경로 그뒤에는 HTTP의 버전이 나오는것을 확인할수있다

 

그다음 아랫줄에 오는 Headers는 추가정보를 담고있다고 생각하면된다

다양한 추가정보가 들어갈수있는데 Content type, language, Content-length 등 다양한 정보들이 Headers 정보에 담겨서 전송된다고 생각하면된다

 

 

 

POST /book/13 HTTP/1.1
Content-Type: application/json
Content-Length: 257
.. 등등

 

그다음은 Body부분으로써 비어있을수도, 무언가 있을수도 있다

Body에는 메세지의 내용 즉 데이터들이 들어갈수있는데 GET Method같은 경우에는 Body가 없는경우가 많으며, 보통은 API를 불러와서 데이터를 가지고올때 값이 클경우 Body에 데이터를 담아서 보내고 받는다

 

GET으로 Headers에 정보를 담아서 보내기에는 최대 한계가있다

 

 

 

 

POST /book/13 HTTP/1.1
Content-Type: application/json
Content-Length: 257
.. 등등

{
	"name": "Hyeonchul"
    	"age": "21"
    	"area": "gunsan"
}

 

이렇게 HTTP 프로토콜의 구조에 대해서 보았는데 여기에서 크게 달라지지 않는다. 다만 Response와 Request의 담기는 정보들이 살짝 다른다

 

Response에는 Response에만 담길수있는 정보들이있고 Request도 Request에만 담길수 있는 정보가 있다

대표적으로 우리가 알아야할것은 Response 즉 응답을 받을때 Start Line에 오는 상태코드에 대해서 알아볼필요가있다

 

 

HTTP/1.1 404 Not Found

 

우리가 요청을 보낼때는 요청할 URL에 주소를 보냈지만 응답을 받을때는 응답요청의 상태를 받아볼수있다

 

 

 

 

 

 

상태코드


200

- 정상적으로 응답이 수행되었음을 알려줌

 

301

- URL이 Redirect 즉 다른주소로 이동되었을때

 

400

- 오류중에 하나로써 클라이언트에서 잘못된 값 예를들어서 주소를 잘못썻다는지 아니면 올바른 데이터형식에 알맞춰 요청했다는지를 알려줌

 

500

- 400과는 다르게 서버오류로써 서버상에서 문제가 발생했을때 정상적으로 처리가 되었지 않음을 알려주는 코드