last-modifyとIf-Maodifid-Sinceを利用してページキャッシュを行います.


httpでは  Last-Maodifiedと  If-Maodified-Sinceは、ページの最後の修正時間を記録するためのHTTPヘッダ情報であり、
なお、ここでのLast-Maodifiedは、サーバからクライアントに送信されるHTTPヘッダであり、
もう一つのIf-Maodified-Sinceは、クライアントからサーバに送信されるヘッダであり、
一体彼らはどうやって遊んでいますか?私のプロジェクトの一例を使って説明します.
 
   ファンドの正味値は毎日更新されますので、プロジェクト起動時にデータベースで一度データを取って、このリストをキャッシュします.また、このリストのdateを保存して、タイマーを通して、ある時点でこのリストを更新します.
 
    リストは毎日更新しているので、フロントエンドページから出力されるこのリストのデータも一日に一度変更されます.サーバーのストレスを軽減するために、ページがキャッシュされます.
 
 
個人理解の原理:利用last-modify 和 If-Modified-Since 做页面缓存_第1张图片 
                   
 
ローカルに存在するcacheページを再度要求すると、クライアントはIf-Maodified-Sinceヘッダを介して前のサーバから送信されます.
Last-Maodifiedは最終的にタイムスタンプを修正して送ります.これはサーバー側に検証させるために、このタイムスタンプでクライアントのページを判断するためです.
最新のものかどうかは、最新のものではない場合は、新しいコンテンツに戻り、最新の場合は、戻り304は、クライアントにローカルcacheのページを教える.
最新のものですので、クライアントは直接にローカルからページをロードすることができます.これにより、ネットワーク上で送信されるデータは大幅に減少し、サーバーの負担も軽減されます.
 
ソースを見ています
/**
	 * 
	 * @param lastModifiedTimestamp   list    
	 * @return       list    
	 */
	public boolean checkNotModified(long lastModifiedTimestamp) {
		if (lastModifiedTimestamp >= 0 && !this.notModified &&
				(this.response == null || !this.response.containsHeader(HEADER_LAST_MODIFIED))) {
			long ifModifiedSince = getRequest().getDateHeader(HEADER_IF_MODIFIED_SINCE);//              if-modified
			this.notModified = (ifModifiedSince >= (lastModifiedTimestamp / 1000 * 1000));
			if (this.response != null) {
				if (this.notModified) {//  
					this.response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); //         305 
				}
				else {
					this.response.setDateHeader(HEADER_LAST_MODIFIED, lastModifiedTimestamp); //                 Last-Modified
				}
			}
		}
		return this.notModified;
	}
 
上のクラスは  org.springframe ework.web.com ntxt.request.Servlet WebRequest
 
その後、controllerで呼び出します.
 
	@RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
	public HashMap getFundNavInfoList(WebRequest webRequest,HttpServletRequest request,FundNavInput in) throws Exception {
		//check is modify  true         ,    ,         304     
		if(webRequest.checkNotModified(lastModifyTime)){
			return null;
		}
		//.........        。。。。
}
 まとめ:
この方法はデータ更新の頻度が遅いので、リアルタイムのデータではだめです......
 
皆さん、足りないところを指摘してください.