서버에 요청을 하는 과정에서 클라이언트가 작성한 값을 보내야하는 경우가 존재한다.
GET 요청은 캐싱 가능하다. 브라우저나 중간 프록시 서버에서 응답을 캐싱할 수 있다.
클라이언트의 데이터를 URL 뒤에 붙여서 보낸다. ‘?’ 마크를 통해 URL의 끝을 알리면서, 데이터 표현의 시작점을 알린다. 데이터는 key와 value 쌍으로 넣어야 한다. ‘&’는 구분자로 두 개 이상의 key-value 쌍을 구분한다.
URL에 값을 붙이므로 HTTP 패킷의 헤더에 포함되어 서버에 요청한다. 패킷의 BODY는 빈상태가 되고 BODY 데이터를 설명하는 Content-Type 헤더필드는 생략된다. URL로 표현되므로, 특정 페이지를 다른 사람이 접속할 수 있다. 간단한 데이터를 넣도록 설계되어 보내는 데이터 양의 한계가 있다.
보안 및 무결성을 위해 일반적으로 캐싱하지 않음
데이터 전송을 기반으로 한 요청 메서드. URL에 붙여서 보내지 않고 BODY에다가 데이터를 넣어서 보낸다. 헤더필드 중 BODY의 데이터를 설명하는 Content-Type 헤더필드가 들어가고 어떤 데이터 타입인지 명시한다. 타입의 종류는 아래와 같다.
application/x-www-form-urlencoded
text/plain
multipart/form-data
POST 방식으로 데이터를 보낼 때는 컨텐츠 타입을 반드시 명시해야 한다. 작성하지 않은 경우 보통 1번의 컨텐츠 타입으로 설정된다. 1번의 컨텐츠 타입은, GET방식과 마찬가지로 BODY에 key-value 쌍으로 데이터를 넣는다. 똑같이 구분자 ‘&’를 쓴다. 2번의 컨텐츠 타입은, BODY에 단순 txt를 넣는다. 3번의 컨텐츠 타입은, 파일전송을 할때 많이 쓰는데 BODY의 데이터를 바이너리 데이터로 넣는 것을 의미한다.
자바와 같이 oop 프로그래밍에서는 BODY에 데이터를 InputStream/OutputStream 클래스를 통해서 읽고/쓰고 한
POST, GET 둘 다 보내는 데이터는 전부 클라이언트 측에서 볼 수 있다. 단지 GET 방식은 URL에 데이터가 표시되어 별다른 노력없이 볼 수 있다는 것일 뿐. 보안을 위해서라면 두 방식 다 암호화 해야한다.
GET 방식의 요청은 캐싱을 사용하기 때문에 이미 요청했던 데이터를 반복 요청할 경우 속도가 빠르다.