인코딩
- 아스키
- 유니코드
- base64
- URL인코드
- 등
HTTP
Hyper Text Transfer Protocol 서버와 클라이언트의 데이터 교환을 Request(요청)과 Response(응답)
형식으로 정의한 프로토콜 입니다
💡 네트워크 포트(Network Port) 란 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소를 의미합니다. 포트에는 항구라는 의미가 있는데, 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는 장면을 연상하면 포트의 기능을 이해할 수 있습니다. 편의상, 네트워크를 설명하는 맥락에서는 네트워크를 생략하여 “포트”라고 부르기도 합니다.
💡 서비스 포트(Service Port) 는 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트를 이릅니다. 예를 들어, HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 됩니다.
포트로 데이터를 교환하는 방식은 전송 계층(Transport Layer)의 프로토콜을 따릅니다
전송계층에는 TCP와 UDP가 있습니다
HTTP 메시지
HTTP requset
시작줄은 Method, URI, HTTP버전 순서로 구성
메소드(Method)
클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식 서버가 수행해야할 동작
- 메소드 종류
- GET : 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체(덮어쓰기), 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경 (PUT이 전체 변경, PATCH는 일부 변경)
- DELETE : 리소스 삭제
- HEAD : GET과 동일하지만 메시지 부분(body 부분)을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)
- CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
가장 자주 사용되는 두개의 메소드의 형태만 보여드리면
HTTP Request GET Method
GET /index.html HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
HTTP Requset POST Method
POST /index.html HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Content-Length: 19
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
foo=bar&hello=world
HTTP Response
시작줄은 HTTP 버전, 상태코드 (Status Code), 처리 사유 (Reason Phrase)로 구성
상태 코드는 대표 예시만 상세코드를 넣어줬습니다
- 상태 코드 (Status Code)
- 1xx : 요청을 제대로 받았고 처리가 진행중임
- 102 : 서버가 요청을 수신하여 처리 중이지만 아직 사용할 수 있는 응답이 없음
- 2xx : 요청이 제대로 처리됨
- 200 : 성공
- 3xx : 요청을 처리하려면, 클라이언트가 추가 동작을 취해야함
- 302 : 다른 URL로 갈 것
- 4xx : 클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다
- 400 : 요청이 문법에 맞지 않음
- 403 : 클라이언트가 리소스에 요청할 권한이 없음
- 404 : 리소스가 없음
- 5xx : 클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패
- 500 : 요청을 처리하다가 에러가 발생
- 503 : 서버가 과부화로 인해 요청을 처리할 수 없음
- 505 : 요청에 사용된 HTTP 버전이 서버에서 지원되지 않음
- 1xx : 요청을 제대로 받았고 처리가 진행중임
HTTP Response
HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html
<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>
HTTPS
기본적으로 HTTP는 Request와 Response가 plain text로 전달되는데 만약 이를 누가 가로채면 중요한 정보가 유출될 수 있기때문에 이를 방지하기위해 HTTPS (HTTP Secure)가 나왔다 한마디로 HTTP의 암호화 버전이다
HTTP 버전
HTTPS 버전
위는 와이어샤크로 HTTP와 HTTPS의 웹 서버와 오가는 메시지를 확인한 사진이
💡 네트워크 포트(Network Port) 란 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소를 의미합니다. 포트에는 항구라는 의미가 있는데, 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는 장면을 연상하면 포트의 기능을 이해할 수 있습니다. 편의상, 네트워크를 설명하는 맥락에서는 네트워크를 생략하여 “포트”라고 부르기도 합니다.
💡 서비스 포트(Service Port) 는 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트를 이릅니다. 예를 들어, HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 됩니다.
포트로 데이터를 교환하는 방식은 전송 계층(Transport Layer)의 프로토콜을 따릅니다
전송계층에는 TCP와 UDP가 있습니다
출처 : 드림핵 커리큘럼
'Web Hacking' 카테고리의 다른 글
[Dreamhack] ClientSide : XSS (0) | 2023.03.30 |
---|---|
[Dreamhack] Mitigation: Same Origin Policy (0) | 2023.03.30 |
[Dreamhack] Background: Cookie & Session (0) | 2023.03.29 |
[Dreamhack] Background : Web Browser (0) | 2023.03.28 |
[Dreamhack] Background : Web (0) | 2023.03.28 |