HTTP 구조 및 핵심 요소

HTTP란?

  1. HyperText Transfer Protocol
    HTML(Hyper Text Markup Language) 문서를 교환하기 위해서 만들어진 protorol, 통신 규약
  • **웹에서 서버와 서버가 통신을 할 때 어떤 형식으로 통신하자고 규정해놓은 통신 형신 및 통신 구조.
    **
  • 프론트엔드 서버와 클라이언트간의 통신, 백엔드와 프론트엔드 서버 간의 통신. 즉 서버와 서버 간의 통신에서 사용된다.
  • TCP/IP 기반으로 되어 있다 ( 이게 뭔지 잘 모르겠으므로 찾아봐야 함)
    Hyper Text를 교환하기 위한 Protocol이라고 하는데 솔직히 난 이 protocol 느낌이 잘 뭔지 잘 모르겠음. 그래서 찾아봄


그래 대략 뭔가를 주고 받기 위한 공식적인 약속...그런 느낌이다

그러면 왜 규칙이 필요한 것일까? 우리가 뭔가를 주고 받는다고 할 때, 어떻게 주고 받을지를 생각해보자.
사람들이 회의를 한다고 하면, 그 회의는 어떻게 이루어 지는가? 만나서 한다고 하면 서로 이야기를 할 것이다. 그러면 그 이야기를 할 때에는 언어로 말을 할 것이다. 그러면 그 사용되는 언어는? 한국어이겠지.
만약 누군가는 프랑스어로 말을 한다고 하면 회의가 잘 진행될 수 있을 까? 만개국어 능력자가 있으면 좋겠지만 보통은 아니다. 우리가 서로를 이해하기 위해서 서로 알아들을 수 있는 언어로 소통을 하는 것 처럼, 우리도 소통을 하기 위해서는 서로 알아들을 수 있는 언어. 즉 규칙이 있어야 한다.

그리고 그 규칙을 어떤 식으로 적느냐에 따라서 이해하는 내용이 달라지는 것이다. 그래서 양자가 서로를 이해하기 위해서 정해 놓은 규칙이 프로토콜! 이다.

오케이 이해했어! 근데 이거 누가 만들었음?


_
팀 버너리 님께서 만드셨다!! 그는 그 유명한 World Wide Web을 만든 사람!!!!
개인적으로 CS를 공부하면서 신기한 것은 이런 학자들? 발명가들이 현시대에 나와 같이 살아있다는 점이다. 살면서 볼 수 있을까? _

그러면 우리가 대화를 할 때에는 소리, 음파로 서로의 목소리를 들을 수 있는데 서버와 서버는 어떻게 서로를 확인하는 걸까? 바로 인터넷. 네트워크이다. 왜냐면 네트워크는 서로 연결이 되어 있지 않으면 아예 보낼 수 없으니까! 우리가 아무리 백엔드에 서버 요청을 해도, 그 백엔드 서버가 꺼져 있으면 아무것도 받을 수 없숴

( 열심히 fetchData를 짠 당신...하지만 응답이 오질 않는다. 내 코드에 문제가 있나? 식은땀이 나기 시작함. 어 이게 왜 이러지 이렇게 요청하는거 아닌가? 당황하다가 혹시 몰라 백엔드 팀원에게 가서 "...호..혹시 서버 꺼져 있나요?" "어맛 죄송해요 켜드릴게요~~" 대략 이런 상황 )

그러면 서버와 서버가 전송하는 것은? 비트이다. 이 비트를 추상화 하면 텍스트(문자열)이 전송된다. 그리고 이 문자열이 어떤 규칙으로 보내느냐에 따라서 이해가 달라진다.

HTTP의 핵심 요소

  • HTTP 통신 방식
    우선 기본적으로 HTTP는 요청과 응답 (request and response) 구조로 되어있다.
    클라이언트가 HTTP request를 서버에 보내면, 서버는 HTTP response를 보내는 구조이다.
  • HTTP는 stateless이다.
    state less ? 말그대로 상태를 저장하지 않는 다는 뜻이다.
    요청이 오면 요청에 대한 응답을 할 뿐, 여러가지 요청과 응답이 서로 연결되어 있지 않는다. 각각의 요청에 대한 각각의 응답. 즉 각각이 독립적인 요청과 그에 대한 응답.
    만약 클라이언트에서 요청을 보내고 응답을 받았다. 그리고 몇 분 후에 다시 요청을 보낼 때, 서버는 이전에 보낸 요청이나 응답에 대해서 알지 못하는 것이다.
    그래서 만약 응답과 요청에 대한 진행 과정이나 데이터가 필요할 때, ( 예를 들면 로그인을 할 때 이 사람이 로그인을 한 사람인지 아닌지에 대한 정보)는 쿠키나 세션 등을 이용하게 된다. 아니면 그런 정보를 요청에 첨부해서 보내는 방법도 있다.

HTTP Request의 구조

  • Http request는 크게 세가지 부분으로 구성되어 있다.
  1. status line
  2. Headers
  3. Body

Start Line

시작 줄(start-line)에는 실행되어야 할 요청 혹은 요청 수행에 대한 성공 또는 실패가 기록되어 있다.
이 start Line은 우선 3부분으로 구성 되어 있다.

  • HTTP Method
    우선 request가 의도한 action을 정의한다.
    HTTP method에는 GET, POST, PUT, DELETE, OPTIONS 등등이 있다.
    주로는 GET과 POST가 쓰인다.
  • Request target
    해당 요청이 전송되는 목표 ( 엔드 포인트 )
    만약 로그인을 해야 한다면 /login 이 되겠지?
  • HTTP Version
    말 그대로 Http 버전. 1.0, 1.1, 2.0이 있다고 하는데 이 버전의 차이는 더 공부해봐야 할 것 같다.
