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等集合才取出來。