일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자료해석
- 토익 영단어
- 다이나믹프로그래밍
- 영단어
- 자바스크립트
- 수리능력
- 알고리즘
- BOJ
- 영어문장
- 토익문법정리
- dfs
- 주어
- 영문법
- 파이썬
- 데이터베이스
- 문제해결능력
- 매일매일NCS
- TOEIC
- 공기업공부
- sqld
- TOEIC문법
- 토익단어
- BFS
- NCS수리자료해석
- 토익문법노트
- TOEIC Vocabulary
- 토익시험준비
- 브루트포스
- 영단어암기
- 너비우선탐색
- Today
- Total
하나씩 알아가기
HTTP에 대해 알아보자 본문
틀린 부분이 있을 경우, 지적해 주시면 감사하겠습니다.
HTTP
개념
HTTP는 Hyper Text Transfer Protocol의 약자로 웹 서버와 클라이언트 간의 통신을 위한 규약을 말합니다. 우리가 평소에 인터넷을 사용하기 위해서는 이 HTTP를 통해서 사용자는 웹 페이지의 정보를 서버에 요청하고 전달 받아서 화면을 받아보는 과정이 이루어져야 합니다. HTTP는 누구나 정보를 열람할 수 있는 플레인 텍스트 개념이라서 요즘에는 HTTPS가 선호됩니다. S는 secure를 뜻하며, 좀 더 보안된다고 볼 수 있습니다.
특징
1. 비연결성(Connectionless)
클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊어버리는 특징입니다. 연결을 끊어버리는 이유는 다수의 클라이언트와 연결을 계속 유지해야 하면, 이에 따른 많은 리소스가 발생하기 때문입니다. 이 리소스를 줄이기 위해 비연결적인 특징을 갖습니다. 단점은 서버가 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해 매번 새로운 연결을 시도/해제 해야하므로 오버헤드가 발생한다는 점입니다. HTTP의 keepAlive 속성을 사용하여 지속적 연결 상태를 유지할 수 있으며, HTTP 1.1 부터는 이 상태가 기본입니다.
2. 무상태성(Stateless)
서버가 클라이언트를 식별할 수 없는 특징을 말합니다. 즉, 각 클라이언트에 맞게 리소스를 응답하는 것은 기본적으로 불가능합니다. 이로 인한 불편함을 해결하기 위해서 브라우저 단에 쿠키를 저장하거나 서버단에 사용자 정보를 세션으로 저장하는 등의 방법을 사용할 수 있습니다.
HTTP 요청(Request)
클라이언트 → 서버
요청의 구조는 세 부분으로 구성되어 있습니다.
- Startline : 요청의 첫번째 줄
- HTTP Method : 해당 요청이 의도한 액션을 정의하는 부분
- Request target : 해당 request가 전송되는 목표 url
- HTTP Version : 사용되는 HTTP 버전(주로 1.1 버전이 가장 널리 쓰임)
- ex) GET /login HTTP/1.1 → "GET 메소드로 login이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다."
- Headers : 요청의 메타 데이터를 담고 있음
- Host : 요청을 보내는 타겟의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소
- User-Agent : 요청을 보내는 클라이언트에 대한 정보(ex. Chrome, Firefox, Safari ...)
- Content-Type : 해당 요청을 보낼 때(POST/PUT) 메시지 body의 타입 (ex. application/json, application/x-www-form-urlencoded)
- Content-Length : body 내용의 길이
- Authorization : 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authorization에 담음
- Origin : 요청이 어느 도메인에서 왔는 지 명시, 서버의 Access-Control-* 속성에 필요
- Body : 요청의 내용을 담고 있음
HTTP 응답
클라이언트 ← 서버
- Status Line : 응답의 상태 줄로, 요청에 대한 처리 상태를 클라이언트에 먼저 알려줌
- HTTP Version : 요청과 동일
- Status Code : 응답 메시지의 상태 코드(밑에서 설명)
- Status Text : 응답 메시지의 상태를 간략하게 설명해주는 텍스트
- ex) HTTP/1.1 404 Not Found → HTTP 1.1 버전으로 응답하고 있는데 클라이언트 사이드에서 보낸 요청에 대해서 유저의 정보를 찾을 수 없음
- Headers : 요청의 헤더와 동일하게, 응답의 메타 데이터를 담고 있다. 요청하는 브라우저의 User-Agent 대신 Server 헤더가 사용되는 등, 응담에서만 사용되는 헤더의 정보들이 있다.
- Body : 요청의 Body와 동일하지만, 요청에서 메소드에 따라 존재하지 않을 수 있듯이 응답에서 데이터가 필요하지 않은 경우에는 Body가 없을 수 있다
- ex) 로그인 요청에 대해 성공했을 때 응답의 body
Body: {
"message": "SUCCESS"
"token": "1a2b3c!@4d" (암호화된 유저의 정보)
}
응답 상태 코드
클라이언트가 서버에 요청을 하면, 서버는 요청에 대한 처리 상태를 숫자로 반환하는데 이를 응답 코드라 합니다.
- 100번대 : 요청을 받았으면 작업을 계속한다
- 200번대 : 요청을 성공적으로 수행했다
- 300번대 : 클라이언트가 요청을 마치기 위해 추가적인 동작을 해야한다(리다이렉션)
- 400번대 : 클라이언트 오류가 있다
- 500번대 : 서버에 오류가 있다
응답을 할 때 올바른 HTTP 상태 코드를 반환하는 것이 중요합니다.
HTTP Method
클라이언트가 서버에 요청을 할 때, 어떤 목적을 갖는 행위인지 HTTP 메소드에 명시합니다.
- GET : 서버에게 조회할 리소스를 요청한다 (READ, 조회)
- POST : 서버에게 본문(body)에 생성할 데이터를 삽입하여 전송한다 (CREATE, 생성)
- PUT : 서버에게 본문에 수정할 데이터를 삽입하여 전송한다 (UPDATE, 수정)
- DELETE : 서버에게 삭제할 리소스를 요청한다 (DELETE, 삭제)
- PATCH : PUT과 비슷하지만 일부만 수정한다는 점에서 다르다
※HTTPS는 HyperText Transfer Protocol over TSL/SSL의 약자로 기존의 HTTP를 암호화한 프로토콜로 보안이 강화된 버전입니다(HTTPS에 대해서는 다음번에 좀 더 자세한 내용으로 포스팅하겠습니다).
참고 및 출처
ko.wikipedia.org/wiki/HTTP#%EC%9A%94%EC%B2%AD_%EB%A9%94%EC%8B%9C%EC%A7%80
github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/network/http.md
'웹' 카테고리의 다른 글
CI(Continuous Integration)와 CD(Continuous Delivery/Deploy) (0) | 2021.02.04 |
---|---|
서버사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR) (0) | 2021.02.03 |
URI, URL, URN 정확히 이해하기 (0) | 2021.01.26 |
DOM과 BOM (0) | 2021.01.26 |
CORS에 대해서 알아보자 (0) | 2021.01.25 |