欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GET POST 區(qū)別詳解

  發(fā)布時(shí)間:2009-04-13 11:05:00   作者:佚名   我要評(píng)論
1、Get是用來(lái)從服務(wù)器上獲得數(shù)據(jù),而Post是用來(lái)向服務(wù)器上傳遞數(shù)據(jù)。 2、Get將表單中數(shù)據(jù)的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個(gè)變量之間使用“&”連接;Post是將表單中的數(shù)據(jù)放在form的數(shù)據(jù)體中

1、Get是用來(lái)從服務(wù)器上獲得數(shù)據(jù),而Post是用來(lái)向服務(wù)器上傳遞數(shù)據(jù)。
2、Get將表單中數(shù)據(jù)的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個(gè)變量之間使用“&”連接;Post是將表單中的數(shù)據(jù)放在form的數(shù)據(jù)體中,按照變量和值相對(duì)應(yīng)的方式,傳遞到action所指向URL。
3、Get是不安全的,因?yàn)樵趥鬏斶^(guò)程,數(shù)據(jù)被放在請(qǐng)求的URL中,而如今現(xiàn)有的很多服務(wù)器、代理服務(wù)器或者用戶代理都會(huì)將請(qǐng)求URL記錄到日志文件中,然后放在某個(gè)地方,這樣就可能會(huì)有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數(shù)據(jù),一些系統(tǒng)內(nèi)部消息將會(huì)一同顯示在用戶面前。Post的所有操作對(duì)用戶來(lái)說(shuō)都是不可見(jiàn)的。
4、Get傳輸?shù)臄?shù)據(jù)量小,這主要是因?yàn)槭躑RL長(zhǎng)度限制;而Post可以傳輸大量的數(shù)據(jù),所以在上傳文件只能使用Post(當(dāng)然還有一個(gè)原因,將在后面的提到)。
5、Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符;而Post支持整個(gè)ISO10646字符集。默認(rèn)是用ISO-8859-1編碼
6、Get是Form的默認(rèn)方法。
以下的比較非常非常使用:
做java的web開(kāi)發(fā)有段日子了,有個(gè)問(wèn)題老是困擾著我,就是亂碼問(wèn)題,基本上是網(wǎng)上查找解決方案(網(wǎng)上資料真的很多),都是一大堆的介紹如何解決此類(lèi)的亂碼問(wèn)題,但是沒(méi)幾個(gè)把問(wèn)題的來(lái)龍去脈說(shuō)清楚的,有時(shí)候看了些文章后,以為自己懂了,但是在開(kāi)發(fā)中亂碼問(wèn)題又像鬼魂一樣出來(lái)嚇人,真是頭大了!這篇文章是我長(zhǎng)時(shí)間和亂碼做斗爭(zhēng)的一些理解的積累,還希望有更多的朋友給出指點(diǎn)和補(bǔ)充。
  form有2中方法把數(shù)據(jù)提交給服務(wù)器,get和post,分別說(shuō)下吧。
(一)get提交
  1.首先說(shuō)下客戶端(瀏覽器)的form表單用get方法是如何將數(shù)據(jù)編碼后提交給服務(wù)器端的吧。
 
    對(duì)于get方法來(lái)說(shuō),都是把數(shù)據(jù)串聯(lián)在請(qǐng)求的url后面作為參數(shù),如:http://localhost:8080/servlet?msg=abc
