[Web] HTTP에 대해서...

hukim·2020년 9월 21일
2

Web

목록 보기
1/5

                                                            이미지 출처

HTTP

HyperText Transfer Protocol 의 약자로, 웹 상에서 정보를 주고 받을 수 있는 프로코톨입니다.

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답 (request/response) 프로토콜입니다.
예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하는 것입니다.

HTTP를 통해 전달되는 자료는 http:로 시작하는 주소(URL)로 조회할 수 있습니다.

HTTP의 특징 2가지

1. 요청 / 응답 (Request / Response)
HTTP 통신의 핵심이자, 전송이라는 것은 보내는 주체와 받는 주체가 있습니다.
보내는 주체는 받는 주체에게 요청(request)을 보내고, 받는 주체는 요청을 보낸 주체에게 응답(reponse)를 보냅니다.

2. Stateless
각각의 HTTP 통신은 독립적이기 때문에 이전에 했던 통신내용을 알지 못합니다. 과거의 내용을 모른다는 것은 매 통신마다 필요한 모든 정보를 담아서 보내야 한다는 것입니다.
따라서, 쇼핑몰에서 로그인 후 장바구니 이용하는 기능처럼 여러번의 통신에서 연속된 데이터처리가 필요한 경우를 위해 로그인 토큰, 브라우저의 쿠키, 세션, 로컬 스토리지 등의 기술이 만들어졌습니다.

요청 / 응답 (Request / Response)

- Request 메시지 구조

1. Start Line : request의 첫번째 줄에 해당합니다. 세 가지 부분으로 구성되어 있습니다.

GET /images/logo.gif HTTP/1.1
1. HTTP Method: 해당 요청이 의도한 액션을 정의. GET, POST, DELETE가 주로 많이 쓰임.
2. Request Target: 해당 request가 전송되는 목표 url.
3. HTTP Version: 사용되는 HTTP 버전. 주로 1.1 버전 사용.

--> GET 메소드로 images/logo.gif 라는 요청 타겟에 HTTP 1.1버전으로 요청 보내겠다는 뜻.

2. Headers : 해당 요청에 대한 추가 정보를 담고있는 부분입니다.

Key : Value 형태로 되어있습니다. (JavaScript의 객체, Python에서의 딕셔너리 형태)
주로 사용되는 Headers의 정보.

Headers: {
	Host: 요청을 보내는 타겟의 주소. 요청 보내는 웹사이트의 기본 주소.
	User-Agent: 요청을 보내는 클라이언트의 대한 정보 (chrome, safari, firefox, ...)
	Content-Type: 해당 요청이 보내는 메시지 body의 타입 (ex.application/json)
	Content-Length: body 내용의 길이
	Authorization: 회원의 인증/인가를 처리하기 위한 로그인 토큰을 담는 곳.
}

3. Body : request의 실제 내용입니다. 주로 Body를 사용하는 메소드는 POST입니다.

ex)
Body: {
	"user_email" : "kho5420@gmail.com"
	"user_password" : "password"
}

- Response 메시지 구조

response도 requeset와 메시지이기 때문에 비슷한 구조로 이루어져 있습니다.
1. Start Line : response는 request에 대한 처리상태를 먼저 클라이언트에게 알려줍니다.

HTTP/1.1 404 Not Found
1. HTTP Version: request와 동일하게 HTTP 버전.
2. Status Code: response 메시지의 상태 코드
3. Status Text: 메시지의 상태를 간략하게 설명해주는 텍스트

--> HTTP 1.1버전으로 응답하고 있으며, 예를 들어 프론트엔드에서 로그인 시도에 대한 요청을 보냈는데 유저 정보를 찾을 수 없기에 404 상태메시지를 보낸다.

2. Headers : request의 헤더와 동일합니다. 단, response에서만 사용되는 헤더의 정보들이 있습니다.
ex) User-Agent 대신에 Sever헤더가 사용.

3. Body : request의 Body와 일반적으로 동일합니다.
가장 많이 사용되는 Body의 데이터 타입은 'JSON'입니다.

Request Methods

                                                            이미지 출처

Request Methods는 위와 같이 여러 가지가 있지만 그 중에서 자주 사용되는 세 가지를 알아보겠습니다.

1. GET

  • 특정 데이터를 서버로부터 받아올 때 주로 사용하는 메소드입니다.
  • 데이터를 가져올 때만 사용해야 합니다.
  • 가장 간단하면서 많이 사용되는 HTTP 메소드입니다.

ex) GET /shop/bag HTTP/1.1

2. POST

  • 데이터를 생성 및 수정 할 때 주로 사용되는 메소드입니다.
  • 생성 및 수정에 사용되므로 대부분의 경우는 request에 body가 포함되어 보내집니다.

ex) POST /shop/bag HTTP/1.1

3. DELETE

  • 메소드의 이름과 같이 특정 데이터를 서버에서 삭제 요청할 때 쓰는 메소드입니다.

ex) DELETE /shop/bag HTTP/1.1

Response Status Code

Status Code는 상당히 많지만 그 중에서도 실제 개발을 진행할 때 자주 볼 수 있는 response 상태 코드들을 알아보겠습니다.

200: OK

  • 가장 자주 볼수 있는 코드입니다.
  • response에 대한 처리가 백엔드 서버에서 문제없이 성공적으로 이루어진 후 응답코드.

201: Created

  • 무언가 성공적으로 생성되었을 때 오는 코드입니다.
  • POST 메소드 요청에 따라서 백엔드 서버에 데이터가 생성 or 수정에 성공했을때의 코드.

400: Bad Request

  • 해당 request가 잘못되었을 때의 코드입니다.
  • 주로 request의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드.

401: Unauthorized

  • 유저가 해당 request를 진행하려면 로그인이나 회원가입이 필요하다는 의미의 코드입니다.

403: Forbidden

  • 유저가 해당 request에 대한 권한이 없다는 코드입니다.
  • 접근 불가능한 정보에 접근했을 경우 (관리자 권한이 필요하거나, 유료회원만 접근할 데이터에 요청할 때)

500: Internal Sever Error

  • 서버에서 에러가 발생했을 때의 코드입니다.

0개의 댓글