- [ ]
- [ ]
Cookie
HTTP短连接是什么
短链接:不会记录之前的状态,当前通话结束就断开连接,不会记录状态,下次访问时要重新建立连接
长链接:当前通话结束后不会立马断开连接,在一定时间内再次连接会记录状态
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
状态保持是什么
Cookie及Session一直以来都是Web开发中非常关键的一环,因为HTTP协议本身为无状态,每一次请求之间没有任何状态信息保持,往往我们的Web服务无法在客户端访问过程中得知用户的一些状态信息,比如是否登录等等;那么这里通过引入Cookie或者Seesion来解决这个问题
什么是COOKIE
当客户端访问时,服务端会为客户端生成一个Cookie键值对数据,通过Response响应给到客户端。当下一次客户端继续访问相同的服务端时,浏览器客户端就会将这个Cookie值连带发送到服务端
Cookie值存储在浏览器下,一般在你的浏览器安装目录的Cookie目录下,我们也可以通过F12或者各种浏览器的开发者工具来获取到
因为cookie是保存在浏览器中的一个纯明文字符串,所以一般来说服务端在生成cookie值时不建议存储敏感信息比如密码
框架对于COOKIE的操作
cookie大小上限为4kb
一个服务器最多在客户端上保存20个cookie,一个浏览器 最多保存300个cookie,cookie不安全不建议存敏感信息是明文存储的,是一个k/v格式的键值对
在django的代码中,我们可以使用一些提供Response响应的类,如:HttpResponse,redirect等实例的内置set_cookie函数来进行django项目中的Cookie设置 ‘’’ key: Cookie的key值,未来通过该key值获取到对应设置好的Cookie。 value=‘’: 对应Cookie的key值的value,比如: set_cookie(key=‘value’,value=‘shuai’) max_age=None: Cookie生效的时间,单位为秒,如果Cookie值只持续在客户端浏览器的会话时长,那么这个值应该为None。存在该值时,expires会被计算得到。 expires=None: Cookie具体过期日期,是一个datetime.datetime对象,如果该值存在,那么max_age也会被计算得到 path=‘/’: 指定哪些url可以访问到Cookie,默认/为所有。 domain=None: 当我们需要设置的为一个跨域的Cookie值,那么可以使用该参数,比如: domain=‘.test.com’,那么这个Cookie值可以被www.test.com、bbs.test.com等主域名相同的域所读取,否则Cookie只被设置的它的域所读取。为None时,代表当前域名下全局生效。 secure=False: https加密传输设置,当使用https协议时,需要设置该值,同样的,如果设置该值为True,如果不是https连接情况下,不会发送该Cookie值。 httponly=False: HTTPOnly是包含在HTTP响应头部中Set-Cookie中的一个标记。为一个bool值,当设置为True时,代表阻止客户端的Javascript访问Cookie。这是一种降低客户端脚本访问受保护的Cookie数据风险的有效的办法 ‘’’ import datetime current_time = datetime.datetime.now() # 当前时间 expires_time = current_time + datetime.timedelta(seconds=10) # 向后推延十秒 set_cookie(‘key’,‘value’,expires=expires_time) #设置Cookie及对应超时时