본문 바로가기

HTTP

김영한 HTTP 웹 기본 지식 1일차

인터넷 네트워크

IP(인터넷 프로토콜)

 

지정한 IP 주소(IP Address)에 데이터 전달

패킷이라는 통신 단위로 데이터 전달

 

IP 프로토콜의 한계

 

비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

비신뢰성 : 패킷이 중간에 사라지거나 , 패킷이 순서대로 도착하지 않을 수도 있음.

 

인터넷 프로토콜 스택의 4계층

 

애플리케이션 계층 - HTTP , FTP

전송 계층- TCP , UDP

인터넷 계층-IP

네트워크 인터페이스 계층

 

TCP(전송 제어 프로토콜)

연결지향 - TCP 3 way handshake

데이터 전달 보증

순서 보장

신뢰할 수 있는 프로토콜

 

연결지향 - TCP 3 way handshake

 

클라이언트 - 서버 사이에서 3단계로

1.SYN ,

2.SYN+ACK

3.ACK 로 접속 요청 , 요청 수락을 보냄

 

순서 보장

 

클라이언트 - 서버 사이 에서 패킷1,패킷2,패킷3 순서로 보냈다고 했을때 패킷1,패킷3,패킷2 순서로 도착한 경우

패킷2 부터 다시 보내달라함. 

 

UDP(사용자 데이터그램 프로토콜)

 

연결지향 X

데이터 전달 보증 X

순서 보장 X

단순하고 빠름

IP와 비슷하다. UDP는 PORT와 체크섬이 있음.

 

PORT

같은 IP 내에서 프로세스를 구분한다.

 

클라이언트(100.100.100.1)                                        서버(200.200.200.2) 

게임(8090)                                                                   게임(11220)

화상통화(21000)                                                           화상통화(32202)

웹 브라우저(10010)                                                 서버(200.200.200.3)

                                                                               웹브라우저(80)

 

 

DNS(도메인 네임 시스템)

도메인 명을 IP 주소로 변환 한다.

클라이언트가 DNS 서버에 도메인 명으로 요청 하면 IP 주소를 응답 해주고 그 IP 주소로 서버에 접속한다.

 

URI

Uniform : 리소스 식별하는 통일된 방식

Resource : 자원, URI로 식별할 수 있는 모든 것

Identifier : 다른 항목과 구분하는데 필요한 정보

 

URL - Locator: 리소스가 있는 위치를 지정

URN - Name: 리소스에 이름을 부여

 

ex: URL : foo://example.com:8042/over/there?name=ferret#nose

ex: URN : urn:example:animal:ferret:nose

 

URL 전체 문법

scheme://[userinfo@]host[:port][/path][?query][#fragment]

 

https://www.google.com:443/search?q=hello&hl=ko

 

프로토콜(https)

호스트명(www.google.com)

포트 번호(443)

패스(/search)

쿼리 파라미터(q=hello&hl=ko)

 

URL scheme

 

주로 프로토콜 사용

프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙

ex) http, https, ftp 등등

 

URL userinfo

 

URL에 사용자정보를 포함해서 인증

거의 사용하지 않음

 

URL host

 

호스트명

도메인명 또는 IP 주소를 직접 사용가능

 

URL PORT

 

접속포트

일반적으로는 생략, 생략시 http는 80 , https는 443

 

URP path

 

리소스 경로(path), 계층적 구조

ex) /home/file1.jpg

ex) /members

ex) /member/100

 

URL query

 

key = value 형태

? 로 시작 , & 로 추가 가능 ex) ?keyA=valueA&keyB=valueB

 

URL fragment

 

html 내부 북마크 등에 사용

서버에 전송하는 정보 아님

 

HTTP(Hyper Text Transfer Protocol)

HTTP 메시지에 모든 것을 전송

HTML, TXT , IMAGE , 음성, 영상, 파일 , JSON , XML

서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용

 

현재는 HTTP/1.1 가장 많이 사용하고 있음

HTTP/2 : 성능 개선

HTTP/3 : TCP 대신 UDP 사용 , 성능 개선

 

HTTP 특징

클라이언트 서버 구조

