博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从go服务端“设置cookie“来看cookie的本质
阅读量:4143 次
发布时间:2019-05-25

本文共 2011 字,大约阅读时间需要 6 分钟。

       cookie到底是什么, 很多地方越说越乱,玄乎其玄, 其实,很简单, 一起来看看。

       go 服务端的代码为:

package mainimport "net/http"func main()  {   http.HandleFunc("/writecookie", WriteCookie)   http.ListenAndServe("localhost:8080", nil)}func WriteCookie(w http.ResponseWriter, r *http.Request)  {   cookie := http.Cookie{Name:"name", Value:"Shimin Li", Path:"/", MaxAge:60}   http.SetCookie(w, &cookie)   w.Write([]byte("write cookie ok"))}

        go run s.go跑起来。

       

       在chrome浏览器中执行: http://localhost:8080/writecookie,  触发go服务执行设置cookie的动作, 浏览器收到这个信息后, 真正执行设置cookie,  在chrome中可查(chrome://settings/content/cookies目录中的localhost域名中查), 如下:

        可以看到,过期时间是60s, 60s后再次查的时候, 就没有name对应的cookie项了。

 

        我们等cookie过期消失, 然后再来玩抓包。 

        好,现在没有name对应的cookie了, 我们连续两次执行:http://localhost:8080/writecookie, 服务端tcpdump抓包,两次的请求和响应依次如下:

GET /writecookie HTTP/1.1Host: localhost:8080Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: xxxxxxAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9
HTTP/1.1 200 OKSet-Cookie: name="Shimin Li"; Path=/; Max-Age=60Date: Sat, 15 Sep 2018 13:41:17 GMTContent-Length: 15Content-Type: text/plain; charset=utf-8
GET /writecookie HTTP/1.1Host: localhost:8080Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: xxxxxxAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cookie: name="Shimin Li"
HTTP/1.1 200 OKSet-Cookie: name="Shimin Li"; Path=/; Max-Age=60Date: Sat, 15 Sep 2018 13:41:21 GMTContent-Length: 15Content-Type: text/plain; charset=utf-8

       可以看到,第一次请求时, 浏览器发出的请求中不带cookie, 因为浏览器压根就没有这项cookie, 在go服务端的回包中携带了Set-Cookie首部, 浏览器收到这个信息后,将其写入到浏览器本地, 形成cookie.

       第二次请求时(因cookie的过期时间设置为了60s, 故必须在60s内发起第二次请求), 此时, 浏览器的http请求中自动携带了cookie信息,go服务端也能收到这个信息。

   

       由此可见, cookie不过是浏览器端的一个环境变量而已, 仅此而已。cookie值存在于浏览器所在的本地电脑中。 而所谓的服务端设置cookie, 其实是服务端给浏览器发送对应的设置cookie信息, 由浏览器来真正执行设置cookie的操作, 存于本地电脑磁盘中。

       别扯其他的。

 

 

 

       

你可能感兴趣的文章
css中的IFC
查看>>
CentOS 6.5下 mysql用户root登录不了
查看>>
windows + tomcat 部署web服务 http 改为https访问方法
查看>>
Windows系统下Apache 服务器启动以及过程中产生问题的解决办法
查看>>
Oracle服务说明
查看>>
异常收集(三):Missing artifact com.oracle:ojdbc6:jar:1.0 两种解决方案
查看>>
异常收集(四):Plugin execution not covered by lifecycle configuration
查看>>
异常收集(五):Io 异常: The Network Adapter could not establish the connection
查看>>
JSP中的转义字符
查看>>
SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
Linux 操作指令收集
查看>>
CentOS 7下卸载MySQL方式(转)
查看>>
CentOS7 安装MySQL 5.6.43
查看>>
使用Java 导入/导出 Excel ----Jakarta POI
查看>>
本地tomcat 服务器内存不足
查看>>
IntelliJ IDAE 2018.2 汉化
查看>>
基于S5PV210的uboot移植中遇到的若干问题记录(一)DM9000网卡移植
查看>>
Openwrt源码下载与编译
查看>>
我和ip_conntrack不得不说的一些事
查看>>
Linux 查看端口使用情况
查看>>