GET,POST — 簡述

来源:http://www.cnblogs.com/useryangtao/archive/2016/03/31/5339688.html
-Advertisement-
Play Games

本文主要對GET與POST基本區別進行彙總並掌握,如有錯誤與遺漏之處,請指出。 文章出處:http://www.cnblogs.com/useryangtao/ 1. HTTP HTTP(即超文本傳輸協議)是現代網路中最常見和常用的協議之一,設計它的目的是保證客戶機和伺服器之間的通信。 HTTP 的 ...


本文主要對GET與POST基本區別進行彙總並掌握,如有錯誤與遺漏之處,請指出。

文章出處:http://www.cnblogs.com/useryangtao/

1. HTTP

HTTP(即超文本傳輸協議)是現代網路中最常見和常用的協議之一,設計它的目的是保證客戶機和伺服器之間的通信。

HTTP 的工作方式是客戶端與伺服器之間的 "請求-響應" 協議。

客戶端可以是 Web 瀏覽器,伺服器端可以是電腦上的某些網路應用程式。

通常情況下,由瀏覽器向伺服器發起 HTTP 請求,伺服器向瀏覽器返迴響應。

響應包含了請求的狀態信息以及可能被請求的內容。

2. 請求方式

HTTP方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 。

其中兩種常見的 HTTP 請求就是: GETPOST

GET是從伺服器上獲取數據,POST則是向指定的資源提交要被處理的數據

3. 格式

請求報文的格式:

<request line>

<headers>

<blank line>

<request-body>

 

GET請求數據按照查詢字元串(名稱/值對)方式,放置在 HTTP請求協議頭(headers) 中,也就是URL之後;

 

POST提交的數據則放在 實體的主體(request-body) 中。

4. 緩存,書簽,歷史記錄,預設method

緩存 : GET會被緩存,POST不能。

書簽 : GET可收藏為書簽,POST不可收藏為書簽

歷史記錄 : GET請求的URL,參數會被瀏覽器保留在歷史中,POST參數不會。

預設method : 在from提交的時候,如果不指定Method,則預設為GET請求。

5. 響應速度
GET請求是可以被客戶端緩存的。會比POST高效。

 

AJAX環境中GET響應快速,POST需要先發送HTTP頭部(headers) 再發送報文 實體的主體(request-body)中的數據。

 

6. 類型限制

6.1 GET限制數據集的值必須為ASCII字元; GET提交的數據將會附加在url之後,以?分開與url分開。

1.以 ? 來分隔URL和數據;

2.以& 來分隔參數;

3.如果數據是英文或數字,原樣發送;

4.如果數據是中文或其它字元,則進行BASE64編碼;

5.GET將數據的按照variable=value的形式,添加到URL後面;

如:http://www.abc.com/?username=yt&id=123

 

6.2 POST沒有限制,允許二進位數據。

POST是將數據放在請求的數據體(request-body)中,按照查詢字元串(名稱/值對)相對應的方式,傳遞到所指向URL;

 

7. 大小限制

7.1.GET方式提交的數據最多只能是1024位元組,POST支持較大數據傳輸

7.2HTTP協議對GET和POST都沒有對長度的限制 RFC 2616 中明確對 uri 的長度並沒有限制。

不過雖然在RFC中並沒有對uri的長度進行限制,但是各大瀏覽器廠家實現上限制了URL的長度。

IE對URL長度的限制是 2083位元組 (2K+35)

而對於URL長度上的限制,有兩方面的原因造成 ( 安全考慮 ): 瀏覽器:據說早期的瀏覽器會對URL長度做限制。

IE對URL長度會限制在2083個字元內,Chrome會崩潰。 伺服器:URL長了,對伺服器處理也是一種負擔。

原本一個會話就沒有多少數據,現在如果有人惡意地構造幾個幾M大小的URL, 並不停地訪問你的伺服器。

伺服器的最大併發數顯然會下降。 另一種攻擊方式是:把告訴伺服器Content-Length是一個很大的數,

然後只給伺服器發一點兒數據,嘿嘿,伺服器你就傻等著去吧。

哪怕你有超時設置,這種故意的次次訪問超時也能讓伺服器吃不了兜著走。

有鑒於此,多數伺服器出於安全啦、穩定啦方面的考慮,會給URL長度加限制。

但是這個限制是針對所有HTTP請求的,與GET、POST沒有關係。

 

8. 實際中 — POST比GET「相對安全」