무상태 프로토콜(stateless0, 비연결성

HTTP 메시지

단순함, 확장 가능

 

클라이언트 서버 구조

 

Request , Response 구조

클라이언트는 서버에 요청을 보내고 , 응답을 대기

서버가 요청에 대한 결과를 만들어서 응답

 

무상태 프로토콜

 

서버가 클라이언트의 상태를 보존 x

장점: 서버 확장성이 높음

단점: 클라이언트가 추가 데이터 전송해야함

 

비 연결성

HTTP는 기본이 연결을 유지하는 않는 모델

서버 자원을 효율적으로 사용할 수 있음

TCP/IP 연결을 새로 맺어야함 - 3 way handshake 시간 추가

웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트 , css , 추가 이미지 등 수많은 자원이 함께 다운로드

지금은 HTTP 지속 연결로 문제 해결

 

HTTP 메시지

HTTP 메시지에 모든것을 전송한다. 

HTML , TEXT, IMAGE , 음성 , 영상 , 파일 , JSON , XML 등등

 

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
 
 

ex) HTTP 요청 메시지

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 Content-Length: 3423
 
<html>
 <body>...</body>
</html>

ex) HTTP 응답 메시지

start - line 시작 라인
hearder 헤더
empty line 공백 라인(CRLF)
message body 

HTTP 메시지 구조

 

시작 라인 요청 메시지

 

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
 
 

start - line = request-line / status - line

request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)

 

ex) GET /search?q=hello&hl=ko HTTP/1.1

 

HTTP 메소드 ( GET)

요청 대상 (/search?q=hello&hl=ko)

HTTP Version

 

요청 메시지 - HTTP 메소드

 

종류: GET , POST , PUT , DELETE

서버가 수행해야할 동작 지정

GET : 리소스 조회

POST : 요청 내역 처리

 

요청 메시지 - 요청 대상

 

절대경로="/"로 시작하는 경로

 

요청 메시지 - HTTP 버전

 

HTTP Version

 

 

시작 라인 응답 메시지

 

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 Content-Length: 3423
 
<html>
 <body>...</body>
</html>

 

start - line = request-line / status - line

status-line = HTTP-version SP status-code SP reason-phrase CRLF

 

HTTP 상태 코드 : 요청 성공 , 실패를 나타냄

200: 성공

400: 클라이언트 요청 오류

500: 서버 내부 오류

 

 HTTP 헤더

 

HTTP 전송에 필요한 모든 부가정보

예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보

 

HTTP 메시지 바디

 

실제 전송할 데이터

HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

 

HTTP 메소드

종류

 

GET: 리소스 조회

POST: 요청 데이터처리, 주로 등록에 사용

PUT: 리소스를 대체, 해당 리소스가 없으면 생성

PATCH: 리소스 부분 변경

DELETE: 리소스 삭제

 

기타 메소드

 

HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환

OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명

CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정

TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

 

GET

 

리소스 조회

서버에 전달하고 싶은 데이터는 query를 통해서 전달

메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

 

POST

 

요청 데이터 처리

메시지 바디를 통해 서버로 요청 데이터 전달

서버는 요청 데이터를 처리

메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.

주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용

 

POST 정리

1. 새 리소스 생성

서버가 아직 식별하지 않은 새 리소스 생성

2. 요청 데이터 처리

단순히 데이터를 생성하거나 , 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우

주문에서 결제완료 -> 배달시작 -> 배달완료 처럼 단순히 값 변경을 넘어 프로세스의 상태가 변경되는 경우

3. 다른 메소드로 처리하기 애매한 경우

EX) JSON으로 조회 데이터를 넘겨야 하는데, GET 메소드를 사용하기 어려운 경우

애매하면 POST 사용

 

PUT

 

리소스를 대체

리소스가 있으면 대체, 리소스가 없으면 생성

클라이언트가 리소스 위치를 알고 URI 지정

 

PATCH

 

리소스 부분 변경

 

DELETE

 

리소스 제거

 

HTTP 메소드의 속성

안전(Safe)

호출해도 리소스를 변경하지 않는다.

 

멱등(Idempotent)

한 번 호출하든 두번 호출하든 100번 호출하든 결과가 똑같다.

GET: 한번 조회하든 , 두번 조회하든 결과가 똑같다.

PUT: 결과를 대체한다. 따라서 같은 요청을 여러번해도 최종 결과는 같다.

DELETE:결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.

POST: 멱등이 아니다, 두번 호출하면 같은 결제가 중복해서 발생할 수 있다.

 

캐시가능

 

GET, HEAD, POST, PATCH 캐시 가능

실제로는 GET,HEAD 정도만 캐시로 사용

 

 

출처: https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

'HTTP' 카테고리의 다른 글

김영한 HTTP 웹 기본 지식 3일차  (0) 2021.12.20
김영한 HTTP 웹 기본 지식 2일차  (0) 2021.12.17