Writer      :BYSocket(泥沙砖瓦浆木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

上一篇 图解Http协议 ,这次继续Http家族中的Cookie。泥瓦匠最近看到博客园中一篇好文,如图:

这就是因为浏览器Cookie太大,导致请求时,请求头域过大造成发送失败。下面咱们就了解了解Cookie。按着以前的思路图文并茂哈,没图说个XX。

一、概述

首先从HTTP说起,Cookie是Http协议中那部分呢?

Cookie是什么?

自问自答:Cookie是请求头域和响应头域的字段。简单地说,就是伴随请求和响应的一组键值对的文本,小文本。所以称之为”Cookie“饼干。Cookie的生命来源于服务器。首先是客户端请求服务端,此时请求为第一次,无Cookie参数。这时候,服务端setCookie发送给客户端。记住,Cookie来源自服务端

Cookie有什么用呢?

又自问自答:Cookie来源自服务端,当然服务于客户。就像你我的会话,文字是在我们之间传递的。所以Cookie用于服务端和客户端的会话。因为Http协议是无状态的,Cookie就是维持会话,说白了就是传递数据的额外媒介。

下面我们访问百度地址。

① 产生于服务端Response,在响应头域

② 请求头域是这样的:(可以在Cookie Tab页发现,和响应有一样的)

下面泥瓦匠详细介绍其Cookie在 请求和响应 的传输过程。

二、详细介绍Cookie 传输过程

直接上图,一一详细解释。顺便写个CookieServlet,模拟一下Cookie的一生。代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package org.bysocket.http;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/cookie")
public class CookieServletT extends HttpServlet
{
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        // 获取Cookie
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies)
            System.out.println(cookie.getName() + " " + cookie.getValue());
        // 创建Cookie
        Cookie cookie = new Cookie("CookieName", "CookieValue");
        cookie.setMaxAge(10);
        cookie.setHttpOnly(true);
        resp.addCookie(cookie);
         
        // 响应
        PrintWriter pw = resp.getWriter();
        pw.print("<html><body><h1>Hello,Cookie!</h1></body></html>");
    }
     
}

① 客户端访问,无服务端写入的Cookie。

代码 new Cookie(“CookieName”, “CookieValue”); 可以看出服务端产生一个新的键值对Cookie,并且设置,说明第一次请求时,请求的请求头域Cookie是没有的。下面没有CookieName=CookieValue 的Cookie值。如图:

② 服务端的Cookie传至浏览器。

代码中 HttpServletResponse.addCookie(cookie); 这样响应就加入了刚刚那个键值对Cookie。怎么传到浏览器(客户端)呢? 同样F12下,

从图中可得到,Cookie是通过HTTP的响应头域发送至浏览器。每个Cookie的set,都有一个对应Set-Cookie的头。还有其中的时间代表Cookie的存活时间,HttpOnly可是此Cookie只读模式。

③ 浏览器解析Cookie,保存至浏览器文件。

直接可以打开IE的Internet选项:

如图,那个位置文件就是我们Cookie存的地方。既然在哪里,泥瓦匠就去找到它。

打开看看,其内容就是:存放着Cookie信息和URL信息及一些关于时间的。

?
1
2
3
4
5
6
7
8
9
CookieName
CookieValue
localhost/servletBYSocket/
9728
 3416923392
 30449698
 3325104969
 30449698
 *

这样就完全搞懂了Cookie如何写入浏览器。

④ 客户端访问,有服务端写入的Cookie。

这样,同样的URL再次访问时,F12下:

不多解释,看图。

⑤ 服务器获取

服务端这时呢?只要简单的 getCookies() 就可以获取Cookie列表了。如图,服务端控制台打印如下:

泥瓦匠记忆小抄:Cookie传输小结

① 客户端访问,无服务端写入的Cookie

② 服务端的Cookie写入浏览器

③ 浏览器解析Cookie,保存至浏览器文件

④ 客户端访问,有服务端写入的Cookie

⑤ 服务器获取

四、谈Cookie的作用到XSS(跨站点脚本攻击)

Cookie没有病毒那么危险,但包含敏感信息。比如最常见的记住密码,或者一些用户经常浏览的网页数据。如图:

用户不希望这些泄露,甚至被攻击。但事实上存在这个攻击,究竟怎么攻击呢?我在 跨脚本攻击XSS 一文中也详细介绍并提出解决方案。