(很常見(jiàn)的一個(gè)亂碼問(wèn)題就要出現(xiàn)了,如果url中出現(xiàn)中文或其它特殊字符的話,如:http://localhost:8080 /servlet?msg=杭州,服務(wù)器端容易得到亂碼),url拼接完成后,瀏覽器會(huì)對(duì)url進(jìn)行URL encode,然后發(fā)送給服務(wù)器,URL encode的過(guò)程就是把部分url做為字符,按照某種編碼方式(如:utf-8,gbk等)編碼成二進(jìn)制的字節(jié)碼,然后每個(gè)字節(jié)用一個(gè)包含3個(gè)字符的字符串 "%xy" 表示,其中xy為該字節(jié)的兩位十六進(jìn)制表示形式。我這里說(shuō)的可能不清楚,具體介紹可以看下java.net.URLEncoder類(lèi)的介紹在這里。了解了 URL encode的過(guò)程,我們能看到2個(gè)很重要的問(wèn)題,第一:需要URL encode的字符一般都是非ASCII的字符(籠統(tǒng)的講),再通俗的講就是除了英文字母以外的文字(如:中文,日文等)都要進(jìn)行URL encode,所以對(duì)于我們來(lái)說(shuō),都是英文字母的url不會(huì)出現(xiàn)服務(wù)器得到亂碼問(wèn)題,出現(xiàn)亂碼都是url里面帶了中文或特殊字符造成的;第二:URL encode到底按照那種編碼方式對(duì)字符編碼?這里就是瀏覽器的事情了,而且不同的瀏覽器有不同的做法,中文版的瀏覽器一般會(huì)默認(rèn)的使用GBK,通過(guò)設(shè)置瀏覽器也可以使用UTF-8,可能不同的用戶就有不同的瀏覽器設(shè)置,也就造成不同的編碼方式,所以很多網(wǎng)站的做法都是先把url里面的中文或特殊字符用 javascript做URL encode,然后再拼接url提交數(shù)據(jù),也就是替瀏覽器做了URL encode,好處就是網(wǎng)站可以統(tǒng)一get方法提交數(shù)據(jù)的編碼方式。 完成了URL encode,那么現(xiàn)在的url就成了ASCII范圍內(nèi)的字符了,然后以iso-8859-1的編碼方式轉(zhuǎn)換成二進(jìn)制隨著請(qǐng)求頭一起發(fā)送出去。這里想多說(shuō)幾句的是,對(duì)于get方法來(lái)說(shuō),沒(méi)有請(qǐng)求實(shí)體,含有數(shù)據(jù)的url都在請(qǐng)求頭里面,之所以用URL encode,我個(gè)人覺(jué)的原因是:對(duì)于請(qǐng)求頭來(lái)說(shuō)最終都是要用iso-8859-1編碼方式編碼成二進(jìn)制的101010.....的純數(shù)據(jù)在互聯(lián)網(wǎng)上傳送,如果直接將含有中文等特殊字符做iso-8859-1編碼會(huì)丟失信息,所以先做URL encode是有必要的。
   2。服務(wù)器端(tomcat)是如何將數(shù)據(jù)獲取到進(jìn)行解碼的。
   第一步是先把數(shù)據(jù)用iso-8859-1進(jìn)行解碼,對(duì)于get方法來(lái)說(shuō),tomcat獲取數(shù)據(jù)的是ASCII范圍內(nèi)的請(qǐng)求頭字符,其中的請(qǐng)求url里面帶有參數(shù)數(shù)據(jù),如果參數(shù)中有中文等特殊字符,那么目前還是URL encode后的%XY狀態(tài),先停下,我們先說(shuō)下開(kāi)發(fā)人員一般獲取數(shù)據(jù)的過(guò)程。通常大家都是request.getParameter("name")獲取參數(shù)數(shù)據(jù),我們?cè)趓equest對(duì)象或得的數(shù)據(jù)都是經(jīng)過(guò)解碼過(guò)的,而解碼過(guò)程中程序里是無(wú)法指定,這里要說(shuō)下,有很多新手說(shuō)用 request.setCharacterEncoding("字符集")可以指定解碼方式,其實(shí)是不可以的,看servlet的官方API說(shuō)明有對(duì)此方法的解釋?zhuān)篛verrides 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().可以看出對(duì)于get方法他是無(wú)能為力的。那么到底用什么編碼方式解碼數(shù)據(jù)的呢,這是tomcat的事情了,默認(rèn)缺省用的是 iso-8859-1,這樣我們就能找到為什么get請(qǐng)求帶中文參數(shù)為什么在服務(wù)器端得到亂碼了,原因是在客戶端一般都是用UTF-8或GBK對(duì)數(shù)據(jù) URL encode,這里用iso-8859-1方式URL decoder顯然不行,在程序里我們可以直接
Java代碼
1. new String(request.getParameter("name").getBytes("iso-8859-1"),"客戶端指定的URL encode編碼方式") 
還原回字節(jié)碼,然后用正確的方式解碼數(shù)據(jù),網(wǎng)上的文章通常是在tomcat里面做個(gè)配置
Xml代碼 
1. <Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK"/> 
這樣是讓tomcat在獲取數(shù)據(jù)后用指定的方式URL decoder,URL decoder的介紹在這里
(一)post提交
1.客戶端(瀏覽器)的form表單用post方法是如何將數(shù)據(jù)編碼后提交給服務(wù)器端的。
  在post方法里所要傳送的數(shù)據(jù)也要URL encode,那么他是用什么編碼方式的呢?
   在form所在的html文件里如果有段<meta http-equiv="Content-Type" content="text/html; charset=字符集(GBK,utf-8等)"/>,那么post就會(huì)用此處指定的編碼方式編碼。一般大家都認(rèn)為這段代碼是為了讓瀏覽器知道用什么字符集來(lái)對(duì)網(wǎng)頁(yè)解釋?zhuān)跃W(wǎng)站都會(huì)把它放在html代碼的最前端,盡量不出現(xiàn)亂碼,其實(shí)它還有個(gè)作用就是指定form表單的post方法提交數(shù)據(jù)的 URL encode編碼方式。從這里可以看出對(duì)于get方法來(lái)數(shù),瀏覽器對(duì)數(shù)據(jù)的URL encode的編碼方式是有瀏覽器設(shè)置來(lái)決定,(可以用js做統(tǒng)一指定),而post方法,開(kāi)發(fā)人員可以指定。
2。服務(wù)器端(tomcat)是如何將數(shù)據(jù)獲取到進(jìn)行解碼的。
如果用tomcat默認(rèn)缺省設(shè)置,也沒(méi)做過(guò)濾器等編碼設(shè)置,那么他也是用iso-8859-1解碼的,但是request.setCharacterEncoding("字符集")可以派上用場(chǎng)。

