일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- API
- web
- migrations
- resful
- django 시간 설정
- 사용자인증
- 분리설정
- REST
- http
- restapi
- url
- restfulapi
- 환경설정하기
- PYTHON
- secretkey
- 서버구동
- 파이썬
- djangorest
- migrate
- 웹
- 장고
- virtual environment
- server
- restful
- rest framework
- 서버 만들기
- 환경분리
- 서버설계
- Django
- SOAP API
- Today
- Total
grape
HTTP란 ? 본문
HTTP(Hyper Text Transfer Protocol)
HTTP는 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 프로토콜은 규칙이라고 생각하면 되는데 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발해서 서로 정보를 교환할 수 있게 된 것이다. 또한 HTTP는 TCP/IP 위에서 동작한다. 즉, 우리가 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP주소를 가져야 한다는 의미이다.
HTTP란 이름대로라면 하이퍼텍스트(Hypertext) 전송용 프로토콜이지만, 실제로는 HTML, XML과 같은 하이퍼 텍스트뿐만 아니라 이미지, 음성, 동영상, JavaScript, PDF와 각종 오피스 도큐먼트 파일 등 컴퓨터에서 다룰 수 있는 데이터라면 무엇이든 전송할 수 있다.
HTTP 동작
클라이언트 즉, 사용자가 브러우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.
- 요청: Client => Server
- 응답: Server => Client
ex) - 예를 들어 웹 브라우저의 주소창에 "http://www.naver.com"을 입력하고 Enter를 누르면 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고, 웹 클라이언트는 웹 서버에 HTTP 요청(request) 메시지를 보내게 된다.
웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에게 HTTP 응답(response)메시지로 보낸다.
이런 방식으로 요청 메시지와 응답 메시지가 반복적으로 오가면서 웹을 사용하게 되는 것이다.
앞서 말했던 것 처럼 HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니다. Plain text로부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고받을 수 있으며, 보통은 클라이언트가 어떤 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시해주는 경우가 많다.
HTTP 특징
- HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.
- TCP / IP를 이용하는 응용 프로토콜이다.
- 컴퓨터와 컴퓨터간에 데이터를 전송할 수 있도록 하는 장치로 인터넷이라는 거대한 통신망을 통해 원하는 정보(데이터)를 주고받는 기능을 이용하는 응용 프로토콜이다.
- HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
- 이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.
- HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.
HTTP의 방식
- 서버(Server): 어떠한 자료에 대한 접근을 관리하는 네트워크 상의 시스템
- 클라이언트(Client): 자료에 접근할 수 있는 프로그램
ex)
서버(Server) - 클라이언트(Client)에서 보낸 요청에 대한 응답을 보내준다.
클라이언트(Client) - 웹 브라우저, 핸드폰 어플리케이션 등등
HTTP Method(HTTP 메소드 종류)
메소드 이름 | 의미 | CRUD와 매핑되는 역할 |
GET | 리소스 취득 (자료를 요청할 때 사용) |
Read(조회) |
POST | 리소스 생성, 리소스 데이터 추가 (자료의 생성을 요청할 때 사용) |
Create(생성) |
PUT | 리소스 변경 (자료의 수정을 요청할 때 사용) |
Update(변경) |
DELETE | 리소스 삭제 (자료의 삭제를 요청할 때 사용) |
Delete(삭제) |
HEAD | 리소스의 헤더(메타데이터) 취득 | |
OPTIONS | 리소스가 서포트하는 메소드 취득 | |
TRACE | 루프백 시험에 사용 | |
CONNECT | 프록시 동작의 터널 접속으로 변경 |
HTTP 메시지의 구조
HTTP 메시지는 클라이언트에서 서버로 보내는 요청 메시지와 서버에서 클라이언트로 보내는 응답 메시지 2가지가 있다.
- 스타트라인(Start Line) ------ 요청라인 또는 상태 라인
- 헤더(Header) ---------------- 헤더는 생략 가능
- 빈 줄(Blank Line) ------------ 헤더의 끝을 빈 줄로 식별
- 바디(Body) ------------------- 바디는 생략 가능
위 메시지 구조에서 스타트라인은 요청 메시지일 때 요청 라인(request line)이라고 하고, 응답 메시지일 때 상태 라인(status line)이라고 한다. 스타트라인에 이어 헤더는 각 행의 끝에 줄 바꿈 문자인 CRLF가 있으며, 헤더와 바디는 빈 줄로 구분한다. 헤더와 바디는 생략할 수 있고, 바디에는 텍스트뿐만 아니라 바이너리 데이터도 들어갈 수 있다.
Request(요청)
클라이언트가 서버에게 연락하는 것을 요청이라고 하며 요청을 보낼 때는 요청에 대한 정보를 담아 서버로 보내게 된다.
Request의 예시
서버가 클라이언트에서 보낸 주문서를 받아 클라이언트가 어떤 것을 원하는지 파악할 수 있게 한다.
이처럼 요청은 식당에서 주문서를 작성하는 것과 비슷한 개념이다.
Request HTTP 메시지 예시
GET http://www.grape-story.com HTTP/1.1 <= 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) <= 헤더
Upgrade-Insecure-Requests: 1
시작 줄(Start Line)
첫 줄은 시작 줄(요청 라인)로 요청 방식(Method), 요청 URL, 프로토콜 버전으로 구성된다. 즉, 요청 메시지의 시작 줄은 메서드 주소 버전으로 구성된 것이다.
GET : HTTP Method
http://www.grape-story.com: 요청 URL 주소
HTTP/1.1 : HTTP 버전
두 번째 줄 (Header)
두번째 줄부터는 헤더이며 요청에 대한 정보를 담고 있다. 여기서 User-Agent, Upgrade-Insecure-Requests
등등이 헤더에 해당되며 헤더의 종류는 다양하다.
본문(Body)
헤더에서 한 줄 띄고 본문이 시작된다. 본문은 요청을 할 때 함께 보낼 데이터를 담는 부분으로 현재 예시에는 단순히 주소로만 요청을 보내고 있고 따로 데이터를 담아 보내지 않기 때문에 본문이 비어있다.
Response(응답)
서버가 Client에서 온 요청(Request)에 대한 과정을 수행한 후 Client에게 보내는 것을 응답(Response)라고 한다.
Status Code(상태 코드)
메소드명 | 의미 | CRUD와 매핑되는 역할 |
1xx | 조건부 응답, 정보 제공 | 임시적인 응답으로, 현재 클라이언트의 요청까지 처리되었으니 계속 진행하라는 의미이다. HTTP 1.1 버전부터 추가되었다. |
2xx | 성공 | 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미 이다. |
3xx | 리다이렉션 | 완전한 처리를 위해서 추가적인 동작을 필요로 하는 경우이다. |
4xx | 클라이언트 에러 (요청 오류) | 없는 페이지를 요청하는 것처럼 클라이언트의 요청 메시지 내용이 잘못된 경우 이다. |
5xx | 서버 에러 | 서버 측 사정에 의해서 메시지 처리에 문자가 발생한 경우이다. 서버의 부하, DB 처리과정 오류, 서버에서 익셉션이 발생하는 경우가 이에 해당한다. |
Response HTTP 메시지 예시
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 19162
Content-Type: text/html; charset=utf-8
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...
Request HTTP 메시지와 마찬가지로 시작 줄, 헤더, 본문으로 구성되어 있다.
시작 줄(Start Line)
첫 줄은 버전, 상태 코드, 상태 메시지로 구성되어 있다. HTTP/1.1 버전에 200은 상태 코드로 성공적인 요청이었다는 뜻이다.
두 번째 줄 (Header)
두번째 줄부터는 헤더로 응답에 대한 정보를 담고 있다.
본문(Body)
응답에는 보통 본문이 있다. 보통 데이터를 요청하고, 응답 메시지에는 요청한 데이터를 담아서 보내주는 것이다.
응답 메시지에 HTML이 담겨 있는데 이 HTML을 받아 브라우저가 화면에 렌더링을 한다.
'웹 프로그래밍 > Web' 카테고리의 다른 글
URI, URL 이란? (0) | 2021.05.09 |
---|---|
REST, REST API, RESTful 이란 ? (0) | 2021.05.04 |
URL 설계 (0) | 2021.04.23 |