缓存的一点测试

做了一下动态生成内容的客户端缓存测试,记录一下用到的代码。

C#的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Globalization;

namespace WebApplication
{
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  public class demo : IHttpHandler
  {

    public void ProcessRequest(HttpContext context)
    {
      // 设置缓存的秒数。
      TimeSpan timeout_duration = TimeSpan.FromSeconds(10);

      context.Response.ContentType = "application/javascript";
      context.Response.Cache.SetCacheability(HttpCacheability.Public);

      DateTime modifiedSince;
      // 解析请求的头的If-Modified-Since信息。
      DateTime.TryParse(context.Request.Headers["If-Modified-Since"], DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.AdjustToUniversal, out modifiedSince);
      DateTime utcNow = DateTime.UtcNow;
      if (modifiedSince.AddTicks(timeout_duration.Ticks) < utcNow)
      {
        // 内容已过期,重新生成信息,响应200。
        context.Response.Cache.SetMaxAge(timeout_duration);
        context.Application["counter"] = int.Parse(context.Application["counter"].ToString()) + 1;
        context.Response.Cache.SetLastModified(utcNow);
        context.Response.StatusCode = 200;
        context.Response.Write(string.Format("document.write({0})", context.Application["counter"]));
      }
      else
      {
        // 内容未更改,响应304。
        context.Response.Cache.SetMaxAge(modifiedSince + timeout_duration - utcNow);
        context.Response.Cache.SetLastModified(modifiedSince);
        context.Response.StatusCode = 304;
      }
    }

    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }
}

php的代码:

<?php
// 设置缓存的秒数。
$timeout_duration = 10;
// 解析请求的头的If-Modified-Since信息。
// 按CTRL+F5强制刷新的时候,这里将被设置为NULL。
$client_time_stamp = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
$client_time_stamp = (isset($client_time_stamp)? strtotime($client_time_stamp): 0);
$now = time();
$server_now_time_str = gmdate('D, d M Y H:i:s'). ' GMT';
header('Content-Type: application/javascript');
if(($client_time_stamp + $timeout_duration) < $now) {
	// 内容已过期,重新生成信息,响应200。
	header("Last-Modified: $server_now_time_str", true, 200);
	header("Cache-Control: max-age={$timeout_duration}");
	$micro = microtime();
	$script = <<<SCRIPT
	document.write('{$micro} <br />');
SCRIPT;
	echo $script;
} else {
	// 内容未更改,响应304。
	header("Last-Modified: {$_SERVER['HTTP_IF_MODIFIED_SINCE']}", true, 304);
	$max_age = $client_time_stamp + $timeout_duration - $now;
	header("Cache-Control: max-age={$max_age}");
}
exit(0);
?>

把无损音乐文件转到iPhone里

从网上下载了一张理查德.克莱德曼的CD,是.flac格式的,还带了一个.cue文件。我想把这张专辑转到iPhone里,用DAEMON Tools试着加载了一下.cue文件,结果报错了。在网上查了一下,用Foobar把.flac转换成.wav格式,然后用记事本把.cue文件打开,并且编辑下对应的CD文件名,比如把理查德.克莱德曼.flac改成理查德.克莱德曼.wav。然后用DAEMON Tools加载.cue文件,之后就可以在iTunes里进行转换了。

茅屋为秋风所破歌

茅屋为秋风所破歌

【唐】 杜甫

八月秋高风怒号(háo),卷我屋上三重(chóng)茅。
茅飞渡江洒江郊,高者挂罥(juàn)长(cháng)林梢,下者飘转沉塘坳(ào)。
南村群童欺我老无力,忍能对面为(wéi)盗贼。
公然抱茅入竹去,唇焦口燥呼不得,归来倚杖自叹息。
俄顷(qǐng)风定云墨色,秋天漠漠向昏黑。
布衾(qīn)多年冷似铁,娇儿恶卧踏里裂。
床头屋漏无干处,雨脚如麻未断绝。自经丧(sāng)乱少睡眠,长夜沾湿何由彻!
安得广厦千万间,大庇天下寒士俱欢颜,风雨不动安如山!
呜呼!何时眼前突兀(wù)见(xiàn)此屋,吾庐独破受冻死亦足!