탐비의 개발 낙서장

[HTTP] HTTP 메시지와 Proxy 본문

프로그래밍/CS

[HTTP] HTTP 메시지와 Proxy

탐비_ 2021. 8. 12. 23:28
HTTP Request 종류

 

HTTP Method별 기능

 

1. GET

리소스를 검색하고, 반환받기 위해 사용되는 메소드입니다.
원하는 정보를 서버에 요청할 때 쓰이고 일반적으로 RequestBody가 없습니다.

 

2. HEAD

서버의 각종 정보를 확인하기 위해 사용되는 메소드입니다.
GET과 동일하지만, response에 Body가 없고 response Code와 Head만 응답받는다.

(구현할 때 인코딩 정보 얻어오는데 썼으면 좋았을듯...)


3. POST

요청된 자원을 생성하기 위해 사용되는 메소드입니다.
POST로 정보를 전송하면 URL에 파라미터가 나타나지 않으므로 각종 데이터를 전송하는데 쓰입니다.


4. PUT

요청된 자원을 수정하기 위해 사용되는 메소드입니다.


5. PATCH

요청된 자원을 수정하기 위해 사용되는 메소드라는 점에서 PUT과 같지만,
해당 자원 전체를 수정하는 PUT과는 다르게 PATCH는 해당 자원의 일부 부분을 수정합니다.


6. DELETE

요청한 자원을 삭제하기 위해 사용되는 메소드입니다.
클라이언트에서 서버의 자원을 삭제할 수 있도록 허가하는 것은 매우 위험하기 때문에, 현실적으로는 사용될 일이 거의 없고, 대부분의 서버는 이 메소드를 비활성화 시킵니다.


7. TRACE

루프백 메시지를 호출하기 위해 테스트용으로 사용되는 메소드입니다.


8. OPTION

웹서버에서 지원하는 메소드를 알기위해 사용되는 메소드입니다.


9. CONNECT

프락시 기능을 요청할 때 사용되는 메소드입니다.

 

 

 

 

 

HTTP Response 종류

 

1xx (조건부 응답)

 

 요청을 받았으며 작업을 계속 한다는 응답으로, 임시의 응답입니다.

 

2xx (성공)

 

 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 표시합니다.

200번이 성공이라는 뜻으로, GET을 보내면 200번을 받게됩니다.

 

3xx (리다이렉션)

 

 클라이언트가 요청을 마치기 위해 추가적인 동작이 필요하다는 것을 의미합니다. 일반적으로 페이지가 영구적으로 이동했거나 임시로 다른 위치의 페이지로 연결되는 것을 의미합니다.

 

4xx (요청 오류)

 

 클라이언트의 요청에 오류가 있음을 나타냅니다. 403(Forbidden)과 같은 금지나 404(Not Found)처럼 찾을수 없음을 나타냅니다.

 

5xx (서버 오류)

 

 서버가 요청을 명백하게 수행하지 못했음을 나타냅니다. 502(Bad Gateway)나 503(서비스 사용불가)등이 있습니다.

 

 

 

HTTP Proxy

 

 Proxy는 일반적으로 공용으로 중앙집중형으로 관리되지만, 개인 전용 프락시를 이용할 수도 있습니다. 크롬의 확장프로그램 중 성능 개선, 광고 차단 같은 경우에도 Proxy의 원리가 활용된다고 합니다.

 

 

 

 

wget / curl

 

 wget과 curl은 모두 웹서버로부터 컨텐츠를 가져오는 Linux 커맨드입니다.

 

공통점

 

- HTTP, HTTPS, FTP 프로토콜을 이용해 컨텐츠를 다운로드하는 커맨드 라인 툴입니다.

- HTTP POST request 역시 지원하여 웹사이트로 데이터를 전송할 수도 있습니다.

- HTTP 쿠키를 지원합니다.

 

wget

 

 wget은 간단하고 직관적이지만, 재귀적으로 다운로드하는 방식을 이용합니다. 즉, 페이지에 있는 모든 내용이나 FTP 프로토콜의 경우 디렉터리의 모든 파일들을 한번에 그대로 복사하는 방식인데 이러한 특징때문에 별다른 옵션없이 컨텐츠를 빠르게 가져오기 위한 용도에 적합합니다.

 

curl

 

 curl은 라이브러리나 stdin/stdout 등의 pipe 지원이 가능한 등의 강력한 기능들이 들어가 있습니다. 또한 양방향의 특징을 가지며 SSL을 지원하고, gzip 압축 및 해지를 지원합니다. 조금 더 복잡한 컨텐츠를 다운로드하는데 적합하다고 볼 수 있습니다.

 

 

 

HTTP/2 HTTP/3

 

HTTP/2

 

- TCP를 위해 설계된 프로토콜입니다. 즉, HTTP 계층에서 스트림을 다룹니다.

- Multiplexing을 지원해 동시에 여러 콘텐츠가 전송될 수 있도록 개선되었습니다.

- HPACK이라는 압축 방식을 사용해 헤더를 압축합니다. 이 때문에 순서에 의존적인 특징이 있습니다.

 

HTTP/3

 

- UDP에서 동작합니다. UDP 기반의 QUIC라는 기술이 HTTP/3로 들어와 변화했습니다.

- 다수의 연결 스트림을 만들어 전송함으로써 HOL Blocking을 피합니다.

- QPACK이라는 압축방식으로 변경되었습니다. UDP의 특성상, 순서 의존적인 부분을 개선했다고 합니다.

 

https://evan-moon.github.io/2019/10/08/what-is-http3/

 

HTTP/3는 왜 UDP를 선택한 것일까?

는 의 세 번째 메이저 버전으로, 기존의 HTTP/1, HTTP/2와는 다르게 UDP 기반의 프로토콜인 을 사용하여 통신하는 프로토콜이다. HTTP/3와 기존 HTTP 들과 가장 큰 차이점이라면 TCP가 아닌 UDP 기반의 통

evan-moon.github.io

 

 

WireShark

 

원리

 

 WireShark의 패킷 캡쳐 원리는 패킷 스니핑입니다. 스니핑은 데이터를 도청하는 행위를 일컫는데, 전송되는 패킷들을 도청하여 보여주는 방식이라고 합니다. 리눅스나 윈도우 각각 libpcap / Winpcap과 같은 OS 지원 캡처 라이브러리가 존재해 이를 이용해 네트워크 트래픽을 캡처하게 됩니다.

 

기능

 

- 네트워크 패킷 감시용 프로그램으로, pcap을 이용하여 패킷을 잡아내는 기능을 합니다.

- 순서 / 시간 / 송.수신 주소 / 프로토콜 / 패킷 길이 정보 등 다양한 패킷에대한 정보를 수집할 수 있습니다.

- 각종 필터링 기능을 제공하여 원하는 프로토콜의 패킷만 확인하는 등의 사용도 가능합니다.

- 무차별 모드(Promiscuous mode)라는 기능이 있어, 여기서 브로드캐스트나 멀티캐스트 트래픽도 확인할 수 있습니다.