Form表單中Post與Get方法的區別

来源:https://www.cnblogs.com/supersnowyao/archive/2018/01/16/8297312.html
-Advertisement-
Play Games

Form提供了兩種數據傳輸的方式:get和post。雖然它們都是數據的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對數據產生嚴重的影響。 Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下: 1、Get是用來從伺服器上獲得數據, ...


     Form提供了兩種數據傳輸的方式:get和post。雖然它們都是數據的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對數據產生嚴重的影響。

     Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:

          1、Get是用來從伺服器上獲得數據,而Post是用來向伺服器上傳遞數據。

    (本人認為此種說法有些歧義,Get一般是用來從伺服器上獲取數據,然後在頁面中體現數據;但是Get也是可以向伺服器傳遞數據,比如查詢,一般是用get方法遞交查詢條件的。個人理解,錯誤的話,希望大家糾正

          2、Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用“?”連接,而各個變數之間使用“&”連接;Post是將表單中的數據放在form的數據體中,按照變數和值相對應的方式,傳遞到action所指向URL。

          3、Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多伺服器、代理伺服器或者用戶代理都會將請求URL記錄到日誌文件中,然後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。

    (個人認為:若是採用Get方式提交數據,所傳遞的數據看與看不見都是無所謂的,此方式傳遞的數據在頁面中一般都是體現出來的,比如查詢之類。

          若有不想體現的數據,想用Post方式提交,比如hidden的部分,嚴格來說,這也是用戶可以看見的。

          當然類似登錄場景是特殊的一種情況。所以安全與否可以這樣說,涉及到安全的信息需要使用Post,但更多的使用Post方式是需要提交更多數據的場景下。

          4、Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能使用Post。

          5、Get限制Form表單的數據集的值必須為ASCII字元;而Post支持整個ISO10646字元集。

          6、Get是Form的預設方法。

          7、使用Post傳輸的數據,可以通過設置編碼的方式正確轉化中文;而Get傳輸的數據不進行編碼直接進行傳遞(Get的編碼方式是根據頁面中指定的編碼方式)。


 舉例說明:

          1、Get 方法通過 URL 請求來傳遞用戶的數據,將表單內各欄位名稱與其內容,以成對的字元串連接,置於 action 屬性所指程式的 url 後,如http://www.mdm.com/test.asp?name=asd&password=sad,數據都會直接顯示在 url 上,就像用戶點擊一個鏈接一樣;

               Post 方法通過 HTTP post 機制,將表單內各欄位名稱與其內容放置在 HTML 表頭(header)內一起傳送給伺服器端交由 action 屬性所指的程式處理,該程式會通過標準輸入(standard input)方式,將表單的數據讀出並加以處理。

          2、 Get 方式需要使用 Request.QueryString 來取得變數的值;而 Post 方式通過 Request.Form 來訪問提交的內容。

          3、Get 方式傳輸的數據量非常小,一般限制在 2 KB 左右,但是執行效率卻比 Post 方法好;而 Post 方式傳遞的數據量相對較大,它是等待伺服器來讀取數據,不過也有位元組限制,這是為了避免對伺服器用大量數據進行惡意攻擊,根據微軟方面的說法,微軟對用 Request.Form() 可接收的最大數據有限制,IIS 4 中為 80 KB 位元組,IIS 5 中為 100 KB 位元組。

          建議:除非你肯定你提交的數據可以一次性提交,否則請儘量用 Post 方法。

          4、Get 方式提交數據,會帶來安全問題,比如一個登陸頁面,通過 Get 方式提交數據時,用戶名和密碼將出現在 URL 上,如果頁面可以被緩存或者其他人可以訪問客戶這台機器,就可以從歷史記錄獲得該用戶的帳號和密碼。

               所以表單提交建議使用 Post 方法;Post 方法提交的表單頁面常見的問題是,該頁面如果刷新的時候,會彈出一個對話框。     

          建議:出於安全性考慮,建議最好使用 Post 提交數據。

 

參考鏈接:http://www.cnblogs.com/hnrainll/archive/2011/06/07/2074597.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 面向對象進階 面向對象高級語法部分 靜態方法、類方法、屬性方法 類的特殊方法 反射 異常處理 1、靜態方法(@staticmethod) 通過@staticmethod裝飾器即可把其裝飾的方法變為一個靜態方法。 普通的方法,可以在實例化後直接調用,並且在方法里可以通過self.調用實例變數或類變數, ...
  • ##__name__變數被其他模塊調用的時候就不是main,所以就有這種使用if __name__=='__main__':##軟體目錄結構規範為什麼要設計好目錄結構?"設計項目目錄結構",就和"代碼編碼風格"一樣,屬於個人風格問題。對於這種風格上的規範,一直都存在兩種態度: 1. 一類同學認為,這 ...
  • 在編譯SSM項目時,碰到如下問題,希望能給遇到相同問題的小伙伴們幫助 O(∩_∩)O~ Eclipse導入Maven項目後,選中父項目,執行Run AS——>Maven install後,出現如下錯誤: 說的是執行編譯失敗,你是不是在JRE環境下運行而不是JDK?想了想,JDK已安裝、各種環境變數配 ...
  • package com.swift; public class String_Letter_Number_Test { public static void main(String[] args) { /* * 字元串中英文字母個數 5435abc54abc3AHJ5 */ String str="... ...
  • package com.swift; public class String_Reverse_Test { public static void main(String[] args) { /* * 字元串反轉 */ String str="abcdefghijklmn"; System.out.p... ...
  • python基礎部分學習完了,時間也已經過了兩個月左右,感覺沒學到什麼,可能是我學習之後忘記的太多了。 由於沒錢買書,要是去培訓就更沒錢了,所以在網上找了一本書,感覺還不錯,講的比較好,比較詳細。 Python核心編程(第3版)PDF高清晰完整中文版 ,需要的小伙伴可以去下載,當然如果大家不像我這麼 ...
  • 使用ConcurrentBag創建一個可擴展的爬蟲,本示例在多個獨立的即可生產任務又可消費任務的工作者間如何擴展工作量。本示例模擬一個爬蟲程式。 ...
  • 通過IIS方式寄宿服務 之前的例子是將控制台作為WCF的寄宿方式或者是直接添加契約項目的引用,然後通過配置或者是ChannelFactory的形式進行創建服務對象,其實在大多的開發中以IIS的形式創建WCF也是比較常見的。每一個Webservice都是具有一個asmx文本文件,客戶端通過訪問.asm ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...