首頁 web前端 html教學 GET POST 區別詳解_HTML/Xhtml_網頁製作

GET POST 區別詳解_HTML/Xhtml_網頁製作

May 16, 2016 pm 04:43 PM
get post

1、Get是用來從伺服器取得數據,而Post是用來傳遞資料到伺服器。
2、Get將表單中資料的依照variable=value的形式,加入action所指向的URL後面,並且兩者使用「?」連接,而各個變數之間使用「&」連接;Post是將表單中的資料放在form的資料體中,依照變數和值相對應的方式,傳遞到action所指向URL。
3、Get是不安全的,因為在傳輸過程,資料被放在請求的URL中,而如今現有的許多伺服器、代理伺服器或使用者代理都會將請求URL記錄到日誌檔案中,然後放在某個地方,這樣就可能會有一些隱私的資訊被第三方看到。另外,使用者也可以在瀏覽器上直接看到提交的數據,有些系統內部訊息將會一同顯示在使用者面前。 Post的所有操作對使用者來說都是不可見的。
4、Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能使用Post(當然還有一個原因,將在後面的提到)。
5、Get限制Form表單的資料集的值必須為ASCII字元;而Post支援整個ISO10646字元集。預設是用ISO-8859-1編碼
6、Get是Form的預設方法。
以下的比較非常非常使用:
做java的web開發有段日子了,有個問題老是困擾著我,就是亂碼問題,基本上是網路找解決方案(網路資料真的很多),都是一大堆的介紹如何解決此類的亂碼問題,但是沒幾個把問題的來龍去脈說清楚的,有時候看了些文章後,以為自己懂了,但是在開發中亂碼問題又像鬼魂一樣出來嚇人,真是頭大了!這篇文章是我長時間和亂碼做鬥爭的一些理解的積累,也希望有更多的朋友給出指點和補充。
  form有2中方法把資料提交給伺服器,get和post,分別說下來。
(一)get提交
  1.先說下客戶端(瀏覽器)的form表單用get方法是如何將資料編碼後提交給伺服器端的吧。
 
    對get方法來說,都是把資料串連在請求的url後面當作參數,如:http://localhost:8080/servlet?msg=abc
