반응형
HTTP request/response
개념
- 클라이언트에 의해 전송되는 메시지를 요청(requiests)이라 하고, 요청에 대해 서버에서 응답으로 전송하는 메시지를 응답(responeses)
Request
- 요청은 클라이언트가 서버로 전달하는 메시지로, 서버 측에 액션을 유도
- Method : GET/POST/PUT/DELETE/OPTIONS/HEAD 등 클라이언트가 수행하고자 하는 동작
- Path: 가져오려는 리소스의 경로다. 프로토콜, 도메인, TCP 포트를 제거한 리소스의 URL
- Version of protocol: HTTP 프로토콜의 버전
- Headers: 서버에 대한 추가 정보를 전달하는 선택적 헤더들
- Body: 전송된 리소스를 포함하는 Response의 본문과 유사한 본문을 포함
Response
- 요청에 대한 서버의 답변
- Version of protocol
- Status Code: Request의 성공 여부와, 실패시 그 이유를 나타내는 상태 코드다.
- Status Message: 상태코드에 대한 짧은 설명이다.
- Headers
- Body: 가져온 리소스가 포함되는 본문
Request와 Response의 구조
Header
- HTTP 메시지는 보통 Header + Body로 이루어진다.
- 헤더에는 Request와 Response로 나뉘어 짐
Header의 종류
- General Header(공통 헤더)
- Request Header(요청 헤더)
- Response Header(응답 헤더)
- Entity Header(엔티티 헤더)
General Header
공통 헤더는 요청 및 응답의 메시지 모두에서 사용됨, 컨텐츠에는 적용되지 않는 헤더. 흔하게 우리가 사용하는 공통 헤더는 Data, Cache-Control, Connection등이 있다
Request Header
요청 헤더는 HTTP 요청에서 사용되지만 메시지의 컨텐츠와 관련없는 HTTP 헤더. 보통 Fetch될 리소스나 클라이언트 자체에 대한 정보를 포함하여 서버로 보내짐
Response Header
위치 또는 서버 자체에 대한 정보와 같이 응답에 대한 부가적인 정보를 갖는 헤더
Entity Header
컨텐츠 길이나 MIME 타입과 같이 Entity Body에 대한 자세한 정보를 포함하는 세더
헤더는 프록시의 처리 방법에 따라 그룹핑될 수 있다.
Get/Post
Get이란?
- Get은 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다. 예를 들면 게시판의 게시물을 조회할 때 쓸 수 있다.
- Get을 통한 요청은 URL주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링이라고 부른다.
- 방식은 URL끝에 ‘?’를 붙이고 그 다음 변수명1=값1&변수명2=값2… 형식으로 이어 붙이면 된다.서버에서는 name1과 name2라는 파라미터 명으로 각각 value1과 value2의 파라미터 값을 전달 받을 수 있다.
- ex) www.example.com/show?name1=value1&name2=value2
Get의 특징
- Get 요청은 캐시가 가능하다.
- Get을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control헤더를 통해 캐시 옵션을 지정할 수 있다.
- Get 요청은 브라우저 히스트리에 남는다.
- Get 요청은 북마크 될 수 있다.
- Get 요청은 길이 제한이 있다.
- Get 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.
- Get 요청은 중요한 정보를 다루면 안된다. (보안)
- Get 요청은 파라미터에 다 노출되어 버리기 때문에 최소한의 보안 의식이라고 생각
- Get은 데이터를 요청할때만 사용 된다.
Post란?
- Post는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드다. ex) 게시판에 게시글을 작성하는 작업등을 할 때 사용된다.
- Post는 전송할 데이터를 HTTP메시지 body부분에 담아서 서버로 보낸다. (body의 타입은 content-Type헤더에 따라 결정)
- Get에서 URL의 파라미터로 보냈던 name1=value1&name2=value2가 body에 담겨 보내진다.
- Post로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 Get처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용된다. (하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는건 똑같다.)
- Post를 통한 데이터 전송은 보통 HTML form을 통해 서버로 전송된다.
Post의 특징
- Post 요청은 캐시되지 않는다.
- Post 요청은 브라우저 히스토리에 남지 않는다.
- Post 요청은 북마크 되지 않는다.
- Post요청은 데이터 길이에 제한이 없다.
Get과 Post의 차이점
- 사용목적 : Get은 서버의 리소스에서 데이터를 요청할 때, Post는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용 DB로 따지면 Get은 Select에 가깝고, Post는 Create에 가깝다고 보면된다.
- 요청에 body 유무 : Get은 URL파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. Post는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
- 멱등성 : Get 요청은 멱등이며, Post는 멱등이 아니다. Get은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것이다. 반대로 Post는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다. (Post요청이 발생하면 서버가 변경될 수 있다.)
*멱등성이란? : 명등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
Parameter Tampering Attack
- 사용자 입력 데이터를 조작하여 악의적인 목적을 달성하는 공격 방법 중 하나
- 이 공격은 일반적으로 URL 매개변수나 폼 데이터와 같은 HTTP 요청 매개변수를 조작하여 발생한다.
- 공격자는 매개변수의 값을 조작하여 의도치 않은 결과를 유발 ex) ssh - 치킨,피자,콜라 주문
반응형
'웹 공부' 카테고리의 다른 글
Domain/DNS & Robots.txt (0) | 2023.10.12 |
---|---|
File Upload/Download 취약점 (0) | 2023.10.01 |
Path Traversal (0) | 2023.10.01 |
IDOR&Command Injection&Directory Listing (0) | 2023.09.24 |
HTML&Cookie (0) | 2023.09.10 |