본문 바로가기

카테고리 없음

GET 요청은 멱등이다!

GET 요청은 멱등이다!

2009/06/23 22:17

우와. 단 4글자를 고치기 위해서, 4시간을 삽질했다!!

학교 웹프로그래밍 팀 프로젝트로, jQuery와 Ajax를 사용하는 웹 어플리케이션의 막바지 작업중이었다. 분명 거의 다 만들었는데, Firefox와 Chrome에선 잘 되는데, Internet Explorer에선 되는 곳도 있고, 안되는 곳도 있는게 아닌가?! 더 웃긴건, ie8에서도 되는게 있고 안되는게 있고, ie7에서도, ie6에서도, 되는 곳이 있고, 안되는 곳이 있었다.

jQuery의 getJSON()으로 json으로 된 내용을 가져와서, 화면에 업데이트 해주는 것이었는데, 처음엔, jQuery의 ajaxForm 플러그인을 의심하다가, async 플러그인을 의심하다가, jQuery 문장의 ready()를 의심하다가, 이거 뭐, 모든 걸 다 의심해봤으나, 도저히 답이 없더라.

근데 참 웃긴게, 클라이언트에서 alert()를 중간에 넣어보면, 분명히 주기적으로 0.2초마다 팝업창이 뜨는데, 서버의 자바 서블릿에선 전혀 호출이 아예 안되는 거였다. 이 뭐 병?? 게다가, 파이어폭스랑 크롬은 된단 말이지.

그러다가 문득, “아! 톰캣이 이거 캐쉬 해주는건가?!!! HTTP의 GET은 멱등이잖아?! 0.2초만에 똑같은 요청이 들어왔으면, 같은 결과를 내보내주는 것이 HTTP 규약상에도 합당하고, 상식적으로 당연하지 않은가?” 하는 생각이 들었다.

그래서, GET을 POST로 바꿨더니…

된다!! -_-;;;

HTTP 요청에서 GET은 멱등이다. 즉, 호출하기 전과, 호출한 후의 서버의 상태는 바뀌지 않아야 되는 것이 HTTP의 규칙이다. 간단히 생각해보면 정말 기초적인 것인데, 아우 정말. -_-

파이어폭스와 크롬의 기본 옵션은, HTTP/1.1의 Expiration이 짧게 설정되어 있기 때문이었나 보다. 반면에, IE는 옵션에서 이걸 “항상 새 페이지를 받는” 것으로 설정하고 쓰는 사람도 있고, 기본값으로 쓰는 사람도 있어서 이런 일이.

GET 요청 시에는 항상 캐쉬 당할지도 모른다는 사실을 고려하자. GET 요청은 멱등이다.

-- 이상한 나라의 종텐.

http://www.jong10.com/424 에서 퍼왔다. 그런데 잘 모르겠다. 멱등...