亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GET和POST方法到底有什么區別

發布時間:2021-11-12 16:54:55 來源:億速云 閱讀:157 作者:柒染 欄目:大數據

GET和POST方法到底有什么區別,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

做為一個Web開發者,你一定知道在客戶端與服務端的交互中,HTTP協議為我們提供了許多方法可供使用,例如最為大家熟知的GET和POST方法,此外還有PUT和DELETE等。

今天我們就來說說最為大家熟悉,也被誤用最多的GET和POST方法,以及GET和POST方法在Tomcat中的處理方式。

1  
概念
  • HTTP規范定義

GET方法

The GET method means retrieve whatever information(in the form of an entity) is identified by the Request-URI.

POST方法

The POST method is used to request that the origin server accept

the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.

維基百科定義

GET requests a representation of the specified resource.

POST submits data to be processed (e.g., from an HTML form) to the identified resource.

通過以上的定義說明,我們可以簡要概括下:

  • GET方法用于獲取資源

GET和POST方法到底有什么區別

  • POST方法用于保存與更新資源

GET和POST方法到底有什么區別

(圖片取自圖解HTTP一書)

2  
問題

那為什么說這兩個方法被錯用了呢,這里錯用更多的是指GET方法。看維基百科上除定義之外的附加說明

GET

Note that GET should not be used for operations that cause side-effects, such as using it for taking actions in web applications. One reason for this is that

GET may be used arbitrarily by robots or crawlers, which should not need to

consider the side effects that a request should cause.

POST

The data is included in the body of the request. This may result in the creation

of a new resource or the updates of existing resources or both.

也就是說GET方法不應該被用來做能引起服務端副作用的操作。POST主要用于創建或者更新資源信息

此外,關于GET方法還有一個稱呼是冪等(idempotent)方法

而所謂idempotent,是指無論操作多少次,結果都是一樣的。而POST方法,自然不是冪等的,因為他每次都向服務端提交數據,這也是要特別注意表單重復提交的問題

但開發中,GET方法卻為開發人員大量的不分情況的使用。像提交數據,獲取信息,刪除等等操作。

而大部分應用服務器和Web Server的實現中,都會提供記錄accesslog的機制。

這個accesslog會記一些什么呢?下面是tomcat中的GET方法的一條訪問記錄,我們發現請求中附加的參數也一同被編碼記錄了下來

[07/Jan/2016:11:40:50 +0800] "GET /test/servlet?abc=%E4%BD%A0%E5%A5%BD HTTP/1.1" 200 117

而POST方法,log記錄下來的只有請求路徑而已。

[07/Jan/2016:11:09:11 +0800] "POST /test/servlet HTTP/1.1" 200 127

而這些訪問日志在應用中又有可能會提供給第三方的app做統計分析使用,試想,如果如果提交的數據中包含用戶名、密碼之類的關鍵信息,那兩種方式一對比,就知道該用啥了。

3  

對比

GET 請求的一些特點:

  • GET 請求會有 cache

  • GET 請求會保留在瀏覽歷史中

  • GET 請求可以保存到書簽

  • GET 請求不應用于處理敏感數據

  • GET 請求有長度限制

  • GET 請求應該只用于獲取數據

POST 請求的一些特點:

  • POST 不會有cache

  • POST 請求不會出現在瀏覽器的瀏覽歷史中

  • POST 請求不能保存到書簽

  • POST 也是有長度限制的(不同的Web Server可能實現不同)

4  

參數處理

那在Tomcat中對于這兩種不同的方法中,參數解析是如何處理的呢?依然是我們不變的風格,talk is cheap, 看代碼啦!

protected void parseParameters() {

Parameters parameters = coyoteRequest.getParameters();

parameters.setLimit(getConnector().getMaxParameterCount()); //參數個數也是有限制的,默認是10000

parameters.handleQueryParameters(); //如果使用POST方式提交,這里解析不出數據

if( !getConnector().isParseBodyMethod(getMethod()) ) { //這里判斷方法是否為POST

return; }

String contentType = getContentType();

if ("multipart/form-data".equals(contentType)) {

parseParts(false); //這里處理文件上傳

return; }

if (!("application/x-www-form-urlencoded".equals(contentType))) { //form提交的contentType

return;}

int len = getContentLength();

if (len > 0) {

int maxPostSize = connector.getMaxPostSize();

if ((maxPostSize > 0) && (len > maxPostSize)) {//注意這里對于POST也是有長度限制的,不是一般說的POST不限制,默認是2097152

return; }

if (readPostBody(formData, len) != len) {

return; }

parameters.processParameters(formData, 0, len); //這里的代碼在前面的文章中分析過

} else if ("chunked".equalsIgnoreCase(

coyoteRequest.getHeader("transfer-encoding"))) {

formData = readChunkedPostBody(); }

if (formData != null) {

parameters.processParameters(formData, 0, formData.length);

} } }

上面代碼中,關鍵處理部分加了一些注釋,無關的代碼也都做了刪減。

看完上述內容,你們掌握GET和POST方法到底有什么區別的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

慈利县| 淄博市| 新宾| 乾安县| 宿州市| 涞水县| 沽源县| 东丽区| 靖远县| 青海省| 屏山县| 额济纳旗| 定安县| 长海县| 竹溪县| 大邑县| 东城区| 西丰县| 新密市| 崇阳县| 大关县| 柯坪县| 龙陵县| 阿克陶县| 肃南| 思南县| 罗平县| 定日县| 新宾| 佛冈县| 灌南县| 寻甸| 长汀县| 拜泉县| 曲靖市| 左云县| 安康市| 乌拉特前旗| 资源县| 德令哈市| 衡南县|