TIL) HTTP 누구냐 넌.....

Solmii·2020년 6월 10일
3
post-thumbnail

HTTP....네트워크...서버...통신....
WOW 무섭고 어려운 말 밖에 없군요....! WOW
HTTP 세션 시작하기 전부터 엄청 걱정걱정했는데ㅠㅠ
세션 후에 진행된 방탈출 게임같은 실습이 너무 재밌어서 공포증이 쪼끔 치료됐당ㅎ
웹개발자라면 모르면 안되는 개념이니까, 잘 정리하고 이해해보자!!


   HTTP란?   

HTTP는 (HyperText Transfer Protocol) 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약)을 의미한다.

그러니까 웹상에서 네트워크를 통해 서버끼리 통신을 할 때, 우리 이러이렇게 통신 하자고 정해놓은 통신 형식을 말하는 것!

프론트앤드 서버 ↔클라이언트 간의 통신이나,
백앤드 ↔프론트앤드 서버간의 통신에도 사용된다.

또한 HTTP는 TCP/IP 기반(IP를 받아서 이루어지는 모든 통신)으로 이루어져있다.


   HTTP의 핵심 요소   

HTTP 통신 방식

HTTP는 기본적으로 요청(request) 과 응답(response) 구조로 되어있다.


위 그림처럼, 클라이언트가 HTTP request를 서버에 보내면, 서버는 HTTP response를 보내는 구조다.

클라이언트와 서버의 모든 통신은 request 와 response 로 이루어져있다.

여기서 클라이언트란!
웹 브라우저... 핸드폰 어플리케이션...등 서버의 자료에 접근할 수 있는 프로그램을 말한다!

request가 가면, response가 와야 한다.

(설령 error가 나더라도, error라고 응답 해줘야한다. 무응답이면 통신이 불안정한 것)

또한, HTTP는 Stateless 다. Stateless? 상태 없~다?

맞다! 말그대로 상태(state)를 저장하지 않는다는 뜻이다.

즉, 요청이 오면 그때그때 응답할 뿐! 특정 요청, 응답 끼리 연결되어 있지는 않다.
(각각의 요청, 응답은 독립적인 요청, 응답이다.)

예를 들어, 클라이언트가 요청을 보내고 응답을 받은 후 조금 있다 다시 요청을 보낼때, 전에 보낸 요청, 응답에 대해 알지 못한다. (완전 금붕어 기억력.....영구 없~다 ㅇㅈ)

그래서 만일 여러 요청과 응답의 진행과정이나 데이터가 필요할때는 쿠키나 세션 등등을 사용하게 된다. (이쪽은 백보단 프론트가 더 많이 이용한다고 하는데 아직은 잘 모르겠다.....😞)


   HTTP Request 구조   

HTTP의 Request 메세지는 크게 3부분으로 이루어진다.

  • start line ⇒ 첫 줄
  • headers ⇒ 두번째 줄 부터
  • body ⇒ header에서 한 줄 띄고

하나씩 살펴보자!!!

Start Line

말 그대로 HTTP request의 첫번째 라인!!

HTTP request의 start line도 또..... 3부분으로 구성되어 있다...😱

  • HTTP Method
    • 해당 request가 의도한 action을 정의한다.
    • HTTP Methods에는 GETPOSTPUTDELETEOPTIONS 등이 있다. ( GET이랑 POST가 자주 쓰임 )
  • Request target
    • 해당 request가 전송되는 목표 URL ( ex : /login )
  • HTTP Version
    • 말 그대로 사용되는 HTTP Version ( 1.01.12.0 Version 등이 있다. 범용적으로 사용되는건 1.1)

Header

  • 해당 request에 대한 추가 정보(addtional information)를 담고 있다.

    ( ex : request 메세지 body의 총 길이 (Content-Length) 등 )

  • Key:Value 쌍으로 이루어져있다. (: 이 사용됨)

    • ex : HOST: google.com 에서
      key는 HOST / value는 google.com
  • Headers 안에서도 또 3부분으로 나뉘지만.......
    (general headersrequest headersentity headers)
    3부분 으로 구성되어 있다는것만 알고 넘어가도 괜찮다.(고 믿는다😅)

  • 자주 사용되는 header 정보는 다음과 같다!

    • Host
      : 요청이 전송되는 target의 Host URL ( ex : google.com )

    • User-Agent
      : 요청을 보내는 클라이언트의 대한 정보 ( ex : 웹브라우저에 대한 정보 )

    • Accept
      : 해당 요청이 받을 수 있는 응답(response) type

    • Connection

      : 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 Connection을 유지 할것인지, 끊을것인지에 대해 지시

    • Content-Type
      : 해당 요청이 보내는 메세지 body의 type ( ex : JSON을 보내면 application/json )

    • Content-Length
      : 메세지 body의 길이