我發(fā)現(xiàn)上面說(shuō)的tomcat所做的事情前提都是在請(qǐng)求頭里沒(méi)有指定編碼方式,如果請(qǐng)求頭里指定了編碼方式將按照這種方式編碼。
   有2篇文章推薦下,地址分別是
深入淺出URL編碼:
http://www.cnblogs.com/yencain/articles/1321386.html;
表單用post方法提交數(shù)據(jù)時(shí)亂碼問(wèn)題:
http://wanghuan8086.javaeye.com/blog/173869

用post很重要的在form所在的html文件里如果有段<meta http-equiv="Content-Type" content="text/html; charset=字符集(GBK,utf-8等)"/>
強(qiáng)烈建議使用post提交

相關(guān)文章

  • HTML 表格詳解(簡(jiǎn)單易懂較詳細(xì))

    HTML表格用于在網(wǎng)頁(yè)上展示數(shù)據(jù),通過(guò)標(biāo)簽及其相關(guān)標(biāo)簽來(lái)創(chuàng)建,表格由行和列組成,每一行包含一個(gè)或多個(gè)單元格,單元格可以包含文本、圖像、鏈接等元素,本文將詳細(xì)介紹HTML表格
    2025-03-12
  • 禁止HTML頁(yè)面滾動(dòng)的操作方法

    本文介紹了三種禁止HTML頁(yè)面滾動(dòng)的方法:通過(guò)CSS的overflow屬性、使用JavaScript的滾動(dòng)事件監(jiān)聽(tīng)器以及使用CSS的position:fixed屬性,每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn),感興
    2025-02-24
  • 使用HTML和CSS實(shí)現(xiàn)文字鏤空效果的代碼示例

    在 Web 開(kāi)發(fā)中,文本的視覺(jué)效果是提升用戶體驗(yàn)的重要因素之一,通過(guò) CSS 技巧,我們可以創(chuàng)造出許多獨(dú)特的效果,例如文字鏤空效果,本文將帶你一步一步實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文字鏤空
    2024-11-17
  • Html去除a標(biāo)簽的默認(rèn)樣式的操作代碼

    在Html中,a標(biāo)簽?zāi)J(rèn)的超鏈接樣式是藍(lán)色字體配下劃線,這可能不滿足所有設(shè)計(jì)需求,如需去除這些默認(rèn)樣式,可以通過(guò)CSS來(lái)實(shí)現(xiàn),本文給大家介紹Html去除a標(biāo)簽的默認(rèn)樣式的操作代碼
    2024-09-25
  • HTML文本域如何設(shè)置為禁止用戶手動(dòng)拖動(dòng)

    在HTML中,可以通過(guò)設(shè)置CSS的resize屬性為none,來(lái)禁止用戶手動(dòng)拖動(dòng)文本域(textarea)的大小,這種方法簡(jiǎn)單有效,適用于大多數(shù)現(xiàn)代瀏覽器,但需要在老舊瀏覽器中進(jìn)行測(cè)試以確保
    2024-09-25
  • 如何通過(guò)HTML/CSS 實(shí)現(xiàn)各類(lèi)進(jìn)度條的功能

    本文詳細(xì)介紹了如何利用HTML和CSS實(shí)現(xiàn)多種風(fēng)格的進(jìn)度條,包括基礎(chǔ)的水平進(jìn)度條、環(huán)形進(jìn)度條以及球形進(jìn)度條等,還探討了如何通過(guò)動(dòng)畫(huà)增強(qiáng)視覺(jué)效果,內(nèi)容涵蓋了使用HTML原生標(biāo)簽
    2024-09-19
  • HTML中Canvas關(guān)鍵知識(shí)點(diǎn)總結(jié)

    Canvas 提供了一套強(qiáng)大的 2D 繪圖 API,適用于各種圖形繪制、圖像處理和動(dòng)畫(huà)制作,可以幫助你創(chuàng)建復(fù)雜且高效的網(wǎng)頁(yè)圖形應(yīng)用,這篇文章主要介紹了HTML中Canvas關(guān)鍵知識(shí)點(diǎn)總結(jié)
    2024-06-03
  • html table+css實(shí)現(xiàn)可編輯表格的示例代碼

    本文主要介紹了html table+css實(shí)現(xiàn)可編輯表格的示例代碼,主要使用HTML5的contenteditable屬性,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)
    2024-03-06
  • HTML中使用Flex布局實(shí)現(xiàn)雙行夾批效果

    本文主要介紹了HTML中使用Flex布局實(shí)現(xiàn)雙行夾批效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)
    2024-02-22
  • HTML+CSS實(shí)現(xiàn)炫酷登錄切換的項(xiàng)目實(shí)踐

    在網(wǎng)站開(kāi)發(fā)中,登錄頁(yè)面是必不可少的一部分,本文就來(lái)介紹一下HTML+CSS實(shí)現(xiàn)登錄切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需
    2024-02-02

最新評(píng)論