HTTP와 method

97woo·2022년 2월 14일
0
post-thumbnail

django로 crud 연습을 하다보니 get과 post의 대한 개념이 정확하지 않은 것 같아서.. http의 개념부터 확실히 잡고 가는게 좋을 것 같아 정리를 해보겠습니다.

1.http란?

HTTP(HyperText Transfer Protocol)의 약자이다
문자 그래도 hypetText로 만들어진 웹브라우저 위에서 동작하는 언어 들의 통신(transfer) 약속이다(protocol).

즉 컴퓨터들끼리 html파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.

1-1.http의 2가지 특징

(1)request, response
http 통신의 핵심 요청과 응답인데 전송시에 보내는 주체와 받는 주체가 있는 것처럼 통신시에도 보내는 주체는(요청)을 받는 주체는(응답)을 보낸다 request, response 즉 소통의 핵심은 요청과 응답이다.

(2)stateless
상태없음? 무슨 상태가 없다는 걸까??
http통신(요청/응답)은 독립적이다. 무슨 소리냐면 한 번 보낼때 필요한 정보를 보내고 보낸 내용을 저장하지 않는다 과거의 내용을 기록하지 않는다는 말이다.
필요한 정보가 있으면 매 번 요청해야 되는 것이다.
무상태는 항상 필요한 정보를 모두 보내야하기 떄문에 아무 서버나 호출해도 된다.
서버가 클라이언트 상태를 보존하지 않기떄문에
장점: 서버 확장성 높음(스케일 아웃)
단점: 클라이언트 추가 데이터 전송

2.Request

그러면 좀더 상세히 http의 요청에 대해서 알아보도록 하자 request는 프런트(클라이언트)에서 백엔드(서버)에 데이터처리를 시작하기 위해서 보내는 메세지이다.
메세지 구조는 크게 세 부분으로 구성되어있다.

(1)start line: 요청의 첫번째 줄

  • HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분, 주로 GET,POST,DELETE가 있다.
  • Request target: 해당 request가 전송되는 목표 url
  • HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다
  • Get /login HTTP/1.1
    get 메소드로 login 이라는 요청 타겟에 http 1.1버전으로 요청을 보낸다

    (2)Headers: 해당 요청에 대한 추가 정보(메타 데이터(목적을 가지고 있는 데이터))를 담고있는 부분이다.
    key: value값으로 되어 있다
    host: 요청을 보내는 타겟의 주소
    user-agent: 요청을 보내는 클라이언트의 대한 정보(chrome,fire fox,safari)
    content-type: 해당 요청이 보내는 메세지 body의 타입
    content-length: body내용의 길이
    authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 authroization에 담는다

    Headers: {
    Host:
    User-Agent:
    Content-Type:
    Content-Length:
    Authorization:
    }

    (3)body: 해당 요청의 실제 내용
    로그인 시에 서버에 보낼 요청의 내용

    Body: {
    "user_email": "kicaptain16@gmail.com"
    "user_password": "fc_seoul_8"
    }

    3.Response

    응답도 요청과 마찬가지로 메세지이다. 똑같이 3가지로 구성되어 있다.

    (1)start line: 응답의 상태 첫 줄

  • 응답은 요청에대한 처리상태를 클라이언트에게 전달하며 시작되며
  • status code: 응답 메세지의 상태코드
  • status text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
  • HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다
  • HTTP/1.1 200 SUCCESS
    HTTP/1.1 404 not-found
    프론트에서 보낸 요청에 대해서 성공했기 때문에 200 상태 메세지를 보낸다
    유저의 정보를 찾을수 없기 때문에 (Not found) 404 상태 메세지를 보낸다.

    (2)headers: 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분이다.

    (3)body: 요청의 body와 일반적으로 동일하다.

  • 요청의 메소드에 따라 body가 항상 존재하지 않듯이 응답도 전송할 필요가 없는 경우엔 body가 없는 경우도 있다.
  • 가장 많이 사용되는 body의 데이터 타입은 json(javaScript object notation)이다.
  • 로그인 요청에 대해 성공했을 때 응답의 내용

    Body: {
    "message": "SUCCESS"
    "token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
    }

    4.method

    이제 오늘의 http을 작성한 이유인 통신 메서드에 대해서 알아보도록 하자

    (1) GET

  • 이름 그대로 어떤 데이터를 서버로 부터 받아(GET)올 때 주로 사용
  • 데이터를 받아오기만 할때 사용한다.
  • 가장 간단하고 많이 사용되는 HTTP 메소드(사실 우리가 웹페이지를 띄울때 정보들을 모두 GET메소드로 요청을 보내서 받아온 응답을 뛰우는 것이다)
  • GET /shop/bag HTTP/1.1
    Headers: {

    "HOST": "https://www.apple.com/kr",
    "Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
    }

    (2)POST

  • 데이터를 생성/수정 할 때 주로 사용되는 메서드
  • 데이터를 생성 및 수정 할 떄 많이 사용되기에 요청에 body가 담긴다.
  • // (축약된 요청 메세지)
    POST /shop/bag HTTP/1.1
    Headers: {
    "HOST": "https://www.apple.com/kr"
    "Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
    }
    Body: {
    product: {
    "productId": 30
    "name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
    "color": "스페이스 그레이"
    "price": "₩1,499,000"
    "quantity": 1
    }
    }
    // (축약된 응답 메시지)
    HTTP/1.1 201 SUCCESS
    Body: {
    "message": "SUCCESSFULLY CARTS UPDATED"
    }

    (3)DELETE

  • 메소드 이름에서 유추 가능하듯, 특정 데이터를 서버에서 삭제 요청을 보낼떄 쓰는 메소드

    // (축약된 요청 메세지)
    DELETE /shop/bag HTTP/1.1
    Headers: {
    "HOST": "https://www.apple.com/kr"
    "Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
    }
    Body: {
    productId: 30
    }
    // (축약된 응답 메시지)
    HTTP/1.1 201 SUCCESS
    Body: {
    "message": "productId 30 DELETED"
    }

  • profile
    한 발씩 나아가는중

    0개의 댓글