Body

  • 해당 reqeust의 실제 메세지 / 내용
  • 전송하는 데이터가 없다면, Body 부분은 비어있다!
    ( ex : GET request들은 대부분 body가 없는 경우가 많음 )

   HTTP Response 구조   

Response도 request와 마찬가지로 크게 3부분으로 구성되어 있다.

  • Status line
  • Headers
  • Body

Status Line

  • HTTP Version
  • Status code
    • 응답 상태를 나타내주는, 숫자로 되어 있는 코드 ( ex : 200 )
  • Status text
    • 응답 상태를 간략하게 설명해주는 부분 ( ex : "Not Found" )

Header

HTTP Request의 headers와 동일

단, response에서만 사용되는 header 값들이 있다!

( ex : User-Agent 대신에 Server 사용함)

Body

HTTP Request의 Body와 동일

데이터를 전송할 필요가 없을 경우 body가 비어있다.

HTTP/1.1 200 OK // Start Line
Connection: keep-alive // Headers
Content-Encoding: gzip												 
Content-Length: 35653
Content-Type: text/html;

// body는 없을수도 있다.

   자주 쓰이는 HTTP Methods   

GET

  • 이름 그대로 어떠한 data를 서버로 부터 받아(GET)올때 주로 사용
  • 데이터 생성/수정/삭제 없이 받아오기만 할때 사용한다.
  • 가장 간단하고 많이 사용되는 HTTP Method !!
  • 데이터를 받아오기만 할때 사용되기 때문에 request에 body를 안 보내는 경우가 많다.

POST

  • 데이터를 생성/수정/삭제 할때 주로 사용되는 Method
  • 데이터를 생성 및 수정 할때 많이 사용하기 때문에 대부분의 경우 requst body가 포함되서 보내진다.

  위의 2개보단 덜쓰이지만, 알아두면 좋은 Methods...  

OPTIONS

  • 주로 요청 URI에서 사용할 수 있는 Method를 받아올때 사용
  • ex :  /update uri에서 어떤 method를 요청 가능한가(GETPOST?) 를 알고 싶으면 먼저 OPTIONS 요청을 사용해서 확인하면 된다.

PUT

  • POST와 비슷하다. 데이터를 생성 할때 사용하는 Method
  • POST와 겹치기 때문에 PUT을 사용하는 곳도 있고 POST로 통일해서 사용하는 곳도 있는데, 최근 몇년 사이에 POST에 밀려서 사용량이 줄었다.

DELETE

  • 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰이는 Method
  • PUT과 마찬가지로 POST에 밀려서 사용량이 줄었다.

💁🏻‍♀️ 갑자기 URI라는 말이 나오는데.... 이게 몰까?

  URL ( Uniform Resource Locator)   : 예전에는 URL이 가르키는게 파일 소스였지만, 파일의 소스 보다는, 웹 상에 서비스를 제공하는 각 서버들에 있는 파일의 위치를 표시하기 위한 것

  URI ( Uniform Resource Identifier)   : 통합 자원 식별자. 인터넷에 있는 자원을 나타내는 유일한 주소!
URI의 보편적인 형태가 URL인데, URL은 사실 URI의 하위 개념이다.


   자주 쓰이는 HTTP Status Code   

200 OK

  • 가장 자주 보게되는 status code !!
  • 문제없이 다 잘 실행 되었을때 보여진다.

301 Moved Permanently

  • 해당 URI가 다른 주소로 바뀌었을때 보내는 code

400 Bad Request

  • 해당 요청이 잘못된 요청일 때 보내는 code
  • 주로 요청에 포함된 input 값들이 잘못된 값들이 보내졌을때 사용되는 code
    ( ex : 전화번호를 보내야 되는데 text가 보내졌을때 등등 )

401 Unauthorized

  • 유저가 해당 요청을 진행 할려면 먼저 로그인을 하거나 회원 가입을 하거나 등 선행 과정이 필요하다는것을 나타내려 할때 쓰이는 code

403 Forbidden

  • 유저가 해당 요청에 대한 권한이 없다는 뜻
    ( ex : 오직 과금을 한 유저만 볼 수 있는 데이터를 요청 했을때 등)

404 Not Found

  • 요청된 uri가 존재 하지 않는다는 뜻

500 Internal Server Error

  • 서버에서 에러가 났을때 사용되는 코드
    ( API 개발을 하는 백앤드 개발자들이 싫어하는 코드라고 함ㅋㅋㅋㅋㅋ)

RESTful HTTP API는 이해를 못해써요.........
이해하고 추가할 예정......(언젠가는....)


개발 왕초보 코린이입니다!
이 내용은 혼자 동영상 강의&구글링을 통해 배운 내용을 정리하는 것으로, 제가 이해하고 넘어간 개념이 틀렸거나 더 보충할 개념이 있다면 댓글 남겨주시면 정말 감사하겠습니다!!

profile
하루는 치열하게 인생은 여유롭게

0개의 댓글