학사 나부랭이

Network - HTTP 본문

自習/Network

Network - HTTP

태양왕 해킹 (14세) 2021. 7. 30. 07:01

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-namepassword를 사용해 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이에요.

웹 사이트에서 소스 보기
F12 > Elements

이 두 코드는 같은 사이트의 코드이지만 완전히 같지는 않죠? 첫 번째 코드를 브라우저가 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
Comments