AJAX HttpRequest가 어떻게 통신하는지 분석해보자~
Ajax가 신기하다는 것을 뒤늦게 깨닿고 공부중입니다.
그런데 웹사이트를 Refresh하지 않고 데이터를 가져오는게 장점인데. 과연 어떻게 하는 것일까? XML 통신인것 같긴 한데 한번 분석해보자.
우선 패킷 캡쳐를 하기 위해서 와이어샤크 (이전에 이더리얼) 을 사용해서 캡쳐시작.
그리고 예제로 만든 웹주소 실행
http://easystudy.cafe24.com/hp41/test_ajax/ajax_basic1.htm
function getServerTime() { var myurl = 'ajax_basic1_telltimeXML.php'; myRand = parseInt(Math.random() * 999999999999999); var modurl = myurl + "?rand=" + myRand; http.open("GET", modurl, true); http.onreadystatechange = useHttpResponse; http.send(null); } function useHttpResponse() { if (http.readyState == 4) { if(http.status == 200) { var timeValue = http.responseXML.getElementsByTagName("timenow")[0]; document.getElementById('showtime').innerHTML = timeValue.childNodes[0].nodeValue; } } else { document.getElementById('showtime').innerHTML = '<img src="ajax_basic1_loader.gif">'; } }
ajax_basic1_telltimeXML.php
<?PHP
header('Content-Type: text/xml');
sleep(1); //화면에 바로 보이기 때문에 약간 딜레이 시킴.
echo "<?xml version=\"1.0\"?><clock1><timenow>".date('H:i:s')."</timenow></clock1>";
?>
분석해보니 추가적으로 데이터를 가져오는 부분도 다른 프로토콜이 아닌
그냥 HTTP 프로토콜로 해당 페이지를 가져옴 (ajax_basic1_telltimeXML.php)
하지만 웹브라우저는 그 부분만 알아서 읽고 화면전체를 refresh하지는 않는다.
GET /hp41/test_ajax/ajax_basic1_telltimeXML.php?rand=692866095308821 HTTP/1.1 Accept: */* Accept-Language: ko Referer: http://easystudy.cafe24.com/hp41/test_ajax/ajax_basic1.htm Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; IPMS/C8280A0A-14F34993EAE-000000464331; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; Tablet PC 2.0) Host: easystudy.cafe24.com Connection: Keep-Alive Cookie: PHPSESSID=f42f176f81df41ca367267e856b133e6; __utmc=210374218; ADMINHOSTINGID=b0dVLzPlD9aOiju6Xg%3D%3D; __utma=210374218.1550145776.1328834340.1328834340.1328847559.2; __utmz=210374218.1328834340.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cafe24SaveId_chkBox=Y; cafe24SaveId=easystudy
HTTP/1.1 200 OK Server: apache Date: Fri, 10 Feb 2012 05:33:52 GMT Content-Type: text/xml Transfer-Encoding: chunked Connection: keep-alive P3P: CP='NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE' X-Powered-By: PHP/5.2.9p2
41 <?xml version="1.0"?><clock1><timenow>14:33:52</timenow></clock1> 0
GET /hp41/test_ajax/ajax_basic1_loader.gif HTTP/1.1 Accept: */* Referer: http://easystudy.cafe24.com/hp41/test_ajax/ajax_basic1.htm Accept-Language: ko-KR User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; IPMS/C8280A0A-14F34993EAE-000000464331; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; Tablet PC 2.0) Accept-Encoding: gzip, deflate If-Modified-Since: Fri, 10 Feb 2012 05:17:55 GMT If-None-Match: "26449b-c88-4f34a883" Host: easystudy.cafe24.com Connection: Keep-Alive Cookie: PHPSESSID=f42f176f81df41ca367267e856b133e6; __utmc=210374218; ADMINHOSTINGID=b0dVLzPlD9aOiju6Xg%3D%3D; __utma=210374218.1550145776.1328834340.1328834340.1328847559.2; __utmz=210374218.1328834340.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cafe24SaveId_chkBox=Y; cafe24SaveId=easystudy |
var timeValue = http.responseXML.getElementsByTagName("timenow")[0];
여기가 실행되면서
<?xml version="1.0"?><clock1><timenow>14:33:52</timenow></clock1>
여기의 <timenow> 태그 안의 값을 읽어와서 timeValue 변수에 입력
여기서 다른 참고글을 읽으면 이해가 간다
http://cafe.naver.com/neloi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=172&
즉 데이터를 요청하는건 똑같이 HTTP 방식이 맞는데 클라이언트인 웹브라우저에서 자바스크립트의 getXMLHTTPRequest 를 이용하면 웹사이트 전체를 refresh하지 않고 내부적으로 데이터를 가져올 수 있고 그 가져온 데이터를 div 태그와 innerHTML 를 이용해서 받은 값을 화면에 표시를 해준다.
'IT 개발 > HTML&JS' 카테고리의 다른 글
셀렉트박스를 동적으로 (0) | 2013.04.05 |
---|---|
자바스크립트로 trim함수 구현 (0) | 2013.02.05 |
[웹표준] 제프리 젤드만의 웹표준 가이드 내용 (0) | 2011.10.06 |
"이 페이지의 스크립트로 인해 Internet Explorer 실행의 속도가 느려질 수 있습니다" 대처법 (0) | 2011.07.07 |
인쇄시 html 태그로 다음 페이지로 넘기기 style="page-break-before: always;" (0) | 2011.05.26 |