After receiving a Ph.D. in computer science from MIT in 1979, Jeff joined IBM's Thomas J. Watson Research Center. During his tenure at IBM, he held a wide variety of technical and management positions, including vice president, Systems and Software Research, corporate vice president of technology, and general manager of IBM's SecureWay business unit, where he was responsible for IBM's security, directory, and networking software business.
Jeff then served as president of Bell Labs Research and Advanced Technologies, where he established new facilities in Ireland and India, and served as chairman of the board of the New Jersey Nanotechnology Consortium.
Most recently, Jeff served as the Executive Vice President and Chief Technology Officer for Novell. He was responsible for Novell's technology direction, as well as leading Novell's product business units.
Jeff was appointed by President Bill Clinton to serve on the Advisory Committee for the Presidential Commission for Critical Infrastructure Protection. He has also chaired the Chief Technology Officer group of the Computer Systems Policy Project, and has served on the National Research Council's Computer Science and Telecommunications Board. He is a Fellow of ACM and the IEEE.
Dr. Jaffe holds a BS in Mathematics and an MS in Electrical Engineering and Computer Science in addition to his Doctorate from the Massachusetts Institute of Technology.
在HTML中,form元素用
W3C的HTML 4.01 specification說,form元素的method屬性用來指定發送form的HTTP方法。 這可以簡單地理解為,get僅僅是拼接一個URI,然后直接向服務器請求數據(需要提交給服務器的數據集包含在URI中)。比如: 這個form在提交的時候,會產生這樣能夠一個get請求:FormGet.aspx?ProductID=1。 而post會把form的數據集,即ProductID=1這個鍵值對包裝在請求的body中,發送給服務器,然后向服務器請求數據。對于: 這樣一個form在提交時,我們將看到一個干凈的URI:FormPost.aspx。因為數據不是拼接在URI中。 如果用get提交一個驗證用戶名和密碼的form,一般認為是不安全的。因為用戶名和密碼將出現在URL上,進而出現在瀏覽器的歷史記錄中。顯然,在對安全性有要求的情況下,應該使用post。 HTML 4.01 specification指出,get只能向服務器發送ASCII字符,而post則可以發送整個ISO10646中的字符(如果同時指定
注意get和post對應的enctype屬性有區別。enctype有兩個值,默認值為application/x-www-form-urlencoded,而另一個值multipart/form-data只能用于post。 HTTP specification并沒有對URL長度進行限制,但是IE將請求的URL長度限制為2083個字符,從而限制了get提交的數據長度。測試表明如果URL超出這個限制,提交form時IE不會有任何響應。其它瀏覽器則沒有URL的長度限制,因此其它瀏覽器能通過get提交的數據長度僅受限于服務器的設置。 而對于post,因為提交的數據不在url中,所以通??梢院唵蔚卣J為數據長度限制僅受限于服務器的設置。 由于一個get得到的結果直接對應到一個URI,所以get的結果頁面有可能被瀏覽器緩存。而post一般則不能,參考5。 出于和上面相同的原因,我們可以用一個URI引用一個get的結果頁面,而post的結果則不能,所以必然不能被搜索引擎搜到。 在服務端的ASP.NET程序中,對于get,我們用Request.QueryString[control-name]來取得對應的=current-value;對于post,我們用Request.Form[control-name]。 我們也可以籠統地使用Request[control-name]。但這樣做的效率不如前者。我們可以用下面的程序比較Request.QueryString和Request的效率: 同樣的辦法我們可以比較Request.Form和Request。 最后得到的結果(Request.QueryString[control-name] / Request[control-name]和Request.Form[control-name] / Request[control-name])大多數時候是小于1的。因此,我們因該盡量用Request.QueryString或Request.Form來代替Request。 W3C的官方建議是:當且僅當form是冪等(idempotent)的時候,使用get。冪等是一個數學上的術語,其定義是:對于一個函數f : D -> D,如果D中的所有x滿足f (f x) = f x,那么這個函數是冪等的。HTTP specification(比如RFC 2616)中,將冪等解釋為:多次相同請求產生的副作用,和一次請求的副作用相同。 打個比方,如果你提交一個form會從Google上查詢一個關鍵詞,那么我們可以認為這個form是冪等的,因為1次提交和10次提交的副作用是差不多的(10次查詢可能會多消耗一些電能);如果你提交一個form是訂購一個終極大黃蜂(Utimate bumblebee),那么這就不是冪等的:要是你不小心多提交了1次form的話,你可能會被老婆亂罵,你不小心又提交了10次的話,你可能就破產了——一次提交和多次提交的副作用明顯不同,所以這不是冪等的。 所以,一般來說,如果提交這個請求純粹只是從服務端獲取數據而不進行其他操作,并且多次提交不會有明顯的副作用,應該使用get。比如: 如果提交這個請求會產生其它操作和影響,就應該使用post。比如: 另一個要考慮的因素是安全性。見2.1。1. get和post的定義
<input type="text" name="ProductID" value="1" />
<input type="submit" value="Get" />
</form>
<input type="text" name="ProductID" value="1" />
<input type="submit" value="Get" />
</form>
2. get和post的區別
2.1 安全性
2.2 編碼
2.3 提交的數據的長度
2.4 緩存
2.5 引用和SEO
3. 服務端的處理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_PreInit(object sender, EventArgs e)
{
if(Request["InputString"] != null)
{
int count = 1000000;
DateTime start;
DateTime end;
string value = "";
start = DateTime.Now;
for(int i = 0;i < count;i++)
{
value = Request.QueryString["InputString"];
}
end = DateTime.Now;
double requestGet = (end - start).TotalSeconds;
start = DateTime.Now;
for(int i = 0;i < count;i++)
{
value = Request["InputString"];
}
end = DateTime.Now;
double request = (end - start).TotalSeconds;
compare.InnerHtml = requestGet.ToString() + " / " + request.ToString() + " = " + (requestGet / request).ToString();
get.InnerHtml = value;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Request.QueryString / Request</title>
</head>
<body>
<form method="get" action="FormGet.aspx">
<div>
<input type="text" name="InputString" /><input type="submit" value="Post" /><br />
Get: <span runat="server" id="get"></span><br />
Request.QueryString / Request: <span runat="server" id="compare"></span>
</div>
</form>
</body>
</html>
4. 正確地使用get和post
5. 瀏覽器差異
并且,在后退的過程中有可能出現“Page has Expired”(通常是向自己post,然后后退時):
微軟的技術支持人員號稱“this is not a bug or problem specified to the ASP.NET but a security feature of the IE Browser”,并且說“You can also inform your users of this”,實在是荒唐。另外,IE 7:和IE 6相同;
6. 參考
昨天QQ的馬化騰到我們這邊來聊天,談到了創始人重視產品在企業成功的重要性。即使在QQ已經這么成功,市值近百億美金的今天,他還花很多時間在產品上。聽上去很簡單也很自然,但是我看到很多創始人做不到。
創業者要管的太多了,產品,市場,銷售,財務,技術,找人,炒人,公關。不可能每件事情都事必躬親,一定有些需要交給手下領頭。哪兩件最重要?我覺得是找人和產品。別的事都可能找到好的人代勞,但產品和找人不行。
找到一個好的人太關鍵了。我從前寫了很多:海龜還是土鱉?,招不到稱心的人怎么辦?,招怎么樣的人,今天就不多說了。只加一句:找什么樣的人,決定公司的文化,所以創業者是一定要自己做的。
找到好的人,可以一手代包市場,銷售,財務,技術,公關(找到好的人,能放心的把我的一個部門讓他管,知道他會管的比我更好時,感覺太好了!),但產品是一個公司的靈魂。它需要融會貫通:從市場這邊了解目標用戶是誰和他們的需求,平衡銷售那邊經常和市場部不同的意見,與技術討論什么能做,什么不能做。其中有很多取舍,很多推動,不是創始人CEO,很難做好這個工作。另外,創始人應該是最了解用戶的需求的人,因為他創業的激情就來自于為用戶解決一個問題,增添一個價值。
做易趣時我產品放權太多。雖然我們那時的產品部很不錯,但沒有創始人每天的介入,他們的任務是不可能完成的。我給我們那時候2002年的產品打75分。2003年走了后,平臺遷移到eBay后,分數就慘不忍睹了。網站改個字需要九個禮拜,改個功能需要在總部排隊九個月。(這里的故事很長了,產品只是一部分,文化的變化更致命。以后有空和易趣那些老員工們應該一起寫本書。)
放眼世界上翹楚的產品,AMAZON,APPLE,NINTENDO,他們的CEO或創始人都是注重產品,不放權的瘋子。
上一篇創業,管哪個事情最重要?引起了一些有趣的爭議,關于產品還是市場重要。我覺得這個問題對創業者很關鍵,所以再來寫一篇。ha,這個月寫了兩篇,為前幾個月補過。
首先,問題不是說企業里哪個部門重要。一個企業的成功,是很多因素的乘法。乘法和加法不同:后者如有一個因素是零,對整體不一定有大影響,但前者里如果有個因素是零,結果是零 - 產品,市場做得再好,財務出問題,公司照樣死。當企業成功是乘法時,討論哪個部門重要,沒什么意義。比較有意義的問題是:創業者哪個比較可以放權,哪個需要自己抓。(謝謝keso幫我澄清too。)這個問題太重要了,因為我堅信一個初創的企業,最重要的資源是創始人的時間和精力。我們現在談的,是這個資源的分配問題。
第二,做產品,從來不是(或不應該是)空想的。我覺得產品部是公司最難的工作。它需要綜合權衡各個部門的要求。
a)市場:我們的現有用戶是這么樣的人?他們的需求是什么?我們的潛在用戶是誰?他們的需求是什么?很多時候,人(尤其是經理人)會太注重現有顧客,忽視潛在客戶。人也會太注重用戶能表達的需求(市場調查拿得到得),忽略用戶不知道怎么表達的需求(需要靠創業的自覺來發掘的)。
b)銷售:什么樣的產品賣得掉,容易銷售?在有些公司,市場和銷售的目標用戶是一樣的。在有些公司,用戶(主要用產品的人)和顧客(付錢的人)是不一樣的。如何滿足和權衡他們不同的需求?在易趣那時,用戶是買家,顧客是賣家,他們的需求往往不同,甚至相反。
c)技術:那些產品容易做,那些難做?如何取舍時間vs功能?技術部會經常說:市場部要的功能不可能做,或需要太久。有時技術部有個好點子,能做個眩的新功能,市場部不要。相信誰的判斷?
d)客服:用戶很多的反饋和問題,需要多重視?什么是1%的不重要的用戶提出來的,什么是我們的核心用戶的要求,或是潛在的核心用戶的問題(解決了這個問題,他就成了核心用戶)?
還有很多例子可舉。我的感覺是產品最最需要一個創始者以一個公司總體和長遠的發展為目標,權衡各個部門的利益和偏見(甚至慣性或惰性),最終以創始者的直覺做決定。
“從昨天開始我們的用戶就看不到我們站點上的Logo了。”
“他試過重啟瀏覽器么?”
“是的。”
“他試過重啟電腦么?”
“是的。”
“他清空過瀏覽器Cache么?”
“是的。”
“他的瀏覽器版本是IE6么?”
“是的。”
“他確信是真的看不到Logo了么?”
“是的。”
“他是在電腦顯示器屏幕上看我們的站點么?”
“什么?”
“比如說,它可能是打印出來看不到?”
“不。他是在顯示器上看的。”
“除了站點Logo之外,他是不是其他的圖片都看不到?”
“什么?哦。我再問問他。”
也許,聰明的程序員遇到這個問題的時候,甚至可能去找個圖形算法分析下這個圖片是否有問題!
最后,以http://blogoscoped.com/archive/2005-08-24-n14.html中的故事結尾,,以博列為看官一笑^_^
It’s like the story of the centipede(蜈蚣). The centipede was very good at walking with its hundred legs. It never spent a thought on just how it could walk. Until one day, when a big black bug(臭蟲) asked the centipede “How can you manage to walk with all those feet? Don’t you find it hard to coordinate their rhythm?” The black bug already left, when the centipede was still sitting down, pondering how it could walk, wondering, and (for the first time in his life) even worrying a little bit. From that day on, the centipede couldn’t walk anymore.
So you better not think too much if you want to achieve something. And of course this is only half the truth, too...