POST和GET
POST和GET
- 一般来说get用于获取、检索,post用于**创建、更新
- get会将请求的参数附加到Url中,而post不会在URL中附加参数,而是将参数放在request body中。所以get比post更不安全(post也不安全,因为HTTP本身是明文协议。每个HTTP请求和返回的每个byte都会在网络上明文传播,不管是url,header还是body)
- 使用get请求时,浏览器会把http header和data一并发送出去。而使用post请求时,服务器会先发送header,等待服务器响应后在发送具体data。
- get请求在URL中传送的参数是有长度限制的(因为url的长度是由限制的,谷歌浏览器限制为2mb),而POST没有。
- get请求只能进行url编码,而post支持多种编码方式
- 总的来说,get和post甚至可以说是一个东西,你可以在get请求中附带request body,也可以在post请求的url中加上参数。
Cookie和Session
Http是无状态的,也就是说服务器并不会知道这个发送http请求的客户端是谁。(服务器是个渣男,相应完之后就把客户端忘了,端户端下一次再来就和新人一样。)Cookie和Session就是为了让服务器记住客户端而诞生的。
Cookie
Cookie存数据得方式是键值对的模式key:value
,且Cookie是保存在客户端的。浏览器每次发送请求就会自动带上Cookie。假设有一个需要让用户保持登录的需求。客户端在发送登录请求后,服务器响应并验证了信息。之后服务器把用户名和密码放在Cookie中返回给客户端。之后客户端每次发送请求就都会带上Cookie,这样就能保持登录状态了。但是Cookie中保存的信息是明文的,用户名和密码存在里面很不安全。
Cookie常用的属性:
- maxAge :Cookie失效时间,单位秒。Cookie在maxAge秒之后失效。
- path:该Cookie使用路径。如果设置为”/sessionWeb/”,则只有contextPath为”/sessionWeb”的程序可以访问该Cookie。如果设置为”/”,则本域名下contextPath都可以访问该Cookie。
- domain:可以访问该Cookie的域名。如果设置为”.google.com”,则所有以”google.com”结尾的域名都可以访问该Cookie。
Session
Session与Cookie不同,Session是存在服务端的。还是假设一个保持登录的场景。服务端在验证登录请求后就生成了一个SessionID,通常来说是一个随机的字符串。并把这个字符串返回给客户端(因为是随机的字符串,没有使用明文的用户名和密码所以相对Cookie安全一点。)之后客户端在下一次访问时可以在Cookie中或者在url中带上SessionId,服务端接收到SessionID进行验证就是做到保持登录的效果了。
但是当服务器是一个集群时,就出现了一个问题。就是服务器A生成了SessionId并保存,但是服务器B并没有这个SessionID。所以当客户端下次访问的是服务器B时,就无法通过SessionID保持登录了
- 多服务器时的Session