📌 HTTP ( HyperText Transfer Protocol )
텍스트 기반의 통신규악으로 인터넷에서 데이터를 주고받을 수 있는 Transfer Protocol(통신규약)을 의미함.
이렇게 규약을 정해두었기때문에 모든 프로그램이 이 규약에 맞춰 개발해 서로 정보를 교환할 수 있게 되었다.
TCP/IP를 이용하며 사용 포트 번호는 기본적으로 80을 사용하며
인터넷기반 서비으로는 HTTP 외에도 Email, FTP, DNS, NEWS 등이 존재한다.
인터넷주소를 지정할때 http://www.~~~ 와 같이 시작하는 것은 www.~~이라는 인터넷주소가 가진
데이터 정보등의 교환을 http의 통신규약대로 처리하라는 것을 의미한다.
또한 HTTP는 애플리케이션 계층의 최상위에 있기때문에, 기본레이어들은 HTTP의 명세와는 관련이없다.
🚩 Protocol
프로토콜은 규약이라는 의미를 갖고있는 단어이며
컴퓨터나 원거리 통신장비 사이에서 메시지를 주고받는 양식과 규칙의 체계, 즉 통신규악 및 약속의 뜻으로 사용된다.
📌 HTTP 동작
클라이언트 즉, 사용자가 브라우저를 통해 어떠한 서비스의 url을 통하거나 다른것을 통해 요청(request)하면
서버에서는 해당 요청사항에 맞는 결과를 찾아 사용자에게 응답(response)하는 형태로 동작한다.
요청 : client -> server
응답 : server -> client
HTML문서만이 HTTP통신을 위한 유일한 정보문서는 아니다.
Plain text로 부터 JSON데이터 및 XML과 같은 형태의 정보도 주고받을 수 있으며, 보통은 클라이언트가
어떤 정보를 HTML형태로 받고싶은지, JSON형태로 받고싶은지 명시해주는 경우가 많다.
📌 HTTP 특징
- HTTP 메시지는 HTTP 서버와 HTTP클라이언트에 의해 해석이된다.
- TCP/IP를 이용하는 응용프로토콜이다.
- HTTP는 연결상태는 유지하지않는 비연결성 프로토콜이다
(이러한 단점을 해결하기위해 Cookie와 Session이 등장하였다) - HTTP는 연결을 유지하지않는 프로토콜이기에 요청/응답 방식으로 동작한다.
🟢 장점 : 불특정다수를 대상으로 하는 서비스에 적합하며, 서버와 클라이언트의 연결상태를 유지하는게 아니기에
클라이언트와 서버간의 최대연결수보다 훨씬 많은 요청과 응답을 처리할 수 있다.
🔴 단점 : 연결을 끊어버리기 때문에 클라이언트의 이전상황을 알 수 없다. -> Stateless상태
이런 Stateless특징 때문에 정보를 유지하기위해 Cookie와 같은 기술들이 등장함
📌 흐름
- Connect : 클라이언트가 원하는 서버에 접속
- request : 클라이언트가 이 서버에 요청
클라이언트가 서버에게 연락하는것을 요청이라하며, 요청을 보낼때는 요청에대한 정보를 담아 서버로보낸다. - response : 서버가 요청에 대한 응답결과를 클라이언트에 보내는것을 응답이라하며,
응답이 끝나면 서버와 클라이언트의 연결을 끊는다(Stateless)
📌 요청 ( Request )
클라이언트가 서버에게 연락하는것을 요청이라고 하며, 요청을 보낼때는 요청에대한 정보를 담아 서버로 보낸다.
📍 요청의종류
- GET : 자료를 요청할 때 사용
- POST : 자료의 생성을 요청할 때 사용
- PUT : 자료의 수정을 요청할 때 사용
- DELETE : 자료의 삭제를 요청할 때 사용
GET /caculator/caculator.html HTTP/1.1
Host: 127.0.0.1:5500
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
sec-ch-ua-mobile: ?0 Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1 Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
If-None-Match: W/"1a18-17b0cb36489"
If-Modified-Since: Tue, 03 Aug 2021 15:48:08 GMT
✔ 요청라인(시작줄)
첫번째 줄에는 필수등장요소.
크게 요청메소드, 요청URL, HTTP프로토콜버전 세부분으로 나뉜다.
1. 요청 메소드 (Request Method)
서버에게 요청의 종류를 알려주기 위해사용되며, 최초의 웹서버에는 GET방식만 지원
- GET : 정보를 요청하기 위해 사용한다.(SELECT)
- POST : 정보를 밀어넣기 위해서 사용한다.(INSERT)
- PUT : 정보를 업데이트하기 위해서 사용한다.(UPDATE)
- DELETE : 정보를 삭제하기 위해서 사용한다.(DELETE)
- HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는 지를 확인하기 위해서 사용
- OPTIONS : 웹서버가 지웒나느 메서드의 종류를 요청한다.
- TRACE : 클라이언트의 요청을 그대로 반환한다. 예컨데 echo서비스로 서버상태를 확인한기 위한 목적으로 주로 사용
2. 요청URL : 요청하는 자원의 위치를 명시한다
3. HTTP 프로토콜 버전 : 웹브라우저가 사용하는 http프로토콜의 버전
✔ 요청헤더(두번째줄부터)
두번째 줄부터는 헤더이며 요청에대한 정보를 담고있다.
User-Agent, Upgrade-Insecure-Requests 등등이 헤더에 해당되며 헤더의 종류는 매우 많다.
- Host : 사용자가 요청한 도메인 정보 포함
- User-Agent : 사용자 웹 브라우저 종류 및 버전 정보가 포함된다.
ex) MSIE 6.0; Windows NT 5.0 : 인터넷 익스플로러 6.0 사용자 임을 알 수 있다. - Accept : 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 잇는 데이터 타입을 의미
ex) text/html : text, html 형태의 문서를 처리할 수 있고,
*/*는 모든 문서를 처리할 수 있다는 의미(MIME 타입이라 부른다) - Accept-Encoding : 압축 방식 지원
- Cookie : HTTP 프로토콜 자체가 세션을 유지하지 않은 State-Less(접속상태를 유지 않는) 방식이기 때문에
로그인 인증을 위한 사용자 정보를 기억하려고 만든 인위적인 값 - Referer : 현재 페이지 접속 전에 어느 사이트를 경유햇는지를 알려주는 도메인 혹은 URL 정보가 포함
- If-Modified-Since : 파일을 재요청할떄 파일다운 시간을 검사하여 최신인지를 비교해서 전송.
(최신이 아니면 굳이 또 다운 받을 필요 없으니까)
✔ 본문(헤더에서 한줄 띄고)
본문은 요청을 할 떄 함께 보낼 데이터를 담는 부분으로
현재 예시에서는 단순히 주소로만 요청을 보내고있고 따로 데이터를 담아보내지 않기때문에 본문이 비어있는것
요청메소드가 POST나 PUT을 사용하게 됐을 때 들어오게되며
GET방식은 요청할때 가지고가야 되는 자원도 URL에다 붙여 갖고가므로 GET방식은 요청바디가 없다
📌 응답 ( Response )
클라이언트의 요청에대해 서버가 답변을 보내는것을 응답이라고 한다
📍 상태코드 ( Status Code )
상태코드에는 많은 종류가 있고, 모두 세자리의 숫자로 이루어져있으며, 크게 다섯가지로 나누어 볼 수 있다.
- 1XX ( 조건부응답 ) : 요청을 받았으며 작업을 계속한다
- 2XX ( 성공 ) : 클라이언트가 요청한 동작을 수신해 이해, 승낙했고, 성공적으로 처리했음을 의미
- 3XX ( 리다이렉션 완료 ) : 클라이언트는 요청을 마치기위해 추가동작을 취해야한다.
- 4XX ( 요청오류 ) : 클라이언트에 오류가 있음을 의미
- 5XX ( 서버오류 ) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 의미
HTTP/1.1 200 OK
Vary: Origin
Access-Control-Allow-Credentials: true
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Tue, 03 Aug 2021 15:48:08 GMT
Date: Wed, 04 Aug 2021 08:37:00 GMT
ETag: W/"1a18-17b0cb36489"
Content-Type: text/html; charset=UTF-8
Content-Length: 8195
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...
✔ 시작줄 ( 첫 줄 )
HTTP/1.1 200 OK
첫줄은 버전 상태코드 상태메시지로 구성되어있으며 200은 성공적인 요청이었다는 뜻이다.
✔ 헤더 ( 두번째줄부터 )
두번째줄부터 헤더이며, 응답에 대한 정보를 담고있다.
- date : 메시지 작성 일자
- cache-control : 캐시 사용 제어.
(no-cache:캐시 쌓지 않는다
max-age=seconds:seconds 값보다 오래된 응답은 보내지 않는다
public : 어떤 캐시든 쌓는다 등등) - last-modified : 응답되는 컨텐츠가 마지막으로 수정된 일시
- content-type : 응답되는 컨텐츠의 유형
- content-length : 응답되는 컨텐츠의 길이
- server : HTTP server의 정보
✔ 본문 ( 헤더 뒤부터 )
빈줄다음에 나오는것이 실제응답리소스데이터가 나오는부분이다
보통 데이터를 요청하고 응답메시지에는 요청한 데이터를 담아서 보내주기때문에 응답에는 대부분 본문이있다.
응답메시지에 HTML이 담겨있는데 이 HTML을 받아 브라우저가 화면에 렌더링한다.
📍 URL ( Uniform Resource Locator )
- URL은 웹상에서 자원들의 위치를 의미한다
- 특정 웹서버의 특정파일에 접근하기위한 경로 혹은 주소
http://www.codecode.co.kr/does/index.html
접근프로토콜 IP주소 또는 도메인이름 문서의경로 문서이름
- 물리적인 서버를 찾기위해서 반드시 필요한것을 IP주소나 도메인주소
- 물리적인 컴퓨터를 찾을 뒤 해당컴퓨터안에 등장하는 소프트웨어 서버를 찾기위해서는 포트값이 필요.
📍 IP / 포트
- IP : 집의 집주소와 같은, 하나의 컴퓨터에는 IP가 하나 존재
- 포트 : 집안에 여러개의 방이 존재하듯, 각각의 방을 포트라고 한다
-> 하나의 포트에는 하나의 서버만 가능
하나의 포트에 여러개의 서버가 존재할 수 없음, 서버마다 포트번호가 각각 달라야함
하나의 물리적 컴퓨터에는 여러개의 소프트웨어 서버가 동작할 수 있는데
이 서버는 포트값이 다르게 동작해야한다 .이런 포트값은 0보다 큰 숫자값이다.
- http서버는 기본 포트값이 80번이다.
https://inpa.tistory.com/entry/
'Backend > Internet' 카테고리의 다른 글
DNS의 개념과 작동원리 (0) | 2022.12.25 |
---|---|
웹 브라우저의 작동원리 (0) | 2022.12.08 |
3-way handshake & 4-way handshake (0) | 2022.09.04 |
TCP/IP (0) | 2022.09.04 |
인터넷의 작동 원리 (1) | 2022.09.03 |