학사 나부랭이
Network - HTTP 본문
HTTP Protocol
OSI 7 Layer 중 7계층에 위치한 HTTP를 이용해 웹에서 정보를 주고받기 위해 개발된 프로토콜이에요. 최근에는 HTTP/3.0이 UDP에서 구현된 QUIC(Quick UDP Internet Connection) 프로토콜 기반으로 논의되고 있어요.
URI&URL
URI(Uniform Resource Identifier)는 서비스 애플리케이션에서 리소스를 식별하는 식별자이고 URL(Uniform Resource Locator)은 리소스의 위치를 식별하는 URI의 하위 개념인데 요즘은 혼용하는 경우가 많아요.
<Scheme>://<user-name>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>
Scheme은 애플리케이션에 접속할 때, 어느 서비스나 프로토콜을 이용할 건지 나타내요. 웹 브라우저에서는 일반적으로 http 또는 https를 이용하죠. 그 외에도 ftp, mailto, tel 등의 애플리케이션도 호출하거나 이용할 수 있어요.
user-name과 password를 사용해 HTTP Authentication을 사용할 수도 있어요. ftp나 웹 사이트에 접속할 때 사용할 수 있지만, 웹 인증 시에는 보안 상 지양해야 해요.
host는 접속하려는 사이트의 주소를 나타내요. 그럼 당연히 port는 접속하려는 사이트의 포트를 나타내겠죠? 일반적으로 http에서는 80번 포트가 생략되고, https에서는 443번 포트가 생략되어요. 그러므로 https://p1atinum.tistory.com:443/으로 접속해도 정상적으로 이 블로그에 접속할 수 있어요.
path는 접근하려는 웹 페이지의 리소스 위치를 나타내요. '/'를 기준으로 구분하죠. params는 세분화된 요청을 위해 추가되어요. ftp는 ';'뒤에 "type=d"와 같이 넣을 수 있죠.
query는 '?'뒤에 따라오며, &를 기준으로 key와 value로 구분되어요. 예를 들어, "?index=1&filename=test.txt"와 같이 질의할 수 있죠.
fragment는 더 작게 나뉜 단위예요. 어떤 문서에서 특정 문단 등으로 이동할 때 사용할 수 있어요.
HTTP Request
클라이언트는 HTTP Request로 서버에 요청해요.
Method(GET): 서버에 요청해 수행하길 원하는 동작을 나타내요.
Path(/doc/test.html): 사용자가 웹 서버에 요청한 리소스의 경로예요.
Version(HTTP/1.1): HTTP의 버전을 나타내요.
Header(Host ~ Content-Length): 쿠키, 토큰, Body의 인코딩 형식 등의 부가적인 정보를 전달해요.
Body(bookId ~): 서버에 전달하는 데이터가 있어요.
HTTP Method
HTTP Method에는 여러 종류가 있는데 그중 자주 사용되는 것들 위주로 서술했어요.
GET: 리소스 표시를 요청해요.
POST: 주로 HTTP Body에 담긴 내용을 제출할 때 사용되어요.
PUT: 리소스의 모든 부분을 업데이트해요.
DELETE: 특정 리소스를 삭제해요.
OPTIONS: 목적 리소스의 통신을 설정할 때 사용되어요.
PATCH: 리소스의 부분을 수정할 때 사용되어요.
HTTP Response
서버의 응답 형식인데, 상태 코드(Status Code)를 포함해 응답을 요약해요.
Version(HTTP/1.1): HTTP의 버전을 나타내요.
Status Code(200 OK): 요청에 대한 응답을 코드로 표시해요.
Header(Etag ~ Connection): 부가적인 정보를 전달해요. 예를 들어, 응답 데이터를 어떻게 처리할 것인지에 대한 정보가 있죠.
Body(<!DOCTYPE html> ~): 응답 데이터예요.
Response Code
응답 코드의 맨 앞자리를 기준으로 의미를 파악할 수 있어요.
코드 | 명칭 | 내용 |
2nn | 요청이 성공적임 | |
200 | OK | 요청이 성공적임 |
204 | No Content | 성공적인 요청이며, 내용이 없음 |
3nn | 요청한 자원이 다른 곳에 있음 | |
301 | Moved Permanently | 요청 리소스의 URI가 변경되었음, Redirect |
304 | Not Modified | 내용이 바뀌지 않음, 캐시 된 리소스를 계속 사용 |
4nn | 요청에 문제가 있음 | |
400 | Bad Request | 잘못된 문법 요청, 서버가 이해할 수 없음 |
401 | Unauthorized | 인증되지 않음 |
403 | Forbidden | 리소스에 접근할 권한이 없음 |
404 | Not Found | 요청한 리소스를 찾을 수 없음 |
5nn | 서버에 문제가 있음 | |
500 | Internal Server Error | 내부 서버 오류 |
503 | Service Unavailable | 서버 사용 불가 |
DOM(The Document Object Model)
HTML, XML 문서의 프로그래밍 인터페이스예요. 웹 페이지는 일종의 문서인데, 웹 문서는 Title과 body 등으로 이루어져 있으며, 웹 브라우저를 통해 읽을 수 있어요. 이 문서를 객체 지향적 표현으로 해석하고 수정 및 조작할 수 있도록 모델로 나타낸 것이 DOM이에요.
이 두 코드는 같은 사이트의 코드이지만 완전히 같지는 않죠? 첫 번째 코드를 브라우저가 HTML 문법으로 보정해 두 번째 코드가 되어요. 그러니 두 번째 코드는 DOM과 거의 유사하다고 할 수 있어요.
개발자 도구
Elements: DOM과 유사한 문서의 요소를 파악할 수 있으며, CSS도 변경해 바로 적용해 볼 수 있어요.
Console: 디버깅할 때 로그를 찍거나 테스트할 때 써요.
Sources: 표현되는 문서의 리소스를 디렉터리 형태로 보여줘요.
Network: 웹 서버와 주고받은 요청을 볼 수 있어요.
Application: 웹 페이지에서 저장하는 값이나 캐시 등을 볼 수 있어요.
'自習 > Network' 카테고리의 다른 글
Network - Web (0) | 2021.07.30 |
---|---|
Network - TCP/UDP (0) | 2021.07.13 |
Network - Ping sweep scaner (0) | 2021.07.12 |
Network - Internet Control Message Protocol (0) | 2021.07.01 |
Network - Internet Protocol (0) | 2021.07.01 |