全名:Cross Site Script,中文名:跨站脚本攻击。顾名思义,是指“HTML注入”纂改了网页,插入恶意的脚本,从而在用户用浏览网页的时候,控制用户浏览器的一种攻击。一般攻击的套路如图所示:

五、总结

回顾全文,Cookie是HTTP协议中的一种会话机制。也明白下面两个问题就好了

1、What 什么是Cookie

2、How Cookie怎么用,干嘛用

Writer      :BYSocket(泥沙砖瓦浆木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

转载于:https://www.cnblogs.com/Alandre/p/4557254.html

JavaEE 要懂的小事:二、图解 Cookie(小甜饼)相关推荐

  1. 来聊一聊Cookie(小甜饼),及其涉及到的web安全吧

    最近在用thinkjs写自己的博客,发现总是掉到cookie的坑,于是就好好八一八这个小甜饼,没想到居然还说很有意思的,每一个知识点都能拉出一条大鱼,想想自己之前对cookie,简直就是它认识我,我只 ...

  2. JavaEE 要懂的小事:一、图解Http协议

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  3. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

  4. 单尺度二维离散小波重构(逆变换)idwt2

    clc,clear all,close all; load woman; %单尺度二维离散小波分解.分解小波函数haar [cA,cH,cV,cD]=dwt2(X,'haar'); %单尺度二维离散小 ...

  5. VB / VBA 自制二维码小工具

    现在二维码的使用越来越广泛了,广告.网址等等都用上了 从网上找了一个二维码的控件,自己做了个小工具. 二维码可以把一串字符,不管长短(没试过最长能多长),做成二维码图片 现在的的智能手机软件很多都有扫 ...

  6. android 跨屏效果图,手机电脑二合一:小米妙享跨屏协作正式上线

    手机电脑二合一:小米妙享跨屏协作正式上线 2020-10-24 11:18:44 49点赞 110收藏 86评论 10月23日晚间,小米官方宣布,小米妙享跨屏协作功能已经正式上线,首发支持小米10至尊 ...

  7. 糕头:二维火小程序初探

    2018 年 11 月 25 日,由又拍云主办的 Open Talk | 2018 小程序开发者沙龙杭州站圆满结束,二维火前端开发工程师糕头在活动上作了<二维火小程序初探>的分享. &qu ...

  8. 小程序毕设作品之微信校园二手书交易小程序毕业设计成品(5)任务书

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术,主要包括了前端小程序开发的M ...

  9. 小程序毕设作品之微信校园二手书交易小程序毕业设计成品(4)开题报告

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术,主要包括了前端小程序开发的M ...

最新文章

  1. leetcode897
  2. ubuntu12.04上安装flashcahce
  3. Spring中的@Cacheable开销
  4. VC调用QT的UIDLL
  5. markdown编辑技巧
  6. php统计网站 / html页面 浏览访问次数程序
  7. python 字符串模板_Python字符串模板
  8. C#可空类型(Nullable)
  9. 怎么用wps抽签_【WPS神技能】如何在WPS-Excel表格中制作抽奖小程序?
  10. vnc远程控制软件中文版,4款好用的vnc远程控制软件中文版
  11. 给MK802(USB大小的Android4.0小PC)引出串口信号,变成ARM开发版
  12. 人工智能的历史(History of artificial intelligence)
  13. round函数几位小数c语言,Excel中利用round函数保留两位小数实例详解
  14. uniapp——头条小程序picker变黑色
  15. AI换脸正在发酵,有人抖音玩“蚂蚁呀嘿”,有人已经创业拿到300万美元融资...
  16. 揭秘微信红包:架构、抢红包算法、高并发和降级方案
  17. 单片机开发产品流程,照这个来没错!
  18. TIPTOP 智能仓库扫描系统解决方案
  19. 房屋安全鉴定的建筑结构检测技术
  20. 妈妈不在身边的第X个母亲节,用AI找回她的美好时光

热门文章

  1. set uid,set gid,sticky bit的三个权限的详细说明
  2. 使用Hexo搭建个人博客网站
  3. linux服务器centos系统apache路径不区分大小写的解决办法(适用WDCP面板)
  4. Openlayers3 加载百度地图,天地图
  5. 实战3--设计管理模块, 第4步, 新增模块, 部门管理
  6. C语言笔记系列文章 索引目录表(持续更新中......)
  7. 应用按home键无最近应用
  8. 在线转换Postgresql 到Mysql
  9. Matlab中plot基本用法
  10. 黑马在线教育项目---15-16、datatables插件