컴퓨터 공부/JSP

[JSP] POST와 GET의 차이점

나정_ 2012. 12. 20. 17:30

오늘은 get방식과 post방식에 대하여 알아보자.~


우선 get방식과 post방식을 사용하는 이유는 무엇일까? 

그 이유는 사용자의 데이터를 서버로 전송하기 위해서이다. 


여기서 , 이러한 데이터를 url뒤에 데이터를 붙여서 서버에게 자원을 요청하는 것이 get방식이고  서버에게 요청시 필요한 정보를 요청 해더에 포함시켜 전송하는 방식이 post방식이다. 


더 자세하게 알아보명 


GET 방식  


GET방식는 서버에서 명시된 URL에 대한 위치 정보 요청으로 웹 브라우저가 문서를 받아보는데 일반적인 방법이며, 아래와 같이 데이터를 전송한다. 



----------URL 주소-------   구분자  -------------------------파라미터값---------------------------

                                                     파라미터 값이 여러개 있을 경우 하나의 개별값으로 &통해 구별해줌     

                  


이렇게 URL 뒤에 데이터를 직접적으로 붙여서 자원을 요청하기 대문에 GET방식은 보낼수 있는 데이터의 양이 제한되고

( 수정 get길이 제한내용 정리 (http://najuung.tistory.com/entry/%EA%B8%B0%ED%83%80-get%EB%B0%A9%EC%8B%9D%EC%9D%98-%EA%B8%B8%EC%9D%B4%EC%A0%9C%ED%95%9C), 보안상으로 취약하다.   


이번에는 HTTP 헤더에는 GET방식이 어떻게 표현되는지 확인해보자 

get방식은 서버에게 아래와 같이 HTTP 요청을 보낸다. 


                                          [HTTP request]

위에 있는 해더를 해석해보자면, 

GET :ui_jmn/shoppinbox/u_common.gif  HTTP/1.1 //  get메소드를 이용하여 u_common.gif 라는 이미지 파일을 요청하며 이때 HTTP 1.1버전을 사용한다 

Accept : */*  // Accept: type/subtype 형식으로 클라이언트가 우선적으로 받아들이는 미디어 형을 의미한다 

Referer: http://sgate.opap.co.kr/~ // 요청된 URL을 참조하는 문서URL에 전달한다. 

User-Agent: 클라이언트 프로그램에 대하여 식별가능한 정보를 준다 

Host : images. joinsmsn.com // 호스트의 이름을 설정한다. 

Connection: Keep-Alive // keep-alive란 http는 하나의 request와 response에 대해서 하나의 커넥션을 맺고 난 후 connection을 끈어버리는데 http/1.1부터는 다수의 request와 response에서도 기존에 맺은 connection을 재사용할 수 있도록 도와준다. 

- Connection : keep-alive = 지속적으로 connection 사용 

- Connection : close = 지속적으로 connection 사용하지 않음 


post 방식


post방식은 서버에게 요청시 필요한 정보를 요청 해더에 포함시켜 전송하는 방식으로 get방식과 다르게 길이에 제한이 없고 보안을 지킬 수 있다. 






이처럼 post방식은 데이터가 http 해더 부분 밑에 숨겨져 인코더 되어 서버로 전송이 된다

서버는 인코더된 데이터를 디코더하여 파라미터를 구분한 후 필요한 값을 추출한다.) 

(charset설정으로 데이터를 인코더할 수 있다.)   


 


*  참조 

서버와 클라이언트 사이에는 HTTP프로토콜을 통하여 대화한다.

이때 이 대화 상의 요청(request)과 응답(response)안에는 html + http 헤더가 들어가있다. 

 

(IE에서 헤더정보 보기 : http://www.blunck.se/iehttpheaders.html

(chrome 에서 헤더 정보보기 : chrome://view-http-cache/


  

HTTP/1.1 200OK ://http프로토콜 버전 1.1을 사용 

Date : Thus, 20 Dec 2012 04:28:35 GMT //현재 일시를 gmt형식으로 지정함 

Server : Apache // 웹서버의 종류를 알려줌 

Expires : Mon, 26 Jil 2013 05:00:00 /GMT // 문서가 캐시에 남아있을 수 이쓴 유효시간 

Last-Modified : Thu, 20 dec 2012 05:48:57 GMT // 문서가 마지막으로 수정된 시각 

Age : 1 // 원래의 서버가 문서를 만든후 얼마만큼의 시간이 지났는지 확인(단위:sec) 

Pragma : no cashe //  브라우저에 캐시를 저장하지 않음 

Set-Cookie : AD_DNE_DT1=CPXGP; expires=Thu, 20-Dec-2012 15:28:35 GMT L path=/ // 응답에 담긴 페이지와 연관된 하나의 쿠기를 설정

ETag = " 80de4c94ddecd1:0" // 클라이언트가 나중에 참조할 떄 사용할 이름을 문서에 부여하는 역활을 함

사용용도: 웹서버가 부여하는 Etag는 사용자가 브라우저에 접속한 데이터와 캐시가 저장한 데이터가 일치할 경우 캐시에서 저장된 정보를 받아오거나 그렇지 않을 경우 새로운 데이터를 받아올 때 구분하기 위해 사용된다. 

Cashe-Control = max-age=31536000


1.public

 - 어떤 캐시라도 저장할 수 있다. 

2. private

 - 공유된 캐시는 저장하지 않는다. 

3. no-cache

 - 문서를 캐시에 저장하지 말라는 뜻.

 - 브라우저는 일반적으로 양식데이터를 포함하는 요청에 대해서는 캐싱하지 않는다.

4. must-revalidate

 - 클라이언트는 문서를 사용할 때마다 원래의 서버에 대해 문서의 유효성을 재확인해야 한다.

5. proxy-revalidate

 - 개인적인 클라이언트 캐시를 제외하고 데티어를 재확인해야한다. 

6. max-age=xxx 

 - xxx초 이후에는 문서가 유효하지 않을 수 있다는 뜻.

 - 응답에 max-age왕 Expires모두 있다면 max-age가 우선               









'컴퓨터 공부 > JSP' 카테고리의 다른 글

[JSP] jsp:include에 대하여 알아보자 .  (2) 2013.01.18
무결성과 트렌젝션  (0) 2012.06.22
Web 언어  (1) 2012.05.08
JSP 첫걸음  (0) 2012.05.08