几个关于URL的小技巧

Q:当通过HttpClient这个工具包去访问某个URL时,服务端返回了不是你期望的信息
A:很有可能是请求的参数没有进行编码过,服务端接受到这些参数时出现乱码,从而导致返回信息不正确;要想设置请求内容的编码,可以通过如下这行代码实现:

  1. postMethod.getParams().setHttpElementCharset(encoding); //getMethod同样适用

Q:如何保持tracelog参数始终在URL后面,以保证可以被apache日志记录便于后续分析统计?
A:有些同学可能会觉得该问题太幼稚了,呵呵,其实不然,在这次tracelog统计中就出现了问题,表面上看tracelog的确已经加上去了,但是在apache访问日志里面就是没有记录;后面查了下原因出在GET方式的form提交,出现问题的代码如下:

  1.   <form id="mysoftform2" action="http://.../mysoft.jspa?tracelog=bbx_wdrj_main" method="get">
  2.    <input type="hidden" name="plugins" value="$!plugins" />
  3.   </form>

原来,get方式的form.submit()执行时,浏览器会默认将 ? 后面的参数都忽略掉;所以服务端apache自然也就无法记录了,正确的代码实现有以下几种实现方式:
其一,将所有参数都追加到URL后面,直接用<a>或者是location.href实现;

  1. <a href="http://.../mysoft.jspa?plugins=xxx&tracelog=bbx_wdrj_main" class="header_link1">我的软件</a>

其二,将所有参数(包括tracelog)都以hidden的方式存放于form中,并以GET方式submit;

  1.   <form id="mysoftform2" action="http://.../mysoft.jspa" method="get">
  2.    <input type="hidden" name="plugins" value="$!plugins" />
  3.    <input type="hidden" name="tracelog" value="bbx_wdrj_main" />
  4.   </form>

其三,将tracelog追加到URL后面,其他参数以hidden方式存放于form中,并以POST方式submit;

  1.   <form id="mysoftform2" action="http://.../mysoft.jspa?tracelog=bbx_wdrj_main" method="post">
  2.    <input type="hidden" name="plugins" value="$!plugins" />
  3.   </form>

Q:页面文件更新后为什么页面显示样式还是老的,手动刷新下就好了?
A:这很有可能是客户端对静态资源进行了缓存所致,实现客户端缓存有两种方式,其一是浏览器自动的Cache机制,此时请求页面,静态资源返回的http状态码为304,意思是浏览器向服务端发起了请求,但是服务端经过比较发现文件并没有更新,所以返回一个消息告诉浏览器无需下载该静态资源;其二是服务端(比如apache)对静态资源设置了强制缓存,此时浏览器就不会再向服务端发起请求了,而对应的http状态码也变成了Cache;由于页面在调整过程中,一般都是通过修改css样式文件实现,但是css文件的名称却不会发生变化,所以客户端很有可能使用的是老的静态资源文件从而导致新的样式没有起效!解决该问题的办法也比较简单,直接在静态资源文件后面添加一个版本号即可,比如:

  1. <link href="http://.../css/index.css?20081014" rel="stylesheet" type="text/css" />

你可能感兴趣的:(apache,浏览器,url,action,plugins,stylesheet)