[HTTP] HTTP 통신(Stateless, Respond, Request, Status Code)

3910 단어 httphttp

면접에서 많이 물어보기 때문에 잘 알아두자

HTTP란 무엇인가?

  • 컴퓨터끼리 통신할 때 쓰는 하나의 통신 방법이다.

  • 프론트엔드와 백엔드가 데이터를 주고 받을 때 HTTP 규약을 지킬 것이다.

    Hyper Text: 문서와 문서가 링크로 연결되어 있음
    Transfer : HTML로 만든 웹페이지 문서(파일)를 보낸다
    Protocol : 규약. 컴퓨터끼리 어떻게 HTML 파일을 주고 받을 지에 대한 소통 방식 또는 약속

    HTTP의 특징

    1. 요청(request)과 응답(response)으로 이루어져 있다
      : 따라서 안물안궁이면 응답하면 안된다! 응답보다 요청이 먼저 이루어져야함
      client가 request를 보내면 server에서 response를 보내준다.

      1요청 1응답이다.

    2. 기억력없다(stateless)
      : 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야 한다
      (주로 token에 정보를 담아 요청하고 있음)

Stateless란 무엇인가?

HTTP 개별 통신은 모두 독립이어서, 과거의 HTTP 통신의 결과(상태)를 보존하지 않는다. 이를 stateless라고 하고, 그 반대로 이전의 결과를 보존하는 것을 statefull이라 한다.

그러면 결과를 보존하는 것이 더 효율적이고 간단하지 않을까? 그럼에도 불구하고 HTTP가 statefull이 아닌 stateless를 사용하는 이유는 무엇일까?

예를들어, 넷플릭스처럼 1초에 수천 개의 요청이 들어올 때 만약 HTTP가 statefull이라면 과부하가 온다. 그래서 각 요청을 별개로 사용하는 stateless를 선택한 것이다.

Request, Response의 구조

Request과 Response 메시지의 큰 구조는 시작, 헤드, 바디로 동일하나, 첫번 째 파트인 시작 부분이 조금 다르다.

Start Line(Request) : 첫번 째 줄이자 메시지의 제목

POST /login HTTP/1.1
  • HTTP method : 요청이 의도한 액션을 정의
  • Request target : 내가 요청을 보내고자 하는 곳. 요청을 받게되는 목표 url
  • HTTP version : HTTP의 버전

Status Line(Response) : 상태를 나타냄

HTTP/1.1 404 Not Found
HTTP/1,1 200 SUCCESS
HTTP/1.1 201 Created 
HTTP/1.1 204 No Content
  • HTTTP version : HTTP 버전
  • Status Code : 응답 상태 코드
  • Status Text : 응답의 상태를 간략히 설명하는 텍스트

바디 파트의 메시지 대신에 사용하는 이유는 짧고 통일성을 가지려고 ...!

Headers : 요청에 필요한 부가적인 정보(메타 데이터)를 담고있는 부분

  • {key:value}의 형태로 되어 있다
Headers : {
            Host : www.naver.com
            User-Agent : chrome
            Content-Type : application /json
            Content-Length: 50
}

Body : 본문. 실제 요청 내용

  • body 부분은 있을 수도 있고 없을 수도 있다. 메소드에 따라 존재 여부가 달라진다.
Body: {
        "password": "1234",
        "username" : lily
}
Body: {
        "message": "success",
        "token" : asdasdadjsahjk2h2j4hkdfjhsdk34
}

HTTP request method의 종류와 서로의 차이점

단순한 정보 요청은 GET, 보안상 중요한 정보 요청은 POST

GET

  • server에서 데이터를 받아오기만 할 때 사용
  • 웹페이지에 접속해서 필요한 데이터를 불러올 때 사용

POST

  • server에게 하는 request에 어떤 정보를 담아야할 때 사용
  • 데이터를 생성/수정할 때 사용
  • Body에 담는 내용이 핵심

DELETE

  • server에 있는 어떤 정보를 지울 때 사용

참고 : GET, POST, HTTPS의 보안

GET에는 Body 파트가 없다. 그렇기 때문에 요청에 대한 정보를 보낼 때 타겟URL에 담아서 보내게 된다.(예를 들어 로그인 url에 사용자 이름,비번까지 포함하여 보내는 것)

POST는 Body가 있기 때문에 최상단에서 노출되지는 않는다. 하지만 body가 취소당할 수 있기 때문에 POST가 언제나 안전한 것만은 아니다.

그래서 등장한 것이 Body를 암호화해서 보내는 HTTPS이다.


대표적인 Status code의 종류

Success

200 : OK
201 : Created  // 데이터가 잘 생성 또는 수정되었을 때
204 : No Content // 성공적으로 삭제되어 보내줄 body가 없을 때

Error

400 : Bad Request  // 요청이 잘못되었을 때 ex. 아이디 보내야되는데 비번보냄
401 : Unauthorized  // 나 너 누군지 몰라. 알려줘 . 로그인 필요한데 유저가 로그인 안 했을 때
403 : Forbidden  // 나 너 누군지 알아. 근데 너 권한 없어
404 : Not Found  // 너가 찾는 거 뭔지 아는데,, 그거 여기 없어

Server Error

500 : Internal Server Error  //  서버에서 예측하지 못한 에러. 
						     // 클라이언트는 무슨 문제인지도 모른다.

좋은 웹페이지 즐겨찾기