1. 程式人生 > >HTML中表單利用 post 提交與利用 get 提交時的區別

HTML中表單利用 post 提交與利用 get 提交時的區別

先利用HTML的<form>表單寫一個簡單的註冊頁面

HTML程式碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>註冊頁面</title>
</head>

<fieldset>
	<legend>註冊區域</legend>
    <form action="http://localhost:12345" method="post">
        <table border="1" bordercolor="#0099FF" width="70%" cellpadding="10" cellspacing="0">
            <tr>
                <th colspan="2">註冊頁面</th>
            </tr>
            <tr>
                <td>使用者名稱:</td>
                <td><input type="text" name="user" /></td>
            </tr>
            <tr>
                <td>密碼:</td>
                <td><input type="password" name="psw" /></td>
            </tr>
            <tr>
                <td>確認密碼:</td>
                <td><input type="password" name="repsw" /></td>
            </tr>
            <tr>
                <td>性別:</td>
                <td>
                    <input type="radio" name="sex" value="nan" />男
                    <input type="radio" name="sex" value="nv"  />女
                </td>
            </tr>
            <tr>
                <td>技術:</td>
                <td>
                    <input type="checkbox" name="tech" value="java" />JAVA
                    <input type="checkbox" name="tech" value="jsp" />JSP
                    <input type="checkbox" name="tech" value="html" />HTML
                </td>
            </tr>
            <tr>
                <td>國家:</td>
                <td>
                    <select name="country">
                        <option value="none">--選擇國家--</option>
                        <option value="cn">中國</option>
                        <option value="en">英國</option>
                        <option value="us">美國</option>
                    </select>
                </td>
            </tr>
            <tr>
                <th colspan="2">
                    <input type="submit" value="提交資料" />
                    <input type="reset" value="清除資料" />
                </th>
            </tr>
        </table>
        
    </form>
</fieldset>
<body>
</body>
</html>

頁面效果如下:


再寫一個伺服器端的程式碼

RegServer.java 程式碼如下:
class RegServer
{
	public static void main(String[] args) throws Exception{
		ServerSocket ss = new ServerSocket(12345);
		Socket s = ss.accept();
		InputStream in = s.getInputStream();
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		System.out.println(new String(buf,0,len));
		OutputStream out = s.getOutputStream();
		PrintWriter pw = new PrintWriter(out,true);
		pw.println("<h1>註冊成功</h1>");
		s.close();
		ss.close();
	}
}
輸入資料:

提交資料利用 post 時,伺服器端響應如下:


網站位址列顯示:http://localhost:12345/

使用者提交的資訊不會在位址列出現

提交資料利用 get 時,伺服器端響應如下:


網站位址列顯示:http://localhost:12345/?user=Tsang&psw=123456&repsw=123456&sex=nan&tech=java&tech=jsp&tech=html&country=us

使用者提交的資訊會在位址列出現

總結:在form提交的時候,如果不指定Method,則預設為get請求,Form中提交的資料將會附加在url之後,以?分開與url分開。字母數字字元原樣傳送,但空格轉換為“+“號,其它符號轉換為%XX,其中XX為該符號以16進製表示的ASCII(或ISOLatin-1)值。get請求請提交的資料放置在HTTP請求協議頭中,而post提交的資料則放在實體資料中;
get方式提交的資料最多隻能有1024位元組,而post則沒有此限制。 

通過get方法提交資料,可能會帶來安全性的問題。比如一個登陸頁面。當通過get方法提交資料時,使用者名稱和密碼將出現在URL上。如果:
1、 登陸頁面可以被瀏覽器快取;
2、 其他人可以訪問客戶的這臺機器。
那麼,別人即可以從瀏覽器的歷史記錄中,讀取到此客戶的賬號和密碼。所以,在某些情況下,get方法會帶來嚴重的安全性問題。 

在Form中,建議使用post方法。