1. 程式人生 > >Node伺服器處理GET、POST請求

Node伺服器處理GET、POST請求

GET資料儲存在"req.url"裡面;而POST資料儲存在body裡面、比較大,因此會將資料分段進行傳輸,服務端監聽data事件來接收每一段資料,同時服務端監聽end事件來得知資料傳輸是否結束。例如:

const http=require('http');
const url=require('url');
const querystring=require('querystring');

let server=http.createServer((req, res)=>{
  //GET
  let {pathname, query}=url.parse(req.url, true);

  //POST
  let str='';
  req.on('data', data=>{
    str+=data;
  });
  req.on('end', ()=>{
    let post=querystring.parse(str);

    console.log(pathname, query, post);
  });
});
server.listen(1337);

GET 與POST請求的區別

  • GET產生一個TCP資料包;POST產生兩個TCP資料包。(對於GET方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);而對於POST,瀏覽器先發送header,伺服器響應100 continue,瀏覽器再發送data,伺服器響應200 ok(返回資料)。)
  • GET在瀏覽器回退時是無害的,而POST會再次提交請求。
  • GET產生的URL地址可以被Bookmark,而POST不可以。
  • GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
  • GET請求只能進行url編碼,而POST支援多種編碼方式。
  • GET請求引數會被完整保留在瀏覽器歷史記錄裡,而POST中的引數不會被保留。
  • GET請求在URL中傳送的引數是有長度限制的,而POST麼有。
  • 對引數的資料型別,GET只接受ASCII字元,而POST沒有限制。
  • GET比POST更不安全,因為引數直接暴露在URL上,所以不能用來傳遞敏感資訊。
  • GET引數通過URL傳遞,POST放在Request body中。