(很常見的一個亂碼問題就要出現了,如果url中出現中文或其它特殊字元的話,如:http://localhost:8080 /servlet?msg=杭州,伺服器端容易得到亂碼),url拼接完成後,瀏覽器會對url進行URL encode,然後發送給伺服器,URL encode的過程就是把部分url做為字符,按照某種編碼方式(如:utf-8,gbk等)編碼成二進制的字節碼,然後每個字節用一個包含3個字元的字串"%xy" 表示,其中xy為該位元組的兩位十六進位表示形式。我這裡說的可能不清楚,具體介紹可以看下java.net.URLEncoder類的介紹在這裡。了解了URL encode的過程,我們能看到2個很重要的問題,第一:需要URL encode的字元一般都是非ASCII的字元(籠統的講),再通俗的講就是除了英文字母以外的文字(如:中文,日文等)都要進行URL encode,所以對我們來說,都是英文字母的url不會出現伺服器得到亂碼問題,出現亂碼都是url裡面帶了中文或特殊字元造成的;第二:URL encode到底按照那種編碼方式對字元編碼?這裡就是瀏覽器的事情了,而且不同的瀏覽器有不同的做法,中文版的瀏覽器一般會預設的使用GBK,透過設定瀏覽器也可以使用UTF-8,可能不同的使用者就有不同的瀏覽器設置,也就造成不同的編碼方式,所以很多網站的做法都是先把url裡面的中文或特殊字元用javascript做URL encode,然後再拼接url提交數據,也就是替瀏覽器做了URL encode,好處就是網站可以統一get方法提交資料的編碼方式。 完成了URL encode,那麼現在的url就成了ASCII範圍內的字元了,然後以iso-8859-1的編碼方式轉換成二進位隨著請求頭一起發送出去。這裡想多說幾句的是,對於get方法來說,沒有請求實體,含有資料的url都在請求頭裡面,之所以用URL encode,我個人覺的原因是:對於請求頭來說最後都是要用iso-8859-1編碼方式編碼成二進制的101010.....的純數據在互聯網上傳送,如果直接將含有中文等特殊字符做iso-8859-1編碼會丟失信息,所以先做URL encode是有必要的。
   2。伺服器端(tomcat)是如何將資料取得到進行解碼的。
第一步是先把數據用iso-8859-1進行解碼,對於get方法來說,tomcat獲取數據的是ASCII範圍內的請求頭字符,其中的請求url裡面帶有參數數據,如果參數中有中文等特殊字符,那麼目前還是URL encode後的%XY狀態,先停下,我們先說下開發人員一般取得資料的過程。通常大家都是request.getParameter("name")取得參數數據,我們在request物件或得的數據都是經過解碼過的,而解碼過程中程式裡是無法指定,這裡要說下,有很多新手說用request.setCharacterEncoding("字元集")可以指定解碼方式,其實是不可以的,看servlet的官方API說明有對此方法的解釋:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().可以看出對於get方法他是無能為力的。那麼到底用什麼編碼方式解碼資料的呢,這是tomcat的事情了,預設缺省用的是iso-8859-1,這樣我們就能找到為什麼get請求帶中文參數為什麼在伺服器端得到亂碼了,原因是在客戶端一般都是用UTF-8或GBK對資料URL encode,這裡用iso-8859-1方式URL decoder顯然不行,在程式裡我們可以直接
Java程式碼
1. new String( request.getParameter("name").getBytes("iso-8859-1"),"客戶端指定的URL encode編碼方式") 
還原回字節碼,然後用正確的方式解碼數據,網路上的文章通常是在tomcat裡面做個設定
Xml程式碼 
1.  
這樣是讓tomcat在取得資料後用指定的方式URL decoder,URL decoder的介紹在這裡
(一)post提交
1.客戶端(瀏覽器)的form表單用post方法是如何將資料編碼後提交給伺服器端的。
  在post方法裡所要傳送的資料也要URL encode,那他是用什麼編碼方式的呢?
   在form所在的html檔案裡如果有段,那麼post就會用此處指定的編碼方式編碼。 一般大家都認為這段程式碼是為了讓瀏覽器知道用什麼字元集來對網頁解釋,所以網站都會把它放在html程式碼的最前端,盡量不出現亂碼,其實它還有個作用就是指定form表單的post方法提交資料的URL encode編碼方式。從這裡可以看出對於get方法來數,瀏覽器對資料的URL encode的編碼方式是有瀏覽器設定來決定,(可以用js做統一指定),而post方法,開發人員可以指定。
2。伺服器端(tomcat)是如何將資料取得到進行解碼的。
如果用tomcat預設缺省設置,也沒做過濾器等編碼設置,那麼他也是用iso-8859-1解碼的,但是request.setCharacterEncoding("字元集")可以派上用場。

我發現上面說的tomcat所做的事情前提都是在請求頭裡沒有指定編碼方式,如果請求頭裡指定了編碼方式將按照這種方式編碼。
   有2篇文章推薦下,地址分別是
深入淺出URL編碼:
http://www.cnblogs.com/yencain/ articles/1321386.html;
表單用post方法提交資料時亂碼問題:
http://wanghuan8086.javaeye.com/blog/173869

用post很重要的在form所在的html檔案裡如果有段
強烈建議使用post提交

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
如何使用PowerShell自動執行任務 如何使用PowerShell自動執行任務 Feb 20, 2024 pm 01:51 PM

如果您是IT管理員或技術專家,您一定意識到自動化的重要性。尤其對於Windows用戶來說,MicrosoftPowerShell是最佳的自動化工具之一。微軟為滿足您的自動化需求提供了各種工具,無需安裝第三方應用程式。本指南將詳細介紹如何利用PowerShell自動化執行任務。什麼是PowerShell腳本?如果您有使用PowerShell的經驗,您可能已經使用過命令來設定您的作業系統。腳本是.ps1檔案中這些指令的集合。 .ps1檔案包含由PowerShell執行的腳本,例如基本的Get-Help

python requests post如何使用 python requests post如何使用 Apr 29, 2023 pm 04:52 PM

python模擬瀏覽器發送post請求importrequests格式request.postrequest.post(url,data,json,kwargs)#post請求格式request.get(url,params,kwargs)#對比get請求發送post請求傳參分為表單( x-www-form-urlencoded)json(application/json)data參數支援字典格式和字串格式,字典格式用json.dumps()方法把data轉換為合法的json格式字串次方法需要

java如何發起http請求呼叫post與get接口 java如何發起http請求呼叫post與get接口 May 16, 2023 pm 07:53 PM

一、java調用post介面1、使用URLConnection或HttpURLConnectionjava自帶的,無需下載其他jar包URLConnection方式調用,如果介面回應碼被服務端修改則無法接收到返回報文,只能當回應碼正確時才能接收到回傳publicstaticStringsendPost(Stringurl,Stringparam){OutputStreamWriterout=null;BufferedReaderin=null;StringBuilderresult=newSt

淺析php中POST方法帶參數跳轉頁面 淺析php中POST方法帶參數跳轉頁面 Mar 23, 2023 am 09:15 AM

對於PHP開發者來說,使用POST帶參數跳轉頁面是一項基本技能。 POST是HTTP中一種發送資料的方法,它可以透過HTTP請求向伺服器提交數據,跳轉頁面則是在伺服器端進行頁面的處理和跳轉。在實際開發中,我們經常需要使用POST帶參數來跳轉頁面,以達到一定的功能目的。

NGINX反向代理對HTML頁面的POST請求回傳405怎麼解決 NGINX反向代理對HTML頁面的POST請求回傳405怎麼解決 May 22, 2023 pm 07:49 PM

實作如下:server{listen80;listen443ssl;server_namenirvana.test-a.gogen;ssl_certificate/etc/nginx/ssl/nirvana.test-a.gogen.crt;ssl_certificate_key/etc/nginx/test-a.gogen.crt;ssl_certificate_key/etc/nginx/ssl/nirvana.testssl/ .key;proxy_connect_timeout600;proxy_read_timeout600;proxy_send_timeout600;c

php怎麼判斷post有沒有提交 php怎麼判斷post有沒有提交 Mar 21, 2023 pm 07:12 PM

PHP是一種廣泛使用的伺服器端腳本語言,它可以用於建立互動式和動態的網路應用程式。在開發PHP應用程式時,我們通常需要透過表單將使用者輸入資料提交給伺服器端處理。然而,有時候我們需要在PHP中判斷是否有表單資料被提交,這篇文章將介紹如何進行這樣的判斷。

PHP跳轉頁面並攜帶POST資料的實作方法 PHP跳轉頁面並攜帶POST資料的實作方法 Mar 22, 2024 am 10:42 AM

PHP是一種廣泛應用於網站開發的程式語言,而頁面跳躍並攜帶POST資料是在網站開發中常見的需求。本文將介紹如何實現PHP頁面跳轉並攜帶POST數據,包括具體的程式碼範例。在PHP中,頁面跳躍一般透過header函數實現。如果需要在跳轉過程中攜帶POST數據,可以透過以下步驟完成:首先,建立一個包含表單的頁面,使用者在該頁面填寫資訊並點擊提交按鈕。在表單的acti

PHP程式碼範例:如何用POST方式傳參並實現頁面跳轉 PHP程式碼範例:如何用POST方式傳參並實現頁面跳轉 Mar 07, 2024 pm 01:45 PM

標題:PHP程式碼範例:使用POST方式傳參並實現頁面跳轉的方法在Web開發中,經常涉及如何透過POST方式傳遞參數,並在伺服器端進行處理後實現頁面跳轉的需求。 PHP作為一種流行的伺服器端腳本語言,提供了豐富的函數和語法來實現這一目的。以下將透過一個實際的範例來介紹如何使用PHP來實現這項功能。首先,我們需要準備兩個頁面,一個用來接收POST請求並處理參數

See all articles