HTTP

김태현·2020년 10월 26일
0

ETC

목록 보기
7/15
post-thumbnail

HTTP란?

HTTP는 HyperText Transfer Protocol의 약자이다.
우선 하나하나 용어를 살펴보자~

1.HyperText

그 HTML의 HyperText와 의미가 동일하다.
즉, 문서와 문서가 링크로 연결되도록 하는 태그들로 이루어진 언어라는 뜻이다.
Q.HTML로 만든 웹페지리를 어떻게 주고 받을 것인가??

2.Transfer

말 그대로 전송이다.
우리가 아무리 로컬호스트에서 멋지게 사이트를 만들어봤자 우리만 볼 수 있고 남들은 볼 수가 없다.
따라서 우리가 만든 이 멋진 웹사이트를 널리 알리고 다른 사람들과 공유하기 위해서 전송을 해야할 필요가 있다.
보내는 주체, 받는 주체가 있다는 것이 특징이다.

3.Protocol

프로토콜은 얼핏보면 말이 좀 어려운데 협약, 통신 규약 이라는 의미를 가진다.
쉽게 말해서 A컴퓨터와 B컴퓨터가 HTML파일을 주고 받으며 통신을 할 것인데 이를 어떻게 진행할 것인가에 대한 약속, 계약서 같은것을 말한다.

최종적으로 정리해보면 HTTP란 컴퓨터들끼리 HTML파일을 주고받을 수 있또록 하는 소통방식 또는 약속이다.

HTTP의 두가지 특징

1.Request/ Response (요청/ 응답)
컴퓨터끼리 통신을 하고 HTML을 주고받을 때 한쪽은 요청하는, 한쪽은 응답하는 주체가 되기 마련이다.
A컴퓨터가 자료를 요청하면 B컴퓨터가 이 요청을 받고 처리해서 다시 A컴퓨터로 응답을 보낸다.
인간의 소통과 아주 유사하다.

2.Stateless

HTTP의 가장 중요한 특징 중 하나.
말 그대로 번역하면 상태없음이라는 의미다.
각각의 HTTP 통신들은 서로 독립적이기 때문에 과거에 무슨 요청이 있었고 무슨 응답이 있었는지 알지 못한다. 즉, 이전의 통신상태에 대해 알지 못한다는 것이다.
따라서 컴퓨터는 매 통신마다 필요한 모든 정보들을 담아서 요청을 보내야 한다.
하지만 여러번 중복적으로 계속 사용되는 데이터들은 로그인 토큰, 브라우져 쿠키, 로컬스토리지 등의 기술로 처리를 할 수가 있다.

Request/ Response에 대해서 더 자세히 알아보자

1.Request 메시지 구조

HTTP의 Request는 클라이언트에서 서버에 일을 시작하게 위해 보내는 메시지다.
Request는 다음과 같이 Start Line, Headers, Body 세 부분으로 나뉜다.
우선 Start Line에 대해서 알아보자 ~ 이 부분도 다시 세 부분으로 나뉜다....ㅠ

1.Start Line: 요청의 첫번째 줄에 해당.

1.HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 자주 쓰임.

2.Request target: 해당 request가 전송되는 목표 url

3.HTTP Version: 말 그대로 사용되는 HTTP의 버젼. 1.1이 주로 쓰임.

ex) GET/ login HTTP/ 1.1
=> GET 메소드로 login 이라는 요청 타겟에 1.1 버젼으로 요청을 보내겠다.

2.Headers: 해당 요청에 대한 추가 정보(메타데이터)를 담고 있는 부분. 객체형태인 Key: Value 형태로 되어있다.

1.Host: 요청을 보내는 타겟의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소.

2.User-Agent: 요청을 보내는 클라이언트에 대한 정보

3.Content-Type: 해당 요청이 보내는 메시지. body의 타입.

4.Content-Length: body의 내용 길이.

5.Authorization: 회원의 인증/ 인가를 처리하기 위해 로그인 토큰을 Authorization에 담는다.

3.Body: Request구조의 마지막부분. 해당 요청의 실제 내용. 주로 Body를 사용하는 메서드는 POST이다.

로그인시 서버에 보낼 요청의 예시를 통해 자세하게 알아보자 ~
ex) Body: {
"user_email": "jun.choi@gmail.com"
"user_password": "wecode"
}

2.Response 메시지 구조

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

1.Status Line: 응답의 상태 줄. 요청에 대한 응답의 시작으로 해당 요청에 대한 처리 상태를 클라이언트에게 알려준다. 이 부분도 Request와 동일하게 다시 세부분으로 나뉜다.

