오늘은 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가 우선
[출처] 응답 헤더(Response Header)|작성자 가우스