http模塊
API
http.createServer(callback(request, response)) || new http.Server()
功能: 使用createServer返回一個(gè)http.Server對(duì)象痢士,這個(gè)對(duì)象就是一個(gè)服務(wù)器
callback參數(shù) : 每次有請(qǐng)求時(shí)都會(huì)觸發(fā)
request與response屬于IncomingMessage 的梳理: 它可用于訪問(wèn)響應(yīng)狀態(tài)摘盆、消息頭条辟、以及數(shù)據(jù)
on('data', callback(chunk))
on('end', callback(err))
request
request.headers
請(qǐng)求或響應(yīng)的消息頭對(duì)象
request.httpVersion
在服務(wù)器請(qǐng)求的情況下晤锹,表示客戶端發(fā)送的 HTTP 版本凤薛。 在客戶端響應(yīng)的情況下收厨,表示連接到的服務(wù)器的 HTTP 版本
request.method
請(qǐng)求方法為字符串
request.url
請(qǐng)求的 URL 字符串缴啡。 它僅包含實(shí)際 HTTP 請(qǐng)求中存在的 URL
response
response.write(chunk[, encoding][, callback])
第一次調(diào)用 response.write() 時(shí),將緩沖的響應(yīng)頭信息和主體的第一個(gè)數(shù)據(jù)塊發(fā)送給客戶端
第二次調(diào)用 response.write() 時(shí),Node.js 假定數(shù)據(jù)將被流式傳輸骂际,并分別發(fā)送新數(shù)據(jù)
response.writeHead(statusCode[, statusMessage][, headers]) :向請(qǐng)求發(fā)送響應(yīng)頭
statusCode:狀態(tài)碼 404 200
headers:設(shè)置響應(yīng)頭對(duì)象
{Content-Type: 'text/plain'}
response.setHeader(name, value)
為隱式響應(yīng)頭設(shè)置單個(gè)響應(yīng)頭的值疗琉。 如果此響應(yīng)頭已存在于待發(fā)送的響應(yīng)頭中,則其值將被替換
response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
response.end([data][, encoding][, callback])
此方法向服務(wù)器發(fā)出信號(hào)歉铝,表明已發(fā)送所有響應(yīng)頭和主體盈简,該服務(wù)器應(yīng)該視為此消息已完成。 必須在每個(gè)響應(yīng)上調(diào)用此 response.end() 方法
如果指定了 data太示,則相當(dāng)于調(diào)用 response.write(data, encoding) 之后再調(diào)用 response.end(callback)
http.request(options,callback)
- 功能:作為客戶端向其他http服務(wù)發(fā)送請(qǐng)求
- 返回一個(gè)request對(duì)象
request.end() ; 結(jié)束請(qǐng)求
request.write(data); 請(qǐng)求的數(shù)據(jù)
request.on('error', callback(err)) ; 監(jiān)聽(tīng)返回的錯(cuò)誤
options參數(shù)
options
* host: localhost,
* port: 默認(rèn)80,
* path: 請(qǐng)求的路徑
* method: 默認(rèn)GET
* headers : 請(qǐng)求頭的內(nèi)容
Content-Type : application/x-www-form-urlencoded
application/json
callback(response)
* responsed對(duì)象
* res.setEncoding('utf-8') 設(shè)置編碼個(gè)數(shù)
* res.on('data', callback(chunk)) 接收數(shù)據(jù)
* res.on('end', callback(err)) 響應(yīng)結(jié)束
http.get(options, callback)
簡(jiǎn)版的http.request
與之區(qū)別
只支持get
不需要手動(dòng)的調(diào)用request.end()
理論
http模塊 (http://nodejs.cn/api/http.html#http_class_http_server)
是啥: 是nodejs中的服務(wù)端或者客戶端柠贤,
服務(wù)端:為客戶端提供服務(wù)的,例如提供數(shù)據(jù)資源或者保存客戶端的數(shù)據(jù)类缤,運(yùn)行服務(wù)端的終端(或者電腦)稱為服務(wù)器
常規(guī)服務(wù)器: Apche Nginx
客戶端: 為用戶提供本地服務(wù)的程序臼勉,接收來(lái)自服務(wù)端的數(shù)據(jù)的軟件應(yīng)用
終端:顯示設(shè)備或者操作設(shè)備
能干啥:能讓我們nodejs中搭建一套服務(wù)器,或者客戶端
http協(xié)議: 超文本傳輸協(xié)議
超文本傳輸協(xié)議餐弱,是一個(gè)基于請(qǐng)求與響應(yīng)宴霸,無(wú)狀態(tài)的,應(yīng)用層的協(xié)議膏蚓,称靶唬基于TCP/IP協(xié)議傳輸數(shù)據(jù),互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)驮瞧。設(shè)計(jì)HTTP的初衷是為了提供一種發(fā)布和接收HTML頁(yè)面的方法恩闻。
https協(xié)議:
HTTPS是身披SSL外殼的HTTP,HTTPS是一種計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議剧董,經(jīng)由HTTP進(jìn)行通信幢尚,利用SSL/TLS建立通信通道,加密數(shù)據(jù)包翅楼,HTTPS使用的主要目的是提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證尉剩,同時(shí)保護(hù)交換數(shù)據(jù)的隱私與完整性。
chunk
設(shè)置響應(yīng)頭
Transfer-Encoding: chunked
是啥:
分塊傳輸編碼(Chunked transfer encoding)是超文本傳輸協(xié)議(HTTP)中的一種數(shù)據(jù)傳輸機(jī)制
允許HTTP由網(wǎng)頁(yè)服務(wù)器發(fā)送給客戶端應(yīng)用( 通常是網(wǎng)頁(yè)瀏覽器)的數(shù)據(jù)可以分成多個(gè)部分毅臊。 分塊傳輸編碼只在HTTP協(xié)議1.1版本(HTTP/1.1)中提供
好處
HTTP分塊傳輸編碼允許服務(wù)器為動(dòng)態(tài)生成的內(nèi)容維持HTTP持久鏈接
在壓縮的情形中理茎,分塊編碼有利于一邊進(jìn)行壓縮一邊發(fā)送數(shù)據(jù),而不是先完成壓縮過(guò)程以得知壓縮后數(shù)據(jù)的大小
TCP 傳輸控制協(xié)議
是一種面向連接的管嬉、端對(duì)端的皂林、可靠的、基于IP的傳輸層協(xié)議
三次握手
四次揮手
標(biāo)識(shí)符
URG:緊急指針(urgent pointer)有效蚯撩。
ACK:確認(rèn)序號(hào)有效础倍。
PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層。
RST:重置連接胎挎。
SYN:發(fā)起一個(gè)新連接沟启。
FIN:釋放一個(gè)連接忆家。
IP
IP協(xié)議位于網(wǎng)絡(luò)層,IP協(xié)議規(guī)定了數(shù)據(jù)傳輸時(shí)的基本單元(數(shù)據(jù)包)和格式德迹,IP協(xié)議還定義了數(shù)據(jù)包的遞交辦法和路由選擇
TPC/IP協(xié)議是傳輸層協(xié)議芽卿,關(guān)注數(shù)據(jù)網(wǎng)絡(luò)中傳輸方式和傳輸目的地,而HTTP是應(yīng)用層協(xié)議胳搞,關(guān)注如何封裝數(shù)據(jù)