1. HTTP Version: HTTP 버젼을 의미한다.

2. Status Code: 응답 메시지의 상태 코드.

3. Status Text: 응답 메시지의 상태를 간략하게 설명해주는 텍스트.

예시를 통해 자세히 알아보자 ~
ex) HTTP/ 1.1 404 Not Found
=> HTTP 1.1 버젼으로 응답하고 있는데, 들어온 요청에 대해서 유저의 정보를 찾을 수 없기 때문에 Not Found 404 상태 메시지를 보낸다.
ex) HTTP/ 1.1 200 SUCCESS
=> HTTP 1.1 버젼으로 응답하고 있는데, 들어온 요청에 대해서 성공했기 때문에 잘 받았다고 200 상태 메시지를 보낸다.

2.Headers: 응답의 추가 정보(메타 데이터)를 담고있는 부분. 요청의 헤더와 동일하나 User-Agent 대신, Server 헤더가 사용된다.

3.Body: 요청의 메서드에 따라 Body가 항상 존재하지 않듯이. 응답도 응답의 형태에 따라서 데이터를 전송할 필요가 없는 경우에는 Body가 없을 수 있다. 주로 사용되는 Body의 데이터 타입은 JSON 이다.

로그인 요청에 대해 성공했을 때 응답의 내용에 대한 예시로 간단히 알아보자 ~
ex)
Body: {
"message": "SUCCESS"
"token": "pskdajflsdkfjasdsld" (암호화된 유저의 정보)
}

HTTP Request Methods

자주 사용되는 HTTP 통신 메소드에는 세가지가 있다. (GET, POST, DELETE)
이 세가지 메서드 들은 클라이언트 입장에서 요청의 의도가 담긴 것들이다.
밑에서 더 자세히 알아보자 ~

1.GET

이름 그대로 서버에서 어떤 데이터를 받아올 때 사용하는 메서드.
데이터를 단순히 받아오기만 할때 사용된다.
GET메서드는 가장 간단하고 자주 쓰이는데 사실 우리가 웹페이지를 띄울 때 필요한 정보들을 모두 GET메서드로 요청을 보내서 받아온 응답을 화면에 띄우는 것이다.

2.POST

데이터를 생성/ 수정할 때 주로 사용되는 메서드.
데이터를 생성, 수정한 다는 특징 때문에 대부분 요청에 body가 포함되어서 보내진다.

3.DELETE

특정 데이터를 서버에서 삭제요청 보낼 때 쓰는 메서드.

Response Status Codes

위에서 Status Code를 잠시 배웠고 200이니 404니 숫자들을 예시로 잠깐 보았는데 이밖에도 많은 것들이 있다.
간단히 정리해보자 ~

200번대는 양호하다.

200: OK

가장 자주 보고싶은 Status Code
요청에 대한 처리가 서버에서 문제없이 이루어지고 나서 오는 응답코드

201: Created

뭔가를 생성했을 때 잘 생성되었다면 이 코드를 보내준다.
주로 데이터를 수정, 삭제하는 POST메서드 요청에 따라 서버에서 데이터가 잘 생성, 수정되었을 때 보내는 응답코드

400번대는 클라이언트 쪽에서 문제가 있을 때

400: Bad Request

요청이 잘못되었을 때 보내는 응답코드.
주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용된다.

401: Unauthorized

유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입 등이 필요하다는 의미의 응답코드.
ex) wish list, 좋아요 기능은 먼저 회원이 아니면 요청을 보낼 수 없다.

403: Forbidden

유저가 해당 요청에 대해 권한이 없다는 의미의 응답코드.

500번대는 서버 쪽에서 문제가 있을 때

500: Internal Server Error

서버에서 에러가 났을 때의 응답코드

토큰: 데이터 접근시 인증하는 일종의 신분증, 티켓.
데이터 접근시 권한이 중요하므로 암호화가 되어있음.
쉽게 말하면 버스카드, 교통카드 같은 느낌.
만료기간을 정해서 비활성할 수도 있음.

#3가지만 꼭 기억!
1.HTTP는 컴퓨터 끼리 소통을 위한 통신규약이다.
2.HTTP 통신은 Request(요청)과 Response(응답)으로 이루어진다.
3.HTTP 통신의 매 요청과 응답은 이전 상태를 알지 못한다. (Stateless)

profile
프론트엔드 개발자

0개의 댓글