[Http] Header 和 Cookie、Session技术 的笔记

Header

  • header是能够加入自定义键值对的。

    并不是必定要使用cookie,咱们公司APP的请求就是使用自定义的参数而非Cookiehtml

  • content-length用于描述HTTP消息实体的传输长度the transfer-length of the message-body

    在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,好比说gzip压缩下,消息实体长度是压缩前的长度,消息实体 的传输长度是gzip压缩后的长度。另外,长度是指字节大小,而非字符数量java

Cookie

这两天学习Cookie有关的知识,发现以前真的不懂浏览器

  1. 服务器经过Set-Cookie首部将cookie信息返回给客户端
  2. 客户端收到并保存cookie,服务器Set-Cookie时会指定cookie的有效目录,默认为当前页面所处目录
  3. 客户端在每次请求时,都携带当前页面适用的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示例cookie

<a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=2'>购买</a>
复制代码

菜鸟声明:session

  • 真的是菜鸟,并且我通常只会写写本身的理解,因此不免有错误。
  • 请各位谅解的同时,能帮忙指正~

参考文献

  1. Http协议中关于Content-Length的解读
  2. 认识HTTP----Cookie和Session篇
  3. cookie禁用后session怎么使用url重写详细讲解
相关文章
相关标签/搜索