http post 和 put請求方法的理解

2021-09-28 20:09:50 字數 1965 閱讀 7035

http 的post 和 get 方法確實很難區分,大多數的解釋都是,如果是新建一條記錄的話就用post,如果是更新一條記錄的話就用put,為什麼呢?

post

post 方法被用於請求源伺服器接受請求中的實體作為請求資源的乙個新的從屬物

post方法的實際功能是由伺服器決定的,並且經常依賴於請求uri(request-uri)。post提交的實體是請求uri的從屬物,就好像乙個檔案從屬於乙個目錄,一篇新聞文章從屬於乙個新聞組,或者一條記錄從屬於乙個資料庫。post方法執行的動作可能不會對請求uri所指的資源起作用。在這種情況下,200(成功)或者204(沒有內容)將是適合的響應狀態,這依賴於響應是否包含乙個描述結果的實體。如果資源被源伺服器建立,響應應該是201(created)並且包含乙個實體,此實體描述了請求的狀態。並且引用了這個新資源和乙個location頭域。post方法的響應是不可快取的。除非響應裡有合適的cache-control或者expires頭域。然而,303(見其他)響應能被使用者**利用去獲得可快取的響應。

putput方法請求伺服器去把請求裡的實體儲存在請求uri(request-uri)標識下。

如果請求uri(request-uri)指定的的資源已經在源伺服器上存在,那麼此請求裡的實體應該被當作是源伺服器關於此uri所指定資源實體的最新修改版本。如果請求uri(request-uri)指定的資源不存在,並且此uri被使用者**定義為乙個新資源,那麼源伺服器就應該根據請求裡的實體建立乙個此uri所標識下的資源。如果乙個新的資源被建立了,源伺服器必須能向使用者**(user agent) 傳送201(已建立)響應。如果已存在的資源被改變了,那麼源伺服器應該傳送200(ok)或者204(無內容)響應。如果資源不能根據請求uri建立或者改變,乙個合適的錯誤響應應該給出以反應問題的性質。實體的接收者不能忽略任何它不理解和不能實現的content-*(如:content-range)頭域,並且必須返回501(沒有被實現)響應。如果請求穿過乙個快取(cache),並且此請求uri(request-uri)指示了乙個或多個當前快取的實體,那麼這些實體應該被看作是舊的。put方法的響應是不可快取的。

post方法和put方法請求最根本的區別是請求uri(request-uri)的含義不同。post請求裡的uri 指示乙個能處理請求實體的資源(譯註:此資源可能是一段程式,如jsp 裡的servlet) 。此資源可能是乙個資料接收過程,乙個閘道器(gateway,注:閘道器和**的區別是:閘道器可以進行協議轉換,而**不能,只是起**的作用,比如快取伺服器其實就是乙個**),或者乙個單獨接收注釋的實體。對比而言,put方法請求裡的uri標識請求裡封裝的實體一一使用者**知道uri 意指什麼,並且伺服器不能把此請求應用於其它資源(resource)。如果伺服器期望請求被應用於乙個不同的uri,那麼它必須傳送301(永久移動)響應;使用者**可以自己決定是否重定向請求。乙個單獨的資源可能會被許多不同的uri指定。如:一篇文章可能會有乙個uri指定當前版本,而這個uri區別於這篇文章其它特殊版本的uri。這種情況下,對乙個通用uri的put請求可能會導致其資源的其它uri請求被源伺服器重定義。http/1.1沒有定義put方法對源伺服器的狀態影響。

等冪方法(idempotent mehtods)

方法可以有等冪的性質因為(除了出錯或終止問題)n>0個相同請求的***同單個請求的***的效果是一樣(譯註:等冪就是值不變性,相同的請求得到相同的響應結果,不會出現相同的請求出現不同的響應結果)。方法get,head,put,delete都有這種性質。同樣,方法options和trace不應該有***,因此具有內在的等冪性。然而,有可能有多個請求的請求序列是不等冪的,即使在那樣的序列中所有方法都是等冪的。(如果整個序列整體的執行的結果總是相同的,並且此結果不會因為序列的整體,部分的再次執行而改變,那麼此序列是等冪的。)例如,乙個序列是非等冪的如果它的結果依賴於乙個值,此值在以後相同的序列裡會改變。根據定義,乙個序列如果沒有***,那麼此序列是等冪的(假設在資源集上沒有並行的操作)。

相同的請求怎樣處理由我們伺服器決定,比如:乙個建立一篇博文的uri,被請求兩次時,假如我們的伺服器認為他們是不一樣的,那麼這時就只能用post,而不能用put.

http post請求方式

1 先把form表單裡的表單元素的name屬性和value屬性進行收集。2 按照enctype屬性的設定,選擇合適的編碼方式,對資料進行編碼,放在請求頭里 3 瀏覽器進行傳送。此時可以看到 title test sub 5b 5d 1 sub 5b 5d 2 sub 5b 5d 3 1 它是post...

http post請求方式

1 先把form表單裡的表單元素的name屬性和value屬性進行收集。2 按照enctype屬性的設定,選擇合適的編碼方式,對資料進行編碼,放在請求頭里 3 瀏覽器進行傳送。此時可以看到 title test sub 5b 5d 1 sub 5b 5d 2 sub 5b 5d 3 1 它是post...

php 傳送http post請求

php curl post請求中攜帶header引數 或者 header 0 text html q 0.9,text plain q 0.8,image png,q 0.5 header cache control max age 0 header connection keep alive he...