레이블이 서버 시간 확인하기인 게시물을 표시합니다. 모든 게시물 표시
레이블이 서버 시간 확인하기인 게시물을 표시합니다. 모든 게시물 표시

2014년 1월 18일 토요일

타겟 서버의 헤더 가져오기

서버 시간 확인하기 사이트를 보신 분들 중에 궁금증을 가지신 분들이 있을 것 같습니다.

(보는 사람도 없지만 혼자서..그렇다고 생각하고...ㅋㅋ)

웹을 통해서는 서버에 접속할 방법이 없죠..

서버에 접속을 하지 못하면 해당 서버의 시간이나 다른 정보들을 확인할 수 없습니다.

그런데 어떻게 다른 서버의 시간을 확인한단 말인가?!



네, 그렇습니다..



웹을 통해서 HTTP 프로토콜로 통신을 할 때는 항상 서버와 클라이언트 간에 헤더를 주고 받습니다.

이 헤더에 바로 서버의 시간이 들어가 있는 것이죠!

그렇다면 어떻게 그 헤더를 확인할까요?

PHP에서는 아래와 같은 함수를 제공해서 쉽게 헤더의 정보를 확인할 수 있습니다.
<pre>
<?php
    print_r(get_headers("http://www.google.com"));
?>
</pre>

get_headers 함수를 사용하면 헤더의 정보를 배열로 가지고 옵니다.

아래와 같이 출력이 되죠..
Array
(
    [0] => HTTP/1.0 200 OK
    [1] => Date: Fri, 17 Jan 2014 05:54:31 GMT
    [2] => Expires: -1
    [3] => Cache-Control: private, max-age=0
    [4] => Content-Type: text/html; charset=ISO-8859-1
    [5] => Set-Cookie: PREF=ID=ba7f1efc9ec1115d:FF=0:TM=1389938071:LM=1389938071:S=2t679jx5Jn1jQBKx; expires=Sun, 17-Jan-2016 05:54:31 GMT; path=/; domain=.google.com
    [6] => Set-Cookie: NID=67=Hjk8uiYHUXHHR0Mwp6GvSpXdztd5xvPmeVWrxa33pcaljTShBUGl2YoRbk3hrSFXxeUbyQy9Uv1FggIXD87__YjW9jh5YjDTV052pVdxEzZkn9uDu9-GAc0eZ1DbgP7r; expires=Sat, 19-Jul-2014 05:54:31 GMT; path=/; domain=.google.com; HttpOnly
    [7] => P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
    [8] => Server: gws
    [9] => X-XSS-Protection: 1; mode=block
    [10] => X-Frame-Options: SAMEORIGIN
    [11] => Alternate-Protocol: 80:quic
)

배열을 숫자가 아닌 key 형태로 가져오고 싶을 땐 get_headers 함수에 파라미터 하나만 더 추가해 주면 됩니다.
<pre>
<?php
    print_r(get_headers("http://www.google.com", 1));
?>
</pre>

그럼 아래와 같이 key 형태의 배열로 값을 가져오게 됩니다.
Array
(
    [0] => HTTP/1.0 200 OK
    [Date] => Fri, 17 Jan 2014 05:56:25 GMT
    [Expires] => -1
    [Cache-Control] => private, max-age=0
    [Content-Type] => text/html; charset=ISO-8859-1
    [Set-Cookie] => Array
        (
            [0] => PREF=ID=8f419d80f7122ce6:FF=0:TM=1389938185:LM=1389938185:S=ke8O3WHqhTOLocAD; expires=Sun, 17-Jan-2016 05:56:25 GMT; path=/; domain=.google.com
            [1] => NID=67=oFNKouP20OJI0pI_2yjJ5TmOmYfXO_L3vS7GMET9g1t6hfUm4oDoozDDFy9Ox5Xw3Icqt04J6D5NZt2cIQmyw4wh7re3xUgrV4llSP2SLA5DX-xnwMQRZm1em98yEOat; expires=Sat, 19-Jul-2014 05:56:25 GMT; path=/; domain=.google.com; HttpOnly
        )

    [P3P] => CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
    [Server] => gws
    [X-XSS-Protection] => 1; mode=block
    [X-Frame-Options] => SAMEORIGIN
    [Alternate-Protocol] => 80:quic
)

저~기에 Date가 보이시죠?ㅎㅎ

저 값이 바로 서버에서 클라이언트로 response를 보낸 시간입니다.

서버의 정확한 시간을 알아내려면 한가지 숙제가 남아있죠!



바로 오차 줄이기 입니다..

클라이언트와 서버 간에 데이터를 주고 받는 데 발생하는 시간적 오차입니다.

그건 여러분이 한번 생각해 보시기 바랍니다! ^^

허접하지만 소스는 GitHub를 통해 공유했습니다.