以下是发生的情况:客户端第一次请求一个页面,根本不发送任何 cookie:
$ curl -v http://pixlshare.com/upload
服务器对基于此请求的客户端功能一无所知,尤其是它是否支持 cookie。因此,为了更加安全,它会发送cookie 并在 URL 中进行编码:JSESSIONID
< Set-Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C; Path=/; HttpOnly
...
<a wicket:id="image1Link" href="gallery/OKfzVk;jsessionid=25E7A6C27095CA1F560BCB2983BED17C">
换句话说,servlet 容器防御性地附加JSESSIONID
到每个 URL,以防客户端不支持 cookie。
那么为什么JSESSIONID
第二个请求会消失呢?因为现在客户端在 HTTP 请求中发送 cookie 并且服务器知道客户端会处理它们。话虽如此,JSESSIONID
不再需要。
$ curl -v -b JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C http://pixlshare.com/upload
> Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C
...
<a wicket:id="image1Link" href="gallery/OKfzVk">
另一方面,如果客户端不支持 cookie,服务器将继续重写 URL。
这不是 Wicket 问题,这是 Tomcat 功能。
顺便说一句(来自您的网站 JavaScript):
path = path.replace(/^C:\\fakepath\\/i, '');
什么是假的?