標籤:
通過Node模組,我們可以實現用戶端和伺服器端。這篇文章主要研究如何利用http和一些相關模組構建用戶端和伺服器端代碼。讀完本文,將能夠實現client向server發送資料,而server將資料原樣返回。
***********************************************************************************
伺服器端
首先介紹幾個方法。
var server = http.createServer(requestListener(request,response)),這個方法做了兩件事情:1. 建立伺服器;2.定義了收到請求後(請求到來時)伺服器如何處理,request指的是用戶端發過來的請求(輸入資料流),response指伺服器對用戶端的響應(輸出資料流)。
通過request, 我們可以得到請求的相關資訊。request.method代表請求的方法名(post / get / delete / put...), request.url代表請求的路徑名(不包含hostname和port),request.headers返回要求標頭部對象,而request.httpVersion是請求的http版本號碼。request.headers裡包含這十分豐富的資訊,例如:
{ host: ‘localhost:8000‘, //主機名稱和連接埠號碼 connection: ‘keep-alive‘, ‘cache-control‘: ‘max-age=0‘,//緩衝相關 accept: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘, //用戶端能夠接收的媒體類型(MIME)和優先順序,預設為1;表示優先接受text/html、application/ //xhtml+xml、image/webp類型(q=1),其次為application/xml類型(q=0.9),如果這些都沒有,那就隨便什麼類型了(q=0.8)‘user-agent‘: ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36‘,//用戶端類型,表示為chrome案頭板 ‘accept-encoding‘: ‘gzip, deflate, sdch‘,//用戶端支援的內容壓縮編碼格式 ‘accept-language‘: ‘en-US,en;q=0.8‘,//用戶端使用的語言及其優先順序 }
通過response,可以設定響應部分。response.writeHead(statusCode, statusText, options)方法可以設定響應狀態代碼和描述資訊,在options中可以添加自訂頭部或者給頭部賦值。writeHead和setHeader不同,前者是直接把回應標頭部發送出去了,而後者只是設定,所以一旦使用了writeHead,接下來想再次修改頭部就不可能了,比如在writeHead之後想要通過getHeader("name")或者removeHeader("name")是不可能成功的,因為已經把頭髮送出去了,如果真的想這麼做,就請用setHeader。用法如下:
response.writeHead(200, "quite good", {"name":"test", “content-type":"application/json"}); response.setHeader("name","test"); response.setHeader("age","16")
writeHead還有一個有用的用法,就是設定重新導向。response.writeHead(301, "moved forever", {location: "http://www.baidu.com"}), 如果Client Access Server的地址,就會被導航到baidu。
server.listen(port, hostname, queue, callback),port是伺服器監聽的連接埠號碼,hostname為伺服器主機名稱,預設為localhost,queue為隊列中等待的串連數上限(預設為511),callback為伺服器成功啟動(伺服器啟動時)的回呼函數。一般情況下,hostname和queue就採用預設值。
*****************************************************************************************
用戶端
用戶端要完成的是向伺服器發送請求。
Node中的http模組