From 5d9910f17a0cd6673f04204d6a54ed09a65d1568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A7=80=EC=88=98?= <62272445+mogamogua@users.noreply.github.com> Date: Fri, 29 Apr 2022 18:09:20 +0900 Subject: [PATCH] Update 1-1 introduction to HTTP.md --- .../1-1 introduction to HTTP.md | 285 ++++++++++++++++++ 1 file changed, 285 insertions(+) diff --git a/HTTP Perfect Guide/1-1 introduction to HTTP.md b/HTTP Perfect Guide/1-1 introduction to HTTP.md index e69de29..0f01afe 100644 --- a/HTTP Perfect Guide/1-1 introduction to HTTP.md +++ b/HTTP Perfect Guide/1-1 introduction to HTTP.md @@ -0,0 +1,285 @@ +# 1부 : 웹의 기초 + +## HTTP(Hyper Text Transfer Protocol) + +현대 인터넷의 공용어라고 할 수 는, 웹 브라우저, 서버, 웹 애플리케이션이 대화하는 방식. + +어떤 포맷의 파일이더라도 전 세계의 웹 서버로부터 정보를 빠르고, 간편하고, 정확하게 웹 브라우저로 옮겨준다. 신뢰성있는 데이터 전송 프로토콜을 사용하기 때문에, 지구 반대편에서 데이터가 오더라도 전송 중 손상되지 않음을 보장한다. + +# HTTP는 웹트래픽을 어떻게 전송할까? + +--- + +## 1. 웹 클라이언트와 서버 + +### 웹 서버 + +웹 콘텐츠를 가지고 있고, 웹 클라이언트가 요청했을 때 요청한 콘텐츠를 HTTP응답으로 보내준다. +보통 HTTP프로토콜로 의사소통하기 때문에 HTTP서버라고 부른다. + +### 웹 클라이언트 + +우리가 인터넷 사용 시 항상 이용하는 것. +흔히, 크롬, 사파리와 같은 웹 브라우저를 통해 클라이언트 요청을 하게 된다. +HTTP 클라이언트라고도 한다. + +HTTP 클라이언트 , HTTP 서버는 WWW(월드와이드웹)의 기본 요소다. + +### (중요) 주소창에 url 입력 시 사용자에게 보여주기까지의 과정 + +- [https://www.naver.com/index.html](https://www.naver.com/index.html) (www.naver.com) 입력 +- 웹 브라우저는 주소창의 URL에서 IP주소와 포트번호, 경로를 뽑아서 해당 서버를 찾는다. +- 찾아서 http get 요청을 보낸다. +- 서버는 요청받은 객체를 찾아서 (ex . index.html) 보내고, 관련된 정보들(글자 길이가 몇 인지, 파일 타입은 무엇인지...)을 http 응답에 실어서 보낸다. +- 브라우저는 서버로부터 받은 데이터와 html을 가지고 화면에 그린다. + +더 자세하게 들어가면 브라우저에서 파싱하여 렌더링 하는 과정, 주소창에 입력된 URL에 대해서 얘기해볼 수 있다. + +## 2. 리소스(resource) + +웹 서버는 웹 리소스를 관리하고, 제공한다. + +- 정적 리소스 : 가장 단순한 웹 리소스. +웹 서버 파일시스템에 있는 정적 파일(.txt, .html, .jpeg, .avi, .pdf 등등... 변하지 않는 파일들.) +- 동적 리소스 : 요청에 따라 콘텐츠를 생산하는 프로그램이 될 수 있으며, 유저가 누구이며 어떤 정보를 요청했고, 몇 시냐에 따라 다른 콘텐츠를 생성한다. (주식 거래, 온라인 쇼핑몰, 부동산 데이터베이스 검색) + +어떤 종류의 콘텐츠 소스도 리소스가 될 수 있다. 스프레드시트데이터도, 공공도서관 서가탐색 웹 게이트웨이도. 인터넷 검잭 엔진도. + +### 미디어 타입을 알려주는 라벨, MIME! + +인터넷은 수천 가지의 데이터 타입을 다루게 된다. +그렇게 많다면, http 요청과 응답을 주고받을 때 받게 되는 데이터의 타입이 어떤 것인지 알아야 하지 않을까? +⇒ **MIME**이라는 미디어 타입 라벨을 붙인다. + +**MIME(Multipurpose Internet Mail Extensions)**, 다목적 인터넷 메일 확장 : 각기 다른 이메일 시스템 사이에서 메시지가 오갈 때 생기는 문제점을 해결하기 위해 설계되었으나, 워낙 메일 시스템에서 잘 사용되어서 http에서도 멀티미디어 콘텐츠를 기술하고, 라벨을 붙이기 위해 채택되었다고 한다. + +웹 서버는 모든 HTTP 객체 데이터에 MIME타입을 붙인다. 웹 브라우저는 서버로부터 응답을 받을 때, 다룰 수 있는 객체인지 확인한다. +ex) Content-Type: image/jpeg + Content-Type: application/json charset-utf-8 + +### URI(Uniform Resource Identifier), 통합 자원 식별자 + +웹 서버 리소스는 각자의 고유한 이름을 갖고 있고, 이를 통해 정보 리소스를 고유하게 식별하고 위치를 저장한다. 이 이름을 URI라고 한다. + +클라이언트는 원하는 리소스를 지목하기 위해 URI를 사용한다. + +URI에는 URL, URN이 있다. + +### URL(Uniform Resource Locator), 통합 자원 지시자 + +- 오늘날 대부분의 URI는 URL이다. 가장 흔한 형태. +- 특정 서버의 한 리소스에 대한 구체적 위치를 서술한다. 리소스가 정확히 어디에 있고, 어떻게 접근할 수 있는지 분명히 알려준다. +- URL의 포맷 세 부분 + - 첫 부분 : 스킴(Scheme): 리소스에 접근하기 위해 사용되는 프로토콜을 서술. 보통 http프로토콜이다. + - 두 번째 부분 : 서버의 인터넷주소: ex) www.diggging.com + - 세 번째 부분 : 웹 서버 리소스를 가리키는 부분 ex) /logo.png + +### URN(Uniform Resource Name), 통합 자원 이름 + +- 콘텐츠를 이루는 한 리소스에 대해 리소스 위치에 영향을 받지 않는 유일무이한 이름의 역할을 한다. +- 리소스를 여기저기로 옮기더라도 문제없이 동작한다. 여러종류의 네트워크 접속 프로토콜로 접근해도 문제가 없다. +- 여전히 실험중. 널리 채택되지 않음. 아직 리소스 위치 분석을 위한 인프라가 없어서 채택이 늦어지고 있음 + +통상적으로 URI = URL로 사용된다. + +## 3. 트랜잭션 + +HTTP 트랜잭션은 요청 명령과 응답 결과로 구성된다. 이는 HTTP 메시지를 사용해서 이루어지며, HTTP메시지는 정형화된 데이터 덩어리이다. + +- HTTP 요청 메시지는 명령과 URI를 포함함 +- HTTP 응답 메시지는 트랜잭션의 결과를 포함함. + +### HTTP 메소드(HTTP method) - 3장에서 더 자세히 + +HTTP는 여러가지 종류의 요청 명령을 지원하고, 모든 HTTP 요청 메시지는 무조건 한 개의 메서드를 갖는다. 메소드는 서버에게 어떤 동작이 취해져야 하는지를 말해준다. + +| HTTP 메소드 | 설명 | +| --- | --- | +| GET | 지정한 리소스를 서버에서 클라이언트로 보내라! | +| PUT | 클라이언트에서 지정한 이름의 리소스로 서버로 보낸 데이터를 저장해라! | +| DELETE | 지정한 리소스를 서버에서 삭제해라! | +| POST | 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라. | +| HEAD | 지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라. | + +### HTTP 상태 코드(HTTP status code) - 3장에서 + +클라이언트에게 요청이 성공했는지, 추가적 조치가 필요한지 알려주는 세 자리 숫자. + +모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다. + +| HTTP 상태 코드 | 설명 | +| --- | --- | +| 200 | OK 좋다. 문서가 바르게 반환되었음. | +| 201 | Created 서버 개체 생성요청 성공 | +| 401 | Unauthorized 클라이언트 인증 필요 | +| 403 | Forbidden 요청이 서버에 의해 거부됨. | +| 404 | Page Not Found 없음. 리소스를 찾을 수 없다 | + +http는 상태코드와 **사유구절(reason phrase)도 함께 보낸다.** ex) `Forbidden` `Page Not Found` 등등.. + +### 웹페이지는 여러 객체로 이루어질 수 있다. + +웹페이지는 보통 하나의 리소스가 아니라, ‘리소스의 모음’이다. +html 뼈대를 한번의 트랜잭션으로 가져오고, 그 외 이미지, 그래픽, js 등등을 추가로 가져온다. +이처럼 브라우저는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 http 트랜잭션을 수행한다. + +## 4. HTTP 메시지 + +- 요청 메시지(HTTP Request Message) : 웹 클라이언트 → 웹 서버로 보낸 HTTP 메시지 +- 응답 메시지(HTTP Response Message) : 웹 서버 → 웹 클라이언트로 보낸 HTTP 메시지 + +http 요청, 응답 메시지의 형식은 굉장히 비슷하며, 단순한 줄 단위의 일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다. + +- 메시지 구조 : 각 요소들은 줄바꿈으로 구분된다. + - 시작줄 : 요청의 경우 무엇을 해야하는지, 응답의 경우 결과가 어떤지 나타냄. + - 헤더(header) : 시작줄 다음에 이어짐. `:` 로 구분되어 이름과 값의 쌍으로 구성된다. 헤더는 빈 줄로 끝난다.(\n\n) + ex) `Accept: application/json` `Content-type: text/plain` ... + - 본문: 데이터를 실어 나르는 곳. 어떤 종류의 데이터든 들어갈 수 있다. 필요에 따라 들어가며, 시작줄이나 헤더와 달리, 임의의 이진 데이터를 포함할 수 있다.(텍스트, 이미지, 비디오, 오디오, 응용 소프트웨어 등.) + + +### 간단한 메시지의 예 + +**http request message** + +```jsx +GET index.html HTTP/1.0 +User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.57 Whale/3.14.133.23 Safari/537.36 +Host : www.diggging.com +Accept: text/html, image/gif, image/jpegAccept-language: ko +``` + +시작줄에 GET메소드, 로컬 리소스, HTTP프로토콜 1.0버전으로 요청을 보내고 있음. + +본문은 없음 - 간단한 문서를 가져올 땐 요청 데이터가 필요 없음 (GET메소드) + +**http response message** + +```jsx +HTTP/1.0 200 OK +Date: Fri, 15 Apr 2022 15:08:47 GMT +server: Vercel +Content-length: 403 +Content-Type: text/html + + +