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

Header

  • header是可以加入自定义键值对的。

    并非一定要使用cookie,我们公司APP的请求就是使用自定义的参数而非Cookie

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

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

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示例

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

菜鸟声明:

  • 真的是菜鸟,而且我一般只会写写自己的理解,所以难免有错误。
  • 请各位谅解的同时,能帮忙指正~

参考文献

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

转载于:https://juejin.im/post/5c9727406fb9a0710504aaed

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值