post、get的区别数据库
答: GET把参数包含在URL中,POST经过request body传递参数。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
使用post提交的页面在点击【刷新】按钮的时候浏览器通常会提示“是否从新提交”,而get则不会;
用post能够进行文件的提交,而用get则不能够。
POST的安全性要比GET的安全性高
GET 请求可被缓存,POST 请求不会被缓存
GET 请求保留在浏览器历史记录中,POST 请求不会保留在浏览器历史记录中api
PUT和POST的区别 浏览器
一、PUT请求时,若是用相同参数访问二次接口,PUT仅会产生一条记录,后一个请求会把第一个请求覆盖掉。缓存
使用场合例如:安全
用户的帐户二维码只和用户关联,并且是一一对应的关系,此时这个api就能够用PUT 服务器
二、POST请求时,若是用相同参数访问二次接口,Post 会产生多条记录cookie
使用场合例如:session
在咱们的支付系统中,一个api的功能是建立收款金额二维码,它和金额相关,每一个用户能够有多个二维码,若是连续调用则会建立新的二维码,这个时候就用POSTasp.net
Rest模式有四种操做,
POST /uri 建立
DELETE /uri/xxx 删除
PUT /uri/xxx 更新或建立
GET /uri/xxx 查看
GET操做是安全的。所谓安全是指无论进行多少次操做,资源的状态都不会改变。好比我用GET浏览文章,无论浏览多少次,那篇文章还在那,没有变化。固然,你可能说每浏览一次文章,文章的浏览数就加一,这不也改变了资源的状态么?这并不矛盾,由于这个改变不是GET操做引发的,而是用户本身设定的服务端逻辑形成的。
PUT,DELETE操做是幂等的。所谓幂等是指无论进行多少次操做,结果都同样。好比我用PUT修改一篇文章,而后在作一样的操做,每次操做后的结果并无不一样,DELETE也是同样。顺便说一句,由于GET操做是安全的,因此它天然也是幂等的。
POST操做既不是安全的,也不是幂等的,好比常见的POST重复加载问题:当咱们屡次发出一样的POST请求后,其结果是建立出了若干的资源。
安全和幂等的意义在于:当操做没有达到预期的目标时,咱们能够不停的重试,而不会对资源产生反作用。从这个意义上说,POST操做每每是有害的,但不少时候咱们仍是不得不使用它。post
Cookie与Session的区别
答:一、cookie数据存放在客户的浏览器上,session数据放在服务器上。
二、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
三、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE。
四、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。
五、因此,将登录信息等重要信息存放为SESSION,其余信息若是须要保留,能够放在COOKIE中。
六、session会在浏览器关闭或者一段时间内销毁而cookie将持久化的存放在客户端
cookie与session如何联系与通讯的
用户首次与Web服务器创建链接的时候,服务器会给用户分发一个 SessionID做为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪个客户端。这个SessionID就是保存在客户端的,属于客户端Session。其实客户端Session默认是以cookie的形式来存储的。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。
为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。若是超过了超时时间没访问过服务器,Session就自动失效了。
固然咱们客户端能够禁用cookie,这时候服务器端就拿不到sessionID。
Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中因为有进程回收机制,系统繁忙的话Session会丢失,能够用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,并且没法捕获Session的END事件。
详细介绍Session缓存和Cache缓存的区别。
答:(1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。
(2)即便应用程序终止,只要Cache.Add方法中定义的缓存时间未过时,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。
(3)Session容易丢失,致使数据的不肯定性,而Cache不会出现这种状况。
(4)因为Session是每次会话就被加载,因此不适宜存放大量信息,不然会致使服务器的性能下降。而Cache则主要用来保存大容量信息,如数据库中的多个表。
(5)Session目前只能保存在内存中,对其性能有影响。
为了提升Cache的有效利用率,建议对于不常常改动的数据使用Cache
若是在一个B/S结构的系统中须要传递变量值,但又不能用Session、Cookie、Application,你有几种方法进行处理。答:1. Get(即便用QueryString显式传递)方式:在url后面跟参数。特色:简单、方便。搜索缺点:字符串长度最长为255个字符;数据泄漏在url中。适用数据:简单、少许、关键的数据。适用范围:传递给本身、传递给另外一个目标页面;经常使用于2个页面间传递数据。用法:例如:url后加?UserID=…,跳转到目标页面,目标页面在伺服端可用Request.QueryString["InputText"]获取其指定参数值。2. Post方式:通用的方式。利用form提交。特色:最经常使用的方法。经常使用技巧是把隐秘的数据存在隐藏域中由form提交。适用数据:大量数据,包括文件上传。适用范围:同Get方法用法:在客户端form指定action目标后submit、在asp.net的伺服端中使用server.Transfer(url)3. 页面对象的属性方式:asp.net特有方式 。利用HttpContext获取发请求的页面的信息。特色:能够直接存储对象。缺点:注意强制转换的类型要正确。适用数据:各类数据。适用范围:页面之间传递复杂数据。用法:获取Context.Handler将其转换为发请求的页面的实例,随后就能够轻松访问其form中的字段、甚至属性。其中的Context是指HttpContext对象,Handler是其属性,Context.Handler的意思能够理解为建立源页类的实例变量,而获得此实例以后,就能够直接访问其中的属性和Public方法了。4. cookie方式:将数据存在客户端的经典方法。缺点:安全性低、受客户端设置限制、一个站点仅存20个cookie,每一个容量4096字节。有效期:自定义或被用户清除适用数据:用户的会话数据(通常是用户名,用户的个性化设置信息等)适用范围:单个用户、整个站点全部页面用法:引用Request.Cookies(读取信息)、Response.Cookies(写入信息)、或用HttpCookieCollection直接建立Cookie对象。5. Session方式:将用户数据存储在服务端。特色:asp.net中能够设置session的存储方式、位置、SessionID的保存是否依赖cookie。能够直接存储对象。 缺点:asp.net中有失效的隐患有效期:用户活动时间+自定义延迟。适用数据:用户的特有信息。适用范围:单个用户、整个站点全部页面。用法:Session["CollectionName"] = value/object;6. Cache方式:将用户数据存储在伺服端数据缓存中。 特色:能够大大提升效率。 能够直接存储对象。缺点:数据更新不及时。有效期:应用程序生命周期或自定义。适用数据:全部页面、全部用户均可以共享的数据。用法:Cache["CollectionName"] = value|object;7. Appliction方式: 将数据存储于此,至关于全局变量。 特色:能够直接存储对象。整个站点的共享数据。有效期:应用程序生命周期。适用数据:全部页面、全部用户共享的数据。用法:Appliction["CollectionName"] = value|object;8. ViewState方式:asp.net特有机制,用来恢复页面状态。 特色:将页面各控件及其所存数据序列化存在name为_ViewState的隐藏域中。缺点:存在HTML中,安全性较低。能够设置加密和验证,但数据量会大增、效率有影响。适用数据:页面PostBack须要保存的数据,数据太大会影响页面发送效率。适用范围:页面自身数据保存。用法:ViewState["CollectionName"] = value;9. Static方式: 将数据存于静态变量中。 特色:利于提升效率。缺点:若用很差会导致用户或页面间数据紊乱,形成极大的隐患。建议只赋值一次,绝对禁止为单个用户而更改此值。适用数据:全部用户共享的数据。适用范围:此类全部的页面实例。用法:在class中声明静态变量。整理:页面自身保存数据可用的有ViewState,static变量。页面之间传递数据经常使用get,post,HttpContext,固然能够变通一下用于自身数据保存。单用户的全部页面数据共享经常使用session,cookie,固然也能够应用在以上两种状况。整个应用程序(全部用户所用页面)的数据共享经常使用Appliction,cache,static变量。 建议在用Request的时候要指明所取的集合,好比Get方法传来的参数从QueryString集合取,Post的从Form取,cookie从Cookies里取。虽然用Request[]集合,以上几种均可以取到,可是却形成性能上的浪费,原本直接在Form集合中,却遍历了QueryString,Form,Cookies等集合才取出来。