[HTTP] #6. HTTP

김상웅·2022년 6월 3일
0

[Computer Science]

목록 보기
6/10

우리가 누군가에게 편지를 쓰면 그 편지를 보내야 받는 사람이 우리의 마음을 전달받을 수 있습니다.

편지만 써놓고 보내지 않으면 편지로서의 의미가 사라집니다.

웹도 마찬가지로, 당장 사회에 필요한 서비스를 개발했는데도 불구하고 내 로컬 컴퓨터에서만 사용한다면 사회적으로 의미가 없어집니다.

누군가 서비스에 로그인을 하고, 필요한 기능을 사용할 수 있다면 정말 좋겠죠?

이런 안타까운 사연이 생기는 것을 방지하기 위해 컴퓨터의 통신 방법에 대해 알아보겠습니다.



✅ HTTP


사람은 한글, 영어, 몸짓을 통해 다른 사람과 의사소통을 합니다.

그렇다면 컴퓨터는 어떻게 소통을 할까요?

그 소통 방법을 정한 것을 HTTP라고 할 수 있습니다.

1. 정의

Hyper Text Transfer Protocol의 약자로 Hyper Text 통신 규약을 의미합니다.

즉, 컴퓨터로/컴퓨터를 통해 HTML 파일을 주고 받는다는 것을 말합니다.

2. 특징

  • 요청이 없으면 응답을 할 수 없습니다.
    1요청 1응답을 원칙으로 합니다.

  • Stateless 독립적인 개별 통신으로, 이전 통신 결과를 보존하지 않습니다.
    즉, 통신을 할 때마다 필요한 정보를 담아서 요청을 보내야 원하는 응답을 받을 수 있습니다.
    여기서 상태가 없다는 의미는 기억력이 없다는 뜻으로 이해하면 수월할 것입니다.

cf. Stateful는 stateless 와 상반되는 의미로 상태를 완전히 보존하고 있는 것을 의미합니다.
즉 이전 결과를 기억한다는 것이죠. 하지만 우리는 stateless한 요청에 따른 응답이라는 규약을 따라주어야 합니다.

📌 Request

  • 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..."
    }

📌 Response

  • 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..."
    }


✅ HTTP Request Methods


GET

특정 데이터를 받아올 때, 요청할 때 사용합니다.

주로 웹페이지 url에 접속해서 필요한 데이터를 불러올 때 사용합니다.

POST

데이터를 생성하거나 수정할 때 사용하는 요청입니다.

Body에 담는 내용이 데이터를 생성하거나 수정하는 핵심 내용을 가리킵니다.

DELETE

서버에 저장된 특정 데이터를 삭제하는 요청입니다.



✅ Status Code


Success

200번대

200:OK

가장 자주 보게되는 상태 코드입니다.

문제 없이 요청에 대한 처리가 이루어졌을 때 나오는 상태 코드입니다.

201:Created

무언가가 잘 생성 되었다는 상태 코드입니다.

POST 요청에 따라 서버에서 생성되거나 수정이 잘 되었다는 상태 코드입니다.

204:No Content

요청을 성공했으나 서버 측에서 제공할 응답 메시지가 없음을 알려주는 상태 코드입니다.

주로 DELETE 요청에 따라 서버에서 성공적으로 데이터가 삭제되었을 때 볼 수 있습니다.

Error

400번대

400: Bad Request

해당 요청 잘못되었음을 알려주는 상태 코드입니다.

Body에 보내는 내용이 잘못되었을 때 사용됩니다.

401: Unauthorized

특정 요청을 했을 때, 로그인과 회원가입이 필요하다는 상태 코드입니다.

403: Forbidden

유저가 해당 요청에 대한 권한이 없다는 것을 알려주는 상태 코드입니다.

유저가 접근 불가능한 정보에 접근했을 경우에 사용합니다.

404: NotFound

요청 url이 존재하지 않을 때 사용되는 상태 코드입니다.

Server Error

500: Internal Server Error

서버에서 에러가 났을 때 상태 코드입니다.

profile
누구나 이해할 수 있도록

0개의 댓글