HTTP 是個什麼玩意兒?
超文本傳輸協定(英語:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分佈式、協作式和超媒體訊息系統的應用層協定 [1]。
HTTP 是全球資訊網的資料通信的基礎。 維基百科
白話 : 了解使用網際網路的應用層協定
令人討厭的 HTTP request 的一生
瀏覽器傳 HTTP request 到 server
Server 回傳一個 reponse
reponse 是回傳 html 一整段文字,再經過瀏覽器 render 顯現出來
charles
工具,可以看你的 request 和 reponse
白話例子 :
雜魚 -> 寫紙條 ->傳給千千
千千 -> 處理 ->傳紙條給雜魚
瀏覽器 -> 製造 request -> 傳給 server
server -> 處理 ->傳 response 回來
DNS( Domain Name System ) 我只是個計程車司機
作用 : 把 Domain Name 翻譯成 IP
可以下nslookup github.com
查 IP 位置
Domain 域名
註冊的網域名稱採先註冊先發給為原則,網域名稱一經申請,他人即無法再註冊,所以不會有域名重複的狀況。
檢查是否正版
request -> adobe server ->response
request -> ??? -> xxx(不會有 response 回來)
就算沒有瀏覽器一樣可以拿到 response
npm install request
到 node.js 叫 request 的 library 去看
2020.2.11 後不建議使用,不過還是能用就是了
把使用方法貼在index.js
打開來看
把想抓的網址放上去
可以先把console.log('body:', body);
註解掉(因為他會跑太多字出來)
執行 node index.js
印出來 statusCode : 200
確定請求成功,就可以只留console.log('body:', body);
執行 node index.js > github.html
(把印出來的內容存成github.html)
打開 github.html 發現一模一樣就 OK
Header 與 Body(不是網頁的那個)
request 和 response 都有分成 Header 與 Body
Header 放一些額外資訊 , Body 放一些主要內容
可以印出Header console.log(reponse.header)
Header 大概長這樣,時間、type等等
GET 與 POST
HTTP Method,在 HTTP 1.1 的版本中定義了八種 Method :
- OPTIONS
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
- CONNECT
淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別?
HTTP狀態碼
網路上梗圖
實作一個超簡易 HTTP Server
建立一個檔案
var http = require('http')
var server = http.createServer(handleRequest)
function handleRequest(req, res) {
console.log(req.url)
res.write('hello')
res.end()
}
server.listen(5000) // port
打開瀏覽器 輸入 localhost:5000
回去看一下印出什麼
第一個/
是因為我們把req.url
要印出來
第二個favicon.ico
是分頁左邊小icon
為了拿到這個 icon ,瀏覽器都會發一個 request 去要這個 icon(瀏覽器預設會發的 request )
也可以做一些其他事
var http = require('http')
var server = http.createServer(handleRequest)
function handleRequest(req, res) {
console.log(req.url)
if (req.url === '/'){
res.write('welcome')
res.end()
return
}
if (req.url === '/hello'){
res.write('hello')
res.end()
return
}
if (req.url === '/redirect'){
res.writeHead(302, {
'location': 'https://google.com'
})
res.end()
return
}
res.writeHead(404)
res.end()
}
server.listen(5000) // port
url 隨便亂打
就可以出現找不到 localhost 網頁
url 打 redirect
就可以臨時重新導向一個新網址