URI = URL + URN
URI는 리소스를 식별하는 주소
URL 표준으로 시작해서 개념을 확장해서 URI를 만듦
스킴:사용자이름:비번@호스트:포트/경로;패러미터?쿼리#프래그먼트
https://honux77:pw1234@github.com:443/honux77/MMT?file=sum.py#30
쿼리: 편의상 =
과&
을 사용한다.
프래그먼트 : 클라이언트에서만 사용되며 서버측에 미치는 영향은 없다.
클라이언트 : 서버에 URL로 리소스(고유한 컨텐츠)를 요청한다.
서버 : 클라이언트의 요청에 대해 적당한 리소스(문서)를 응답한다.
프록시 : 클라이언트와 서버 사이에 존재하며 caching, filtering, load balancing, logging, 인증 등의 다양한 기능을 수행한다.
HyperText Transfer Protocol 의 약자로
WWW 상에서 정보를 주고받을 수 있는 프로토콜이다.
WWW 상에서 클라이언트와 서버가 정보를 요청하고 받을 수 있는 규칙(프로토콜)이다.
HTML을 주고받기 위한 표준으로 정해졌다.
HTTP는 Request와 Response 메세지의 형식 약속이라고 보면 된다.
주로 TCP와 UDP를 방식으로 서버 80번 포트에 요청을 보낸다.
비교적 간단하며 확장 가능하다.
상태가 없다(Stateless)
HTTP1 -> HTTP 1.1 -> HTTP 2 로 계속 발전하는 중이다.
HTTP/1.1 버전에 비해 각 stream에 우선순위나, 병렬 처리 등의 기능이 추가 확장 됐다.
HTTPS(HTTP Secure)는 HTTP의 암호화된 버전이다.
클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위하여 보통 SSL
이나 TLS
를 사용한다.
커넥션을 이용, 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해준다.
예전에는 HTTP 통신을 많이 사용했지만, 최근에는 대부분의 서비스에서 HTTPS를 사용하는 추세이다.
HTTPS용 인증서를 받기 어려웠지만, 최근에는 무료로도 HTTPS를 적용할 수 있다.
사용자가 URL 주소를 입력하면, 그걸로 HTTP Request 요청 메세지를 만들어서 서버에 보내고, HTTP Response 메세지를 받아서 화면에 표시한다.
이 과정에서 실제로는 특정 서버의 주소를 확인하기 위해 DNS 서버가 개입한다.
HTTP는 요청 메소드를 정의하며, 주어진 리소스에 수행하길 원하는 행동을 나타낸다.
요청 메소드를 HTTP 동사
라고도 부른다.
각각의 메소드는 서로 다른 의미를 구현하지만, 일부 기능은 메소드 집합 간에 서로 공유되기도 한다.
메소드
GET
POST
PUT
DELETE
GET은 URL 뒤에 쿼리스트링으로 필요한 인자를 전달한다. GET 요청은 필요한 데이터나 웹 페이지를 받아오는데 사용된다.
POST 메서드는 BODY에 값을 붙여서 보내며, 종종 서버의 상태변화를 일으킨다.
웹 폼을 이용한 대용량 파일 전송의 동작 방식은 어떻게 될까?
구글 주소창에서 검색을 하면 무슨 일이 벌어질까?
상태 | 응답 | 의미 |
---|---|---|
200 | OK | 정상적인 처리 |
302 | See Other | 주로 리다이렉트 용도 |
304 | Not Modified | 수정된 사항이 없음.(= 캐시 사용 해라) |
404 | Not Found | 리소스가 없다 |
403 | Forbidden | 권한 없음 |
500 | Internal Server Error | 서버 내부 오류 |
502 | Bad Gateway | 중간 계층 오류 |
503 | Service Unavailable | 서비스 제공불가 |
웹 브라우저 개발자 관리 도구(F12)에서 Network 탭 -> 요소 클릭 -> Header -> view source를 클릭하면 웹 브라우저와 웹 서버간의 Request, Response 메세지를 볼 수 있다.
Request Line, Headers, Body로 이루어져 있다.
실제로는 한 줄마다 \r\n
줄바꿈 문자가 포함되어 있다.
Request Line
Request Headers
Body : 웹서버로 전송할 정보. POST 방식일 때 데이터가 포함되어 서버로 보내진다.
Status Line : 서버가 응답했을 때 응답결과와, 실패했다면 실패이유 등이 적혀있다.
Headers : 헤더 정보
Body : 웹 브라우저가 요청한 html 코드를 포함한다.
Request와 마찬가지로 한 줄마다 \r\n
줄바꿈 문자가 포함되어 있다.
HTTP Response 메세지 예제
HTTP/1.1 200 OK
server: ecstatic-3.3.2
cache-control: max-age=3600
last-modified: Mon, 06 Jul 2020 05:09:48 GMT
etag: W/"8624175389-20-2020-07-06T05:09:48.268Z"
content-length: 20
content-type: text/html; charset=UTF-8
Date: Mon, 06 Jul 2020 05:12:29 GMT
Connection: keep-alive
<h1>Hello</h1>
Connection closed by foreign host.
MIME (Multipurpose Internel Mail Extensions) 타입으로 파일의 포맷을 분류한다.
원래는 전자 우편을 위한 표준이었는데, 웹에서도 활용하고 있다.
Content-Type:
text/plain
text/html
text/css
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/octet-stream
multipart/mixed
서버의 성능을 측정하기 위한 척도중 하나가 TTFB(time to first byte) 이다.
TTFB란 HTTP 요청을 했을 때 첫 바이트가 브라우저에 도달하는 시간을 의미한다.
TTFB가 빠를수록 사용자가 최초로 내용을 받아보는 시간이 짧기 때문에 좀 더 만족을 할 수 있다.
실제로 검색 우선순위를 결정할 때 TTFB가 중요한 요소라고 한다.
이 밖에도 클라이언트의 요청부터 서버로 부터의 응답을 받아 브라우저에 표현하는 전체 시간, 요청 이후 서버의 응답 까지의 시간 등 페이지의 로딩 시간을 측정하는 데에는 다양한 방식들이 존재한다.