sessioncookie_0">HTTP、session和cookie
基础知识
1. 浏览器到底做了啥
当我们在浏览器的地址栏中,输入网址,敲击回车键,浏览器都做了什么呢?
- 找到他的电话号码
根据域名找到服务器地址
- 打给他
简历TCP三次握手链接
- 把我们想要的东西告诉他
发送HTTP请求给服务器
- 他找到我们想要的东西
服务器处理请求
- 通过电话返回来
服务器返回HTTP响应
2. 什么是HTTP请求
HTTP请求,就是浏览器与服务器通话内容的 一种格式:HTTP请求(Request)格式和HTTP响应(Response)格式。
HTTP请求格式:请求行表明我想干啥
+ 请求头表述自己的要求
+ 请求体补充描述我想干啥,就是请求的参数
HTTP响应格式:状态行服务器的回应
+ 消息头表述响应的要求
+ 消息体服务器处理的结果
Request:
请求行:
Request Method Request URL HTTPv.
我是用哪种电话打得电话 (POST,GET,DELETE...) 我要干啥 我用的哪个版本的协议
例: GET /index.html HTTP/1.1
请求头:
Accept: 我能够解析的结果格式
Accept-Encoding: 我能够解析的结果压缩格式
Accept-Language: 我说的是什么语言
Cache-Control: max-age=0
Connection: 返回信息后,是否挂掉电话
Host: blog.csdn.net
Referer: 你电话号码的区号
User-Agent: 我的电话型号
请求体:
用户名=张三
是否获取地址=是
Response:
状态行:
HTTP协议版本 状态码 状态描述
HTTP/1.1 200 OK
响应头:
Connection: 返回信息后,是否挂掉电话
Content-Encoding: 我的结果的压缩格式
Content-Type: 我的结果的类型
Date: 我回应你的时间
Server: 我用的哪种电话
Transfer-Encoding: 结果传输格式
响应体:
姓名=张三
住址=here
电话=110
cookie_53">3. Session和cookie是干啥的
因为HTTP1.1是默认长连接的,也就是说,我们打通服务器的电话之后,他是不会关掉的。我们请求一次之后,可以在请求第二次。但是这个时候问题来了,服务器是面向多用户,且HTTP请求是无状态的。他并不知道,第二次跟他请求的是谁。当我们需要判断用户权限的时候,比如登录状态,每一次请求都要走一次登录流程,是很浪费时间的。那怎么办呢,我们有下面两种方式来解决这个问题
这两个机制是什么意思呢?首先我们假设我们的网站是需要用户登录后访问的。
- 当我们和服务器接通电话
- 服务器会判断一下我们是否有登录信息。
我们假设第一次登录网站,没有登录信息
- 然后服务器会跟我们要用户名和密码,他要验证一下身份
- 身份验证通过后,他把我的电话信息,用户信息记录在小本本(session)中
- 服务器会把记录信息的位置(session_id),返回给我们(response)
通常是放在cookie返回的
- 然后我们把cookie记录再我们自己的小本本上
- 下一次请求的时候,告诉服务器我们记录的cookie
- 服务器解析cookie,然后找到我们的登录信息,证明我们登录了,它会处理请求
- 返回请求结果
session和cookie可以是相互独立存在的,可以单独有session,或者单独有cookie
没有必要的情况下,session和cookie都是可以不存在的。因为他是在无状态的HTTP链接中判断用户身份的,如果你的网站不需要这种需求,可以不用创建session或者cookie。