GET所發送的數據是 URL 的一部分, 有時候會直接反應在瀏覽器的地址欄,

現在的瀏覽器大多會記住曾經輸入過的URL(在發送密碼或敏感信息時絕不要使用 GET !)。

試想如果你曾經在別人電腦上填過一個很私密的表單,那麼你的這份記錄很可能被連沒什麼電腦常識的人都一覽無遺。

但是被抓包之後的POST請求和GET請求是一樣裸露的,所以這裡是相對的。

 

9. 語義上 — GET比POST「相對安全」

說 POST 比 GET 安全 也不完全對的。 根據HTTP規範,POST表示可能修改變伺服器上的資源的請求。

在語義上(restful視角): GET的是獲取指定URL上的資源,是讀操作。

重要的一點是不論對某個資源GET多少次,它的狀態是不會改變的,

在這個意義上,我們說GET是安全的(不是被密碼學或者數據保護意義上的安全)。

因為GET是安全的,所以GET返回的內容可以被瀏覽器,Cache伺服器緩存起來。

POST的語義是修改變伺服器上的資源的請求,所以是不安全的, 每次提交的POST,代碼都會認為這個操作會修改資源的狀態,

於是,瀏覽器在你按下F5的時候會跳出確認框,緩存伺服器不會緩存POST請求返回內容。

 



作者: 楊濤

出處: http://www.cnblogs.com/useryangtao

此博客文章僅供交流學習,如原創文章,轉載請註明出處。




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

-Advertisement-
Play Games
更多相關文章
  • 我們一般都會用webservice來做遠程調用,大概有兩種方式,其中一種方式rest風格的簡單明瞭。 記錄下來作為筆記: 開發服務端: 具體的語法就不講什麼了,這個網上太多了,而且只要看一下代碼基本上都懂,下麵是直接貼代碼: 這個風格和springmvc實在太像了,所以一看基本上就懂了。 下麵是配置 ...
  • 經查找一些資料,並且親自實驗之後得出: r+:打開已存在的文件時,游標位於開頭,文件可讀,可寫, 寫數據時,由於游標位於開頭,所以會覆蓋原有數據 w+:打開的文件已存在時,將覆蓋原文件 a+:打開已存在的文件時,游標位於文件尾,文件可讀,可寫 讀數據時,游標會回到開頭 ...
  • 基本介面:Collection 介面: List 實現類:ArrayList LinkedList 介面:Set(唯一,無序) 實現類:HashSet(哈希) TreeSetMap介面:Map 實現類:HashMap ArrayList類特點:長度可變,連續空間,任意類型,類型相同適用情況:適合多次 ...
  • 作為後端應用的開發者,我們經常開發、調試、測試完我們的應用併發布到生產環境,用戶就可以直接訪問到我們的應用了。但對於互聯網應用,在你的應用和用戶之間還隔著一層低調的或厚或薄的負載均衡層軟體,它們不顯山不露水默默的發揮著重要的作用,以至於我們經常忽略了它們的存在。因為負載均衡層通常不在一般開發人員的問 ...
  • 你是如何指定一個頁面的編碼的呢?你知道瀏覽器是怎麼識別編碼的嗎? 首先,一個很簡單的例子,用遇簡的HTML頁面來看看各瀏覽器下有什麼不同: 最簡HTML,<head>和<body>都沒有內容,伺服器也不給出具體的編碼聲明,直接從本地打開,各個瀏覽器下查看頁面的編碼: 從表格中可以看出,對於沒有使用任 ...
  • <input type="checkbox">: 1 2 3 4 5 2012歐洲杯"死亡之組"小組出線的國家隊是:<br> <input type="checkbox" name="nation" value="Germany">德國 <input type="checkbox" name="na ...
  • 一:結構 註意,1 必須是三張以上圖片,2 最外層carousel-wrap必須要有一個寬高 二:CSS 三:JS 基於JQ, 四:測試地址 http://game.feiliu.com/zk/new/plugin/default.html 五:demo源碼下載 http://files.cnblo ...
  • 前端開發命名規則很重要,但是網上的命名規則一大篇,下麵是我總結的一些常用的短語,希望能幫到大家,肯定不全,歡迎大家補充。 1.如果是模塊,可以這樣首碼: 彈出:pop 公共:global(縮寫:gb) 標題:title,tit 提示:hint 菜單:menu 信息:info 預覽:pvw 導航:na ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...