Header
- header是可以加入自定义键值对的。
并非一定要使用cookie,我们公司APP的请求就是使用自定义的参数而非Cookie
content-length用于描述HTTP消息实体的传输长度the transfer-length of the message-body在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体 的传输长度是gzip压缩后的长度。另外,长度是指字节大小,而非字符数量
Cookie
这两天学习Cookie有关的知识,发现之前真的不懂
- 服务器通过
Set-Cookie首部将cookie信息返回给客户端 - 客户端收到并保存cookie,服务器
Set-Cookie时会指定cookie的有效目录,默认为当前页面所处目录 - 客户端在每次请求时,都携带当前页面适用的cookie
Session
- session是通过
Cookie实现的 - 服务器端 通过
Set-Cookie,将session-id=value这个cookie存到客户端 - 客户端每次携带
session-id=value这条cookie信息,于是服务器能根据seesionid来找到位于服务器上的session实例。 - 客户端禁用session时使用URL重写来使每次请求url携带
sessionid
服务器是怎么判断浏览器是否禁用了cookie的呢?
- TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。
- 浏览器第一次访问时,服务器创建Session,然后将Session的Id以Cookie的形式发送回给浏览器,response. encodeURL(java.lang.String url)方法也将URL进行了重写,当点击刷新按钮第二次访问,由于浏览器没有禁用cookie,所以第二次访问时带上了cookie,此时服务器就可以知道当前的客户端浏览器并没有禁用cookie,那么就通知response. encodeURL(java.lang.String url)方法不用将URL进行重写了。
简单来说,就是服务器第一次返回html的时候,将
sessionid设置到cookie的同时,为所有url重写加上sessionid。两手准备,防止浏览器不支持cookie。等到浏览器下次再请求,就可以根据是否携带cookie,来判断是否支持cookie了。
一个携带sessionid的url示例
<a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=2'>购买</a>
菜鸟声明:
- 真的是菜鸟,而且我一般只会写写自己的理解,所以难免有错误。
- 请各位谅解的同时,能帮忙指正~