PUT /create_user HTTP/1.1 

Headers

해당 정보에 대한 추가 정보를 담고 있는 부분.
예를 들면 request 메세지 바디의 총 길이 ( content-Length)
Key: Value로 되어 있음.
HOST : naver.com
여기서 Key는 HOST value는 naver.com 이다.

여기서의 Headers 크게 세가지 부분으로 나뉘어진다.
general headers, request headers, entity headers

  • 자주 사용되는 Header 정보
    -Host : 요청이 전송되는 target의 host url
    즉 요청을 보내는 서버에 대한 정보이다.
  • User-Agent : 요청을 보내는 에이전트 클라이언트에 대한 정보
    만약에 유저가 크롬을 쓰면 그 클라이언트는 크롬이 된다.
    혹은 유저에 대한 정보 ( 광고를 위해서 )
  • Accept
    어떤 스타일로 줘! 요청이 받을 수 있는 응답 (response) 타입
  • Connection
    요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 커넥션을 유지할 것인지 아니면 끊을 것인지에 대해서 지시하는 부분이다.
  • Content-type
    내가 너한테 보내고 있는 메세지 body의 데이터 타입이 이거야!
    만약 JSON을 보낸다면 application/json 이다.
  • Content-Length
    메세지 body의 길이

Body

  • 해당 request의 실제 메세지/ 내용
  • Body가 없는 request도 많다. Get request는 대부분 body가 없다. 그냥 있는 데이터를 받아오니까

POST /api/ValidateTwitterFollowerCount HTTP/1.1
Host: myazurefunction.azurewebsites.net
Content-Type: application/json
cache-control: no-cache
Postman-Token: XXXXXXX-XXXXX-XXXXXX
{
"followersCount" : 220,
"tweettext":"#Stack Overflow rocks",
"Name": "John Doe"
}

HTTP Response의 구조

  • response도 request와 마찬가지로 크게 3가지 부분으로 구성되어 있다.
  • Status line
  • Headers
  • Body

Status Line

response의 상태를 간략하게 나타내주는 부분이다. 요청에 대한 응답이기 대문에 가장 먼저 너 이 요청 처리되었어! 너 이거 문제 있어! 라고 알려주는 것

또한 세가지 부분으로 구성되어 있다.

  • HTTP 버전
  • Status code : 응답 상태를 나타내는 코드, 숫자로 되어 있는 코드 ex) 200
  • Status text : 응답의 상태를 간략하게 설명해주는 부분. 숫자로만 표현하면 사람들은 이해하기 어려우니까 첨부해서 알려주는 것이다.
    ex) Not Found

HTTP/1.1 404 Not Found.

_야 너 이거 잘못 알려줬어. host는 맞는데 target 틀렸어. 우리 아파트 맞는데 우리 그런집 없어~

Headers

  • Request의 headers와 동일하다. 다만 Response에서만 사용되는 header 값들이 있다.
    User Agent 대신에 Servert 헤더가 사용된다든지.

Body

  • Request의 body와 일반적으로 동일하다.
    request와 마찬가지로 모든 response에 body가 있지는 않다. 데이터를 전송할 필요가 없는 경우에는 body가 비어 있다.

자주 쓰는 HTTP Methods

GET

어떠한 데이터를 서버로 부터 받아올 때 사용한다.
데이터의 생성, 수정, 삭제 없이 그냥 받아올 때 사용한다.
가장 간단하고 많이 사용되는 메소드이다. 그냥 받아오는 것이기 때문에 body를 안보내는 경우가 많다.

POST

데이터를 생성, 수정, 삭제 할때 주로 사용되는 Method이다.
데이터를 생성, 수정할 때 많이 사용하기 때문에 대부분 request body가 포함되어서 보내진다.

알고있으면 좋은 HTTP Methods

Options

주로 요청 uri에서 사용할 수 있는 method를 받아올 때 사용한다.
/update uri 라면, 어떤 메소드를 사용할 수 있는지 get 인지 post인지 알고 싶으면 먼저 options 요청으로 사용해서 확인 할 수 있다.

자주 쓰이는 HTTP Status Code

  1. 200 OK
    문제없이 다 잘 실행 되었을 때 보내는 코드
  2. 301 Moved Permanently
    해당 uri가 다른 주소로 바뀌었을 때 보내는 코드.
  3. 400 Bad Requesgt
    요청이 잘못되었을 때 보내는 코드
    주로 요청에 포함된 input 값이 잘못 보내졌을 때 사용된다.
    전화번호를 보내야 하는데 text가 왔다든지 하는 경우
  4. 401 Unauthorized
    유저가 해당 요청을 하려면 로그인이나 회원가입을 해야 하는데 되어 있지 않아 그것이 필요함을 나타내려 할 때 쓰는 코드
  5. 403 Forbidden
    해당 요청에 대해서 유저가 권한을 가지고 있지 않을 때
    접근 권한 없음! 회원 혹은 관리자만 볼 수 있는 페이지 일때
  6. 500 Internal Server Error
    서버에서 에러가 났을 때 사용되는 코드

출저 : Wecode HTTP 세션, MDN
https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

profile
나는야 코린이 하지만 무럭무럭 자라고 있죠

0개의 댓글