우리가 누군가에게 편지를 쓰면 그 편지를 보내야 받는 사람이 우리의 마음을 전달받을 수 있습니다.
편지만 써놓고 보내지 않으면 편지로서의 의미가 사라집니다.
웹도 마찬가지로, 당장 사회에 필요한 서비스를 개발했는데도 불구하고 내 로컬 컴퓨터에서만 사용한다면 사회적으로 의미가 없어집니다.
누군가 서비스에 로그인을 하고, 필요한 기능을 사용할 수 있다면 정말 좋겠죠?
이런 안타까운 사연이 생기는 것을 방지하기 위해 컴퓨터의 통신 방법에 대해 알아보겠습니다.
사람은 한글, 영어, 몸짓을 통해 다른 사람과 의사소통을 합니다.
그렇다면 컴퓨터는 어떻게 소통을 할까요?
그 소통 방법을 정한 것을 HTTP
라고 할 수 있습니다.
Hyper Text Transfer Protocol
의 약자로 Hyper Text 통신 규약을 의미합니다.
즉, 컴퓨터로/컴퓨터를 통해 HTML 파일을 주고 받는다는 것을 말합니다.
요청이 없으면 응답을 할 수 없습니다.
1요청 1응답을 원칙으로 합니다.
Stateless
독립적인 개별 통신으로, 이전 통신 결과를 보존하지 않습니다.
즉, 통신을 할 때마다 필요한 정보를 담아서 요청을 보내야 원하는 응답을 받을 수 있습니다.
여기서 상태가 없다
는 의미는 기억력이 없다
는 뜻으로 이해하면 수월할 것입니다.
cf. Stateful
는 stateless 와 상반되는 의미로 상태를 완전히 보존하고 있는 것을 의미합니다.
즉 이전 결과를 기억한다는 것이죠. 하지만 우리는 stateless
한 요청에 따른 응답이라는 규약을 따라주어야 합니다.
start line
구조는 다음과 같습니다. METHOD RQ_TARGET HTTP_version
요청의 첫번째 줄을 의미합니다.
METHOD
요청 행동을 가리킵니다. 다음 소제목에서 확인할 수 있습니다.
RQ_TARGET
: 요청 전송 목표 url을 가리킵니다.
HTTP_version
http 버전을 가리킵니다.
headers
구조는 다음과 같습니다. {key: value}
요청의 메타데이터를 담고 있습니다.
Headers : {
Host: 기본 주소 (url)
User_Agent: 클라이언트에 대한 정보
Content-Type: body의 타입 (image, json ,application...)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위한 토큰 정보
}
body
구조는 다음과 같습니다. {key: value}
요청의 실제 내용을 담고 있습니다.
요청 메서드에 따라 존재하지 않을 수도 있습니다.
Body : {
email: "aaa@velog.io"
password: "sdfa3f2g@#V23424b3..."
}
status line
구조는 다음과 같습니다. HTTP_version Status_Code Status_Text
응답의 첫번째 줄을 의미합니다.
HTTP_version
http 버전을 가리킵니다.
Status_Code
응답상태코드를 가리킵니다. 다음 소주제에서 확인할 수 있습니다.
Status_Text
응답 상태 설명을 가리킵니다.
headers
구조는 다음과 같습니다. {key: value}
응답의 메타데이터를 담고 있습니다.
Headers : {
Host: 기본 주소 (url)
Server: 클라이언트에 대한 정보
Content-Type: body의 타입 (image, json ,application...)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위한 토큰 정보
}
body
구조는 다음과 같습니다. {key: value}
응답의 실제 내용을 담고 있습니다.
요청 메서드에 따라 존재하지 않을 수도 있습니다.
status_line의 status text와 달리 서버 개발자가 원하는 메시지를 보내줄 수 있습니다.
Body : {
email: "aaa@velog.io"
password: "sdfa3f2g@#V23424b3..."
}
특정 데이터를 받아올 때, 요청할 때 사용합니다.
주로 웹페이지 url에 접속해서 필요한 데이터를 불러올 때 사용합니다.
데이터를 생성하거나 수정할 때 사용하는 요청입니다.
Body에 담는 내용이 데이터를 생성하거나 수정하는 핵심 내용을 가리킵니다.
서버에 저장된 특정 데이터를 삭제하는 요청입니다.
200번대
200:OK
가장 자주 보게되는 상태 코드입니다.
문제 없이 요청에 대한 처리가 이루어졌을 때 나오는 상태 코드입니다.
201:Created
무언가가 잘 생성 되었다는 상태 코드입니다.
POST 요청에 따라 서버에서 생성되거나 수정이 잘 되었다는 상태 코드입니다.
204:No Content
요청을 성공했으나 서버 측에서 제공할 응답 메시지가 없음을 알려주는 상태 코드입니다.
주로 DELETE 요청에 따라 서버에서 성공적으로 데이터가 삭제되었을 때 볼 수 있습니다.
400번대
400: Bad Request
해당 요청 잘못되었음을 알려주는 상태 코드입니다.
Body에 보내는 내용이 잘못되었을 때 사용됩니다.
401: Unauthorized
특정 요청을 했을 때, 로그인과 회원가입이 필요하다는 상태 코드입니다.
403: Forbidden
유저가 해당 요청에 대한 권한이 없다는 것을 알려주는 상태 코드입니다.
유저가 접근 불가능한 정보에 접근했을 경우에 사용합니다.
404: NotFound
요청 url이 존재하지 않을 때 사용되는 상태 코드입니다.
500: Internal Server Error
서버에서 에러가 났을 때 상태 코드입니다.