HTTP....네트워크...서버...통신....
WOW 무섭고 어려운 말 밖에 없군요....! WOW
HTTP 세션 시작하기 전부터 엄청 걱정걱정했는데ㅠㅠ
세션 후에 진행된 방탈출 게임같은 실습이 너무 재밌어서 공포증이 쪼끔 치료됐당ㅎ
웹개발자라면 모르면 안되는 개념이니까, 잘 정리하고 이해해보자!!
HTTP는 (HyperText Transfer Protocol) 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약)을 의미한다.
그러니까 웹상에서 네트워크를 통해 서버끼리 통신을 할 때, 우리 이러이렇게 통신 하자고 정해놓은 통신 형식을 말하는 것!
프론트앤드 서버 ↔클라이언트 간의 통신이나,
백앤드 ↔프론트앤드 서버간의 통신에도 사용된다.
또한 HTTP는 TCP/IP 기반(IP를 받아서 이루어지는 모든 통신)으로 이루어져있다.
HTTP는 기본적으로 요청(request) 과 응답(response) 구조로 되어있다.
위 그림처럼, 클라이언트가 HTTP request를 서버에 보내면, 서버는 HTTP response를 보내는 구조다.
클라이언트와 서버의 모든 통신은 request 와 response 로 이루어져있다.
여기서 클라이언트란!
웹 브라우저... 핸드폰 어플리케이션...등 서버의 자료에 접근할 수 있는 프로그램을 말한다!
request가 가면, response가 와야 한다.
(설령 error가 나더라도, error라고 응답 해줘야한다. 무응답이면 통신이 불안정한 것)
또한, HTTP는 Stateless 다. Stateless? 상태 없~다?
맞다! 말그대로 상태(state)를 저장하지 않는다는 뜻이다.
즉, 요청이 오면 그때그때 응답할 뿐! 특정 요청, 응답 끼리 연결되어 있지는 않다.
(각각의 요청, 응답은 독립적인 요청, 응답이다.)
예를 들어, 클라이언트가 요청을 보내고 응답을 받은 후 조금 있다 다시 요청을 보낼때, 전에 보낸 요청, 응답에 대해 알지 못한다. (완전 금붕어 기억력.....영구 없~다 ㅇㅈ)
그래서 만일 여러 요청과 응답의 진행과정이나 데이터가 필요할때는 쿠키나 세션 등등을 사용하게 된다. (이쪽은 백보단 프론트가 더 많이 이용한다고 하는데 아직은 잘 모르겠다.....😞)
HTTP의 Request 메세지는 크게 3부분으로 이루어진다.
첫 줄
두번째 줄 부터
header에서 한 줄 띄고
하나씩 살펴보자!!!
말 그대로 HTTP request의 첫번째 라인!!
HTTP request의 start line도 또..... 3부분으로 구성되어 있다...😱
GET
, POST
, PUT
, DELETE
, OPTIONS
등이 있다. ( GET
이랑 POST
가 자주 쓰임 )/login
)1.0
, 1.1
, 2.0
Version 등이 있다. 범용적으로 사용되는건 1.1
)해당 request에 대한 추가 정보(addtional information)를 담고 있다.
( ex : request 메세지 body의 총 길이 (Content-Length) 등 )
Key:Value
쌍으로 이루어져있다. (:
이 사용됨)
HOST: google.com
에서HOST
/ value는 google.com
Headers 안에서도 또 3부분으로 나뉘지만.......
(general headers
, request headers
, entity 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의 길이
Response도 request와 마찬가지로 크게 3부분으로 구성되어 있다.
200
)HTTP Request의 headers와 동일
단, response에서만 사용되는 header 값들이 있다!
( ex : User-Agent
대신에 Server
사용함)
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는 없을수도 있다.
GET
POST
위의 2개보단 덜쓰이지만, 알아두면 좋은 Methods...
OPTIONS
/update
uri에서 어떤 method를 요청 가능한가(GET
? POST
?) 를 알고 싶으면 먼저 OPTIONS
요청을 사용해서 확인하면 된다.PUT
POST
와 비슷하다. 데이터를 생성 할때 사용하는 MethodPOST
와 겹치기 때문에 PUT
을 사용하는 곳도 있고 POST
로 통일해서 사용하는 곳도 있는데, 최근 몇년 사이에 POST
에 밀려서 사용량이 줄었다.DELETE
PUT
과 마찬가지로 POST
에 밀려서 사용량이 줄었다.💁🏻♀️ 갑자기 URI라는 말이 나오는데.... 이게 몰까?
URL ( Uniform Resource Locator) : 예전에는 URL이 가르키는게 파일 소스였지만, 파일의 소스 보다는, 웹 상에 서비스를 제공하는 각 서버들에 있는 파일의 위치를 표시하기 위한 것
URI ( Uniform Resource Identifier) : 통합 자원 식별자. 인터넷에 있는 자원을 나타내는 유일한 주소!
URI의 보편적인 형태가 URL인데, URL은 사실 URI의 하위 개념이다.
200 OK
301 Moved Permanently
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
RESTful HTTP API는 이해를 못해써요.........
이해하고 추가할 예정......(언젠가는....)
개발 왕초보 코린이입니다!
이 내용은 혼자 동영상 강의&구글링을 통해 배운 내용을 정리하는 것으로, 제가 이해하고 넘어간 개념이 틀렸거나 더 보충할 개념이 있다면 댓글 남겨주시면 정말 감사하겠습니다!!