TIL 41 - CS/네트워크 HTTP/GET/POST

crystalee·2021년 10월 18일
0

CS

목록 보기
2/2
post-thumbnail

📖 HTTP(HyperText Transfer Protocol)란 무엇인가?

  • 인터넷상에서 데이터를 주고 받기 위한 서버-클라이언트 모델을 따르는 프로토콜.
  • OSI 7계층의 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동
  • 우리가 웹브라우저를 통해 페이지들을 볼 수 있게 해준다.
  • HTML 뿐만 아니라 각종 이미지, 동영상, 음성 데이터들도 전송이 가능하다.

💁🏻‍♀️ HTTP 구조

  • 서버 - 클라이언트 모델이다
  • 일반적으로 클라이언트는 서버에 요청(Requst)하고, 서버는 그 요청에 대한 응답(Response)을 돌려준 다.
  • 요청을 할 때에는 URL(Unified Resource Identifier)으로 요청을 하게 된다.
  • 사용자가 웹 페이지의 링크를 클릭했을 때, 브라우저는 HTTP의 형태로 메시지를 작성하여 웹 서버에 전 송한다.
  • 웹 서버에서는 받은 메시지에 대하여 HTTP의 응답 형태로 메시지를 작성해 브라우저에 보내면, 브라우저는 이를 해석해 화면에 보여주게 된다.
  • HTTP 동작 방식은 TCP 3-Way-Hanshake 과정으로 브라우저와 웹 서버 간의 Connection이 이루어지 고, 이후 브라우저의 요청에 의한 웹 서버의 응답이 이루어진다.

💁🏻‍♀️ 비 연결 (Connectionless) & 비 상태 (Stateless)

  • HTTP는 비연결 & 비상태 프로토콜이다.
  • 비연결:클라이언트의 요청에 응답한 후 바로 연결을 끊음
  • 비상태:서버의 상태가 어떤지간에 상관없이 요청을함.
  • 계속해서 브라우저와 서버가 연결되어 있지 않다.
  • 이러한 방식은 장점과 단점을 가진다.
  • 장점 : 불특정 다수를 대상으로 하는 서비스에 적합한 방식이다. 수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을 처리할 수 있다.
  • 단점 : 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다. 이러한 HTTP의 특징을 stat eless라고 하는데, Connectionless로 부터 파생되는 특징이라고 할 수 있다. 클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데 당장에 문제가 생긴다.
  • 예를 들어, 인터넷에 로그인을 하면, 쿠키나 세션의 방식이 없다면 로그인을 한 정보가 바로 사라져버린 다.
  • 그렇기 때문에 서버와 계속해서 통신이 필요한 경우에는 Ajax나 Web Socket 등의 특수한 방법들을 사 용한다.
  • 또는, cookie를 이용해서 이 문제를 해결하고 있다.

💁🏻‍♀️ HTTP 메시지 구조

  • Header + Body로 나누어 진다.
  • Header에는 주소 정보, 어떤 메서드 방식을 썼는지, 클라이언트 정보, 브라우저 정보, 접속 URL 등의 정 보를 담는다.
  • Body에는 보통 비어 있다가 필요시 데이터 정보가 포함된다.

💁🏻‍♀️ HTTP Method(메서드)

method용도설명
GETRead리소스 취득
POSTCreate서브 리소스 작성, 리소스 데이터의 추가
PATCHUpdate리소스 갱신, 리소스 작성
DELETEDelete리소스 삭제

💁🏻‍♀️ Request(요청) 와 Response(응답)

1. Request 객체

클라이언트에서 어떤 페이지를 요청하면 서버로 요청 정보를 전송하는데, 이렇게 전송된 데이터가 저장 되는 곳이 Request 객체이다. 사용자가 브라우저를 통해 서버에게 어떤 요구를 하면 Request 객체는 이때 사용자의 브라우저 정보나 입력한 값 등의 정보를 갖게 된다.

2. Response 객체

사용자가 어떤 요청을 하였을 때, 서버가 이에 응답을 보내려고 Response 객체를 사용한다.

📖 GET & POST 전송

  • GET과 POST방식은 서버에 요청을 하는 메서드이다.
  • 클라이언트가 서버에 요청할 때, 제공해야 되는 자원(ID, PW 정보 등)등이 있다면, GET 또는 POST방 식을 선택하여 제공한다.
  • GET과 POST의 차이는 보안, 전달형식, 전달할 수 있는 데이터의 량 측면의 차이이다.

💁🏻‍♀️ GET

  • 데이터에 대한 인수를 URL에 포함하여 전송
  • URL 뒤에 ? 마크를 통해 URL의 끝을 알리고, Key-Valude의 쌍으로 인수 앞에 &을 붙여 구분하며, 글 자수는 255자로 제한된다.
  • URL에 포함되기 때문에 HTTP 패킷의 헤더에 포함되어 서버에 요청된다.
  • 때문에 HTTP 패킷의 바디는 비어있다.
  • 요청 후 멱등성(연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미)을 가지며, 조작 대상의 자원의 상태를 변화시키지 않아 안정적이다.
  • GET은 캐시가 되는 특징이 있다. (멱등이기 때문에)
  • 아이디나 패스워드가 URL에 포함되면 보안에 취약하므로 유의해야 한다.

💁🏻‍♀️ POST

  • URL에 요청 데이터를 기록하지 않고, 데이터를 HTTP 바디에 넣어 전송한다.
  • 내부의 구분자가 각 파라미터를 구별하여 서버가 해석하므로 속도가 GET에 비해 느리다.
  • 데이터 전송에 대한 제한이 없으므로,글 쓰는 것과 같은 많은양의 데이터를 전송할때 사용된다.
  • PATCH나 DELETE 메소드와 같은 역할 수행이 가능하다.

GET vs POST 의 사용
GET : 서버에서 어떤 데이터를 가져와서 보여줄 때 사용한다. 주로 조회할 때 사용한다. 즉, 서버의 어떤 값이나 내용,상태등을 바꾸지 않는 경우에 사용된다.
POST : 서버의 값이나 상태를 바꾸기 위해서 사용한다. DB에 저장/수정 시에 DB의 값이 변경되게하는 경우에 사용된다.

💁🏻‍♀️ GET & POST 대한 상식

❓ POST 방식이 GET 방식보다 보안 측면에서 더 좋은가?

POST든 GET이든 보내는 데이터는 전부 클라이언트측에서 볼 수 있다. 단지 GET 방식은 URL에 데이 터가 표시되어 별다른 노력없이 볼 수 있어서지, 두 방식 전부 보안을 생각한다면 암호화 해야한다.

❓ GET 방식이 POST 방식보다 속도가 빠른가?

GET의 요청은 캐싱 때문에 POST보다 빠르다.
캐싱(Cashing) : 한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는 것.

profile
코린이 성장일기

0개의 댓글