티스토리 뷰
HTTP
Chapter 06 - HTTP의 기본
HTTP는 TCP/IP를 기반으로 하고 있습니다.
TCP(Transmission Control Protocol)와 IP(Internet Protocol)는 인터넷의 토대를 구성하는 중요한 네크워크 프로토콜이라고 합니다.
책에서는 HTTP를 이해하기 위해 최소한의 TCP/IP 지식에 관하여 설명하고있습니다.
TCP/IP
● 계층형 프로토콜
인터넷의 네크워크 프로토콜은 계층 구조를 가지고 있습니다. 계층별로 추상화하여 구상할 시, 물리적으로 케이블이 동선인지 광케이블인지 하는 하위 계층의 구체적인 사항에 좌우되지 않고, 상위 계층을 구현할 수 있습니다.
● 네크워크 인터페이스 계층
가장 아래에 속하는 계층으로써 물리적인 케이블이나 네크워크 어댑터에 해당하는 부분입니다.
● 인터넷 계층 계층
네크워크 인터페이스 계층 위에는 인터넷 계층이 있습니다. 이 계층은 네크워크에서 데이터를 실제로 주고받는 것에 대해 담당하고 있습니다. IP가 여기에 해당됩니다.
● 트랜스포트전송 계층
인터넷 계층 위에는 트랜스포트 계층이 있습니다. IP가 하지 않았던 데이터의 무결성을 보증하는 것이 이 계층의 역할입니다. TCP가 여기에 해당됩니다.
데이터의 무결성이란?
무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다.
TCP는 목적지의 상대에 대해서 커넥션을 연결합니다. 이 커넥션을 사용해 데이터의 누락을 체크하고, 데이터의 도달을 보증합니다.
TCP로 접속된 커넥션에서 전송하는 데이터가 어느 애플리케이션으로 전달될지 결정하는 것은 포트번호입니다.
● 애플리케이션 계층
트랜스포트 계층 위에 애플리케이션이 계층이 있습니다. 애플리케이션 계층은 구체적인 인터넷 애플리케이션이나, 가령 메일이나 DNS, 그리고 HTTP를 실현하는 계층입니다.
TCP로 프로그램을 만들 때는 소켓socket이라고 불리는 라이브러리를 사용하는 것이 일반적입니다. 소켓은 네크워크에서의 데이터 교환을 추상화한 API로 접속, 송신, 수신, 절단 등의 기본적인 기능을 갖추고 있습니다.
HTTP 서버와 브라우저는 소켓을 이용하여 구현합니다.
대부분의 프로그래밍 언어에는 HTTP를 구현한 라이브러리가 준비되어 있기 때문에 소켓을 사용해 HTTP를 독자적으로 구현할 일이 적습니다. 하지만 프로토콜 수준에서 어떻게 동작하는 파악해 둘 필요가 있습니다.
계층형 프로토콜
클라이언트와 서버
웹은 아키텍처 스타일로 클라이언트/서버를 채용하고 있습니다. 즉, 클라이언트가 정보를 제공하는 서버에 접속하여 각종 요청Request를 보내고 응답Response을 받는 구조입니다.
HTTP 메세지
요청 메시지와 응답메시지를 합해서 HTTP 메시지라고 부릅니다.
● 요청 메시지
GET/test HTTP/1.1
Host: example.com
요청 메시지의 첫 번째 라인은 요청 라인Request-line이라고 하며, 메서드 GET, 요청URL /test, 프로토콜 버전 HTTP/1.1으로 구성됩니다.
요청 메시지의 둘째 줄부터는 헤더가 이어집니다. 헤더는 메시지의 메타 데이터입니다. 하나의 메시지는 복수의 헤더를 가질 수 있습니다. 각 헤더는 이름: 값의 구성을 가집니다. 앞의 예에서는 'Host'라는 이름에 'example.com'라는 값이 연결되어 있습니다.
메타 데이터란?
데이터를 기술하는 데이터, 데이터에 대한 데이터를 말합니다. 메타라는 것은 이렇게 어떤 대상에 대해 고차원 것을 나타내는 접두어입니다.
앞의 예에서는 등장하지 않았지만, 헤더 뒤에 바디가 이어지는 경우도 있습니다. 바디에는 그 메시지를 나타내는 본질적인 정보가 들어갑니다. 예를 들어, 리소스를 새로 작성하거나 갱신할 때는 요청의 바디부분에 리소스의 표현자체가 들어갑니다.
● 응답 메시지
HTTP/1.1 200 OK
Content-Type: application/xhtml+xml; charset=utf-8
...
</html>
응답메시지의 첫 줄은 스테이터스Status line이라고 하며, 프로토콜 버전 HTTP/1.1, 스테이터스 코드 200, 텍스트 구문 OK으로 구성됩니다. 스테이터스 코드는 요청의 결과를 프로그램으로 처리 가능한 수치 코드로 표현합니다.
응답 메시지의 둘째 줄은 요청 메시지와 마찬가지로 헤더입니다. 이 예에서는 Content-Type 헤더에서 HTML의 MIME 미디어 타입과 그 문자 인코딩 방식을 지정하고 있습니다.
이 응답 메시지에는 바디도 포함되어 있습니다. 헤더와 바디는 빈 줄로 구분됩니다.
http://www.ktword.co.kr/abbr_view.php?m_temp1=4884
Chapter 07 - HTTP 메서드
HTTP 메서드는 총 8개가 존재합니다.
HTTP 메서드는 중 GET, POST, PUT, DELETE는 대표적인 메서드라고 할 수 있습니다. 그 이유는 이들 4개로 CRUD라는 성질을 충족시키고 있기 때문입니다.
CRUD란?
Create, Read, Update, Delete라는 데이터 조작의 기본이 되는 4가지 처리를 말합니다.
Create - POST/PUT
Read - GET
Update - PUT
Delete - DELETE
POST
책에서는 POST에는 3가지 역활이 존재한다고 합니다.
1. 서버 리소스의 작성
POST의 대표적인 기능은 어떤 리소스에 대한 서브 리소스의 작성이라고 합니다.
2. 리소스에 데이터 추가
데이터를 추가하기 위해 post를 사용했을때, 그 데이터를 리소스의 끝에 추가할지 처음에 추가할지는 서버의 구현에 의존합니다.
어떤 리소스에 요청된 POST가 작성을 의미하는 것인지 데이터의 추가를 의미하는 것인지도 서버의 구현에 달려있습니다.
3. 다른 메서드로는 대응할 수 없는 처리
일반적으로 URI를 GET함으로써 검색을 실행하지만, 키워드가 매우 긴 경우에는 POST를 이용합니다.
GET에서는 URI에 포함시켰던 키워드를 POST에서 요청 메시지의 바디에 넣을 경우 아무리 긴 키워드라도 사용할 수 있습니다.
POST와 PUT의 사용 구분
POST로 리소스를 작성할 경우, 클라이언트는 리소스의 URI를 지정할 수 없습니다. URI의 결정권은 서버 측에 있습니다. 반대로 PUT으로 리소스를 작성할 경우, 리소스의 URI는 클라이언트가 결정합니다.
특별한 이유가 없는 한, 리소스의 작성은 POST로 수행하여 URI를 서버 측에서 결정하는 설계가 바람직하다고 합니다.
멱등성과 안정성
멱등성이란?
'어떤 조작을 몇 번을 반복해도 결과가 동일한 것'을 의미합니다.
안정성이란?
'조작 대상의 리소스의 상태를 변화시키지 않는 것'을 의미합니다.
'언어 > WEB' 카테고리의 다른 글
생활코딩 WEB2 Python 코드 정리 (0) | 2019.07.31 |
---|---|
CGI 란? (0) | 2019.07.23 |
- Total
- Today
- Yesterday
- C
- 파이썬
- 1차원 배열
- 회전리스트
- 시간복잡도
- timecomplexity
- 2차원 배열
- inflearn
- 강의
- 비트필드
- call by reference
- 재귀함수
- call by value
- 프로그래밍
- 간접 지정
- Algorithm
- 공부
- 배열
- 공용체
- 알고리즘
- 자료구조
- 포인터
- codeit
- 다차원 배열
- 공간복잡도
- 종류
- 구조체
- 형승격
- 직접 지정
- 3차원 배열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |