<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Jui-Nan Lin&#039;s Blog</provider_name><provider_url>https://jnlin.org</provider_url><author_name>jnlin</author_name><author_url>https://jnlin.org/author/jnlin/</author_url><title>除了自己 Server/NTP Server 的時間外，其他的時間都不應該相信。</title><html>作手機 Client 的人應該常常遇到這種問題：User 因為某些原因（像是常常賴床起不來），把手機的時間調快了 5 分鐘。如果用的又是 OAuth 這類會有 expire 機制的 Protocol，就會遇到認證失敗的問題。

一般的解決方法是，利用一台「時間準確」的 Server，提供正確的時間。可以透過 HTTP Header（可以少一個 request），也可以透過一個 API，例如：&lt;a href=&quot;http://dev.pixnet.pro/pixnet/index_now&quot;&gt;http://emma.pixnet.cc/index/now&lt;/a&gt;。最近的 &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=zh_TW&quot;&gt; Google Authenticator &lt;/a&gt; 也有類似的機制。

不過，不只是 Client 會有這樣的問題。雖然 &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_Time_Protocol&quot;&gt;NTP&lt;/a&gt; 已經很普遍了，但總是會遇到因為設定錯誤，或是防火牆擋掉，或是 blah blah 等等的原因，導致 Server 時間跑掉的情形。當然，也有可能是軟體 Bug 造成的問題，導致 Server 傳回的時間是錯誤的。

最近就遇到這樣一個好玩的現象：寫 Parser 的時候，會看一下 Server 給的 &lt;code&gt;Last-Modified&lt;/code&gt; 的 header 來判斷是否要 invalidate cache，結果發現有的 Server 會回傳未來時間...XD 

所以，如果你的 Server 有跟 NTP Server 定期對時的話，應該使用自己 Server 的時間，其他任何外部來的時間都不應該相信，一定要檢查合不合理。</html><type>rich</type></oembed>