728x90
SMALL
<통신 프로토콜>
웹 서버에 있는 리소스를 클라이언트가 받아 보려면, 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 함. 그러면 서버가 해당 요청을 이해하고, 대응되는 동작을 통해 클라이언트에게 리소스를 반환함. 여기서 클라이언트의 행위를 요청, 서버의 행위를 응답이라고 함.
*프로토콜(Protocol)은 규격화된 상호작용에 적용되는 약속을 말함. 컴퓨터와 통신할 때는 비교적 엄격한 프로트콜을 사용함. 왜냐하면 컴퓨터가 해석의 융통성을 발휘하게 하는 것은 매우 어렵고, 이 과정에서 오히려 통신 오류가 발생할 가능성을 높일 수 있기 때문.
우리는 그 중 HTTP에 대해 알아볼 것임.
<HTTP>
HTTP(Hyper Text Transfer Protocol)란 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜.
HTTP의 기본 메커니즘은 클라이언트가 서버에게 요청하면, 서버가 응답하는 것.
웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킴. 이 포트는 일반적으로 TCP/80 또는 TCP/8080. 클라이언트가 서비스 포트에 HTTP 요청을 전송하면, 이를 해석하여 적절한 응답을 반환.
*네트워크 포트(Network Port)
네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소를 의미. 쉽게 설명하면 포트에는 항구라는 의미가 있는데, 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는 장면을 연상하면 이해하기 편함.
*서비스 포트(Service Port)
네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트. 예를 들어, HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 됨.
<HTTP 메시지>
HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 그리고 서버가 반환하는 HTTP 응답이 있음. 기능과 세부 구조에서는 차이가 있지만, 크게 보면 이들은 HTTP 헤드와 바디로 구성된다는 공통점.
*HTTP 헤드
HTTP 헤드의 각 줄은 CRLF로 구분되며, 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 불림. 헤드의 끝은 CRLF 한 줄로 나타냄.
*여기서 CRLF란 Carriage Return(CR)와 Line Feed(LF)의 조합을 나타내는 것. Carriage Return은 커서를 현재 줄의 맨 앞으로 이동시키는 문자이고, Line Feed는 커서를 다음 줄로 이동시키는 문자. 이것들은 주로 텍스트 파일에서 줄 바꿈을 타나타내는데 사용되는 제어 문자열.
헤더는 필드오 값으로 구성되며 HTTP 메시지 또는 바디의 속성을 나타냄. 하나의 HTTP 메시지에는 0개 이사의 헤더가 있을 수 있음.
*HTTP 바디
HTTP 바디는 헤드의 끝을 나타내는 CRLF 뒤, 모든 줄을 말합니다. 클라이언트나 서버에게 전송하려는 데이터가 바디에 담김.
<HTTP 요청>
*시작 줄
HTTP 요청의 시작 줄은 메소드(Method), 요청 URI(Request-URI), 그리고 HTTP 버전으로 구성됨. 각각은 띄어쓰기로 구분함.
메소드는 URI가 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작. HTTP 표준에 정의된 메소드는 8개가 있으나, 여기서는 비교적 자주 사용되는 GET과 POST 메소드만 설명.
GET은 리소스를 가져오라는 메소드. 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면, 새로운 페이지를 렌더링하기 위해 리소스가 필요함. 이때 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아옴. 반대로, POST는 리소스로 데이터를 보내라는 메소드. 전송할 데이터는 보통 HTTP 바디에 포함됨. 로그인할 때 입력하는 ID와 비밀번호, 게시판에 작성하는 글 등이 POST로 서버에 보내집니다.
<HTTP 응답>
*시작 줄
HTTP 응답의 시작 줄은 HTTP 버전, 상태 코드(Status Code), 그리고 처리 사유(Reason Phrase)로 구성됨. 각각은 띄어쓰기로 구분됨.
HTTP 버전은 서버에서 사용하는 HTTP 프로토콜의 버전을 나타냄. 그리고 상태코드는 요청에 대한 처리 결과를 세 자릿수로 나타냄. HTTP 표준인 RFC 2616은 대략 40여개의 상태 코드를 정의하는데, 각각은 첫 번째 자릿수에 따라 5개의 클래스로 분류됨. 처리 사유는 상태 코드가 발생한 이유를 짧게 기술한 것.
<HTTPS>
HTTP의 응답과 요청은 평문으로 전달됨. 만약 누군가 이를 가로챈다면 중요한 정보가 유출될 수 있음.
HTTPS(HTTP over Secure socket layer)는 TLS(Transport Layer Security) 프로토콜을 도입하여 이런 문제점을 보완함. TLS는 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화함. 공격자가 중간에 메시지를 탈취하더라도 이를 해석하는 것은 불가능하며, 결과적으로 HTTP 통신이 도청과 변조로부터 보호됨.
#출처 : 드림핵
300x250
LIST
'드림핵 공부 > Web Hacking' 카테고리의 다른 글
Background - Web(1st stage) : Browser DevTools (0) | 2024.01.23 |
---|---|
Background - Web(1st stage) : Web Browser (0) | 2024.01.23 |
Background - Web(1st stage) : Web의 기본 (0) | 2024.01.23 |