[HTTP]POST與GET

Posted on Updated on

按:日常生活與社會過於疏離,以致實在很難提起勁寫那些有內涵的文章。但不希望就此封筆。近來身邊最密切的事就是Programming,就試著轉為寫Programing的學習筆記,分享教授之餘亦可鞏固編程概念。起初時盡量寫一些比較大眾化的題目,跟大家日常的電腦使用習慣拉上關系,就好像接下來要介紹的這個網頁傳遞資料的方法。

範疇:HTTP、Web App
程度:低
簡述:介紹HTTP協定中POST和GET資料傳遞模式及分別

一個動態網頁能在同一頁面上根據不同的情況作出不同的反應,從而做到實時與用家互動,亦方便開發人員更簡便地設計網頁,不用設計大量頁面來提供適當的內容,亦能使一個頁面提供靈活多變的資訊和處理辦法。在用家(Client)和網站(Server)互動的過程中,往往都需要互相交換資料,而在傳送資料的時候一般都會涉及兩種傳送方法(Method):GET和POST。

GET

當大家上Youtube的時候,應該會留意到影片網址後面是watch,然後就有一個問號再加一串代碼,例如這個:http://youtube.com/watch?v=Yv5YRLvGmzA&t=3s。當中「?v=Yv5YRLvGmzA&t=10s」這一段其實就用了GET Method來向Server傳送了一段訊息。

雖然GET和POST都是向Server傳送資料的方法,但GET多了一重意思,就是顧名思意要向Server索取自己想要的資料,所以我們用GET Method時都會期望Server會根據我提供的資料而給予回應。就以上面的網址為例,我們希望它能傳回一個網頁,當中是要包含了我們想要的影片:「Arduino 行人過路燈 」,而且影片是要在第10秒開始的,這些請求其實都隱藏在網址中。

GET Method最大的特色就是所有要傳送的資料全部都顯示在網址(URL)上,一個網址只要出現「?」,後面所有的內容都是你要傳送的資料。在上面的網址中,我們傳送了兩個參數(parameter),一個是影片代碼v,數值(value)是"Yv5YRLvGmzA“;另一個是開始時間t,數值是"10s“。兩個變數用「&」來分隔識辨。當Youtube Server收到這兩個變數後,就會作出相應的程序,將"Yv5YRLvGmzA“所表的影片嵌入頁面中的播放器,然後將開始時間調校至第10秒,最後將調校的頁面內容傳送回用家的瀏覽器上顯示。

POST

大家登入Facebook或其他網站,按下登入按扭的一刻,資料就用POST Method傳送到Server了。但是你的帳號和密碼資料藏了在什麼地方呢?其他它藏到了message-body內,是無法循一般途徑看到的。

POST的原意是向Server提交資料,例如表格(form)讓Server處理,並沒有意思要求Server回傳特定的內容,但當然Server應作出相應的反應,例如給予你瀏覽自己Facebook的權限。

現今POST的用途廣泛,除了因為POST的資料不會顯示在URL之餘,它支援傳送ASCII字符以外的資料和其他多變的封裝方式也是主因之一。例如表格中包含檔案時,可以將檔案以Multi-part封裝,然後以POST方式傳回Server。

GET與POST的比較

GET POST
重用性 可Bookmark、Cache和儲存在History中(因為它只是個URL) 不可Bookmark、Cache或儲存在History中
編碼類型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data
數據長度 受URL最大長度限制(2048bytes) 無限
數據類型 只支援ASCII 沒有限制,甚至支援Binary資料
可見性 任何人都可從URL見到 不能從URL看見,一般用家無從看見。

因為可見性的源故,POST Method是稍為安全的,而且限制較少,所以在傳送資料時一般都推薦使用POST。

不過同樣因為可見性的源故,GET Method可以方便用家使用,就像瀏覽Youtube時可以透過在網址上加入不同參數來得到想要的資料和功能。網頁設計師可按情況使用GET,但如果涉及諸如密碼的敏感資料,就絕對不要用使GET!

廣告

2 thoughts on “[HTTP]POST與GET

    2014網誌年結:諷刺的一年 « 青鳥脈博 said:
    31/12/2014 at 下午 11:17

    […] [HTTP]POST與GET […]

    PHP – H said:
    07/06/2016 at 下午 5:25

    […] [HTTP]POST與GET […]

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s