본문 바로가기

JAVA/JSP

[JSP] HTTP method (GET메서드 POST메서드)

728x90

HTTP 패킷

클라이언트가 서버에 요청했을 때, 보내는 데이터를 HTTP패킷이라고 한다.

(HTTP 프로토콜을 사용하므로 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라고 표현)

(HTTP 프로토콜이란 클라이언트와 서버 간 데이터를 request와 response을 통해주고받는 방식이다.)

 

이 패킷은 헤더바디로 나뉘는데, 헤더에는 데이터에 대한 정보가 담기고 바디는 특별한 경우 외에는 사용하지 않는다.

 


HTTP 메서드

HTTP 메서드에는 9가지 방식이 있다.

(헤더에는 어떤 메소드를 사용하였는지의 정보도 담긴다.)

 

1. GET

URL의 정보를 얻기 위해 서버에 요청함

(주소창에 URL을 입력하는 것도 해당 주소에 대한 GET요청을 하는 것)

 

2. POST

데이터를 HTTP 서버에 전송한다.

(예를들어 새로운 게시글을 작성할 때 사용 CRUD중 Create)

 

3. HEAD

웹 서버에 헤더 정보를 요청한다.

(서버의 상태 등을 확인하기 위해 사용)

 

4. PUT

PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.

(리소스 교체, 수정함)

(POST와 유사하나 CRUD에서 Update에 해당)

 

5. PATCH

리소스를 일부분을 수정함

(PUT과의 차이점은 PUT은 리소스의 전체적인 수정이라면 PATCH는 리소스의 일부 수정)

 

6. DELETE

리소스 삭제

 

7. CONNECT

CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺는다.

(테스트용으로 주로 사용하며 양방향 통신에 사용)

 

8. TRACE

TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 한다.

(테스트용으로 주로 사용/핑퐁 테스트)

 

9. OPTIONS

서버가 어떤 메서드를 지원하는지 알아볼 때 사용

(서버에 실제 요청을 보내기 전에 테스트하는 용도)

 

 


GET메서드와 POST메서드

 

GET방식으로 데이터 보내기

 

get방식은 지정된 자원에서 데이터를 요청할 때 사용한다.

 

 

클라이언트의 데이터를 URL뒤에 붙여서 보낸다.

www.example.com?id=exam&pass=test (예시)

이런식으로 URL뒤에 "?" 로 URL 끝을 알리고 데이터표현의 시작점을 알린다.

 

데이터는 key와 value의 쌍으로 넣어야한다. 윗 예시에서 key는 id랑 pass고 value는 exam과 test이다.

 

중간의 &는 데이터의 구분자이다.

 

 

특징

1.URL에 붙이므로, HTTP패킷의 헤더에 포함되어 서버에 요청한다.

따라서 GET방식에서는 BODY가 빈 상태로 보내진다.

 

2. URL형태로 표현되어 표현된 페이지를 다른사람에게 공유 가능 (북마크 가능, 브라우저 기록이 남음)

 

3. URL에 간단한 데이터를 넣을 수 있게 설계되어 데이터 전송양에 한계가 있다.

 

4. 그렇기에 민감한 데이터를 처리할 땐 get방식을 사용해서는 안된다.

 


 

POST방식으로 데이터 보내기

 

get방식이 데이터를 수신하기 위해서 사용한다면 post방식은 데이터를 전송을 기반으로 한 요청 메서드이다.

 

get방식은 URL에 데이터를 붙여서 보내는 반면, POST방식은 URL에 붙여서 보내지 않고

 

BODY에다 데이터를 넣어서 보낸다.

 

헤더필드중 BODY의 데이터를 설명하는 Content-Type이라는 헤더필드가 들어가고 어떤 데이터 타입인지 명시한다.

 

컨텐츠 타입 중에에 요청했을 때, 보내는 데이터를 HTTP패킷이라고 한다.

 

(HTTP 프로토콜을 사용하므로 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라고 표현)

 

(HTTP 프로토콜이란 클라이언트와 서버 간 데이터를 request와 response을 통해주고받는 방식이다.)

 

이 패킷은 헤더와 바디로 나뉘는데, 헤더에는 데이터에 대한 정보가 담기고 바디는 특별한 경우 외에는 사용하지 않는다.

 

 

Content-Type의 종류

 

1. application/x-www-form-urlencoded

BODY에 key와 value쌍 데이터를 넣어 구분자 &를 사용한다.

 

2. text/plain

BODY에 단순 txt를 넣는다.

 

3. multipart/form-date

파일전송을 할 때 많이쓰는데 BODY에 바이너리 데이터를 넣는걸 명시한다.

 

자바와 같은 객체지향프로그래밍에서는 BODY에 데이터를 in/out putstream을 통해 읽고쓰기를 하낟.

 

 

그 외

GET방식은 데이터가 URL에 표시되어 별 다른 노력 없이 볼 수 있다는 것 뿐이지 데이터 둘다 클라이언트에서 접근할 수 있어 보안성에는 큰 차이가 없다.

 

GET방식은 캐시를 저장하기 때문에 POST방식보다 더 빠르다.