Skip to main content

網路基礎

HTTP

一種協議(網路資料通訊的基礎),有統一的規範大家才知道該如何在網路上交換資料。另外https中的s代表secure的意思。

(待補充)

DNS Server

Domain Name System

照理來說,傳資料要寫IP位置(就像現實生活中的地址),但這樣一串數字很難記住,因此我們可以傳domain name(例如google.com ) 給 DNS Server,它再回傳IP位置給我們。就像你跟計程車司機說要去101,而不用直接背出完整的地址。

*terminal中可用$nslookup google.com來查詢

請求方法(request methods)

在實際開發中,可能因各種原因,而失去原來定義的用途。根據HTTP 請求方法 - HTTP | MDN (mozilla.org) 目前有以下幾種:

Method(*表示較常使用)description
*GET請求展示特定資源,只用來取得資料。
*POST提交指定資源,通常會改變伺服器狀態或副作用(side effect)。
*PUT會取代指定資源。
PATCH修改部分指定資源。
*DELETE刪除指定資源。
HEAD與GET相同,但只response head。
CONNECT會和指定資源標明的伺服器之間,建立隧道(tunnel)。
OPTIONS描述指定資源的溝通方法(communication option)。
TRACE與指定資源標明的伺服器之間,執行迴路返回測試(loop-back test)。
status code:
代碼開頭簡略意義
1**Hold on
2**Here you go
3**Go away
4**You fucked up
5**I fucked up

實作一個超簡易 HTTP Client / Server

client 端

先安裝這個指令

$npm install request

from : request - npm (npmjs.com)

在js檔中輸入以下程式碼

const request = require('request');
request('http://www.google.com', function (error, response, body) {
console.error('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
// console.log(response.headers)
});

server端

在node.js裡有個內建的library 叫 http

var http = require('http')

var server = http.createServer(handleRequest)
function handleRequest(req,res)
{
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,//redirect
{
'Location':'https://google.com'
})
res.end()
return
}
}

server.listen(5000)//port

OSI 和TCP/IP

OSI 和 TCP/IP是網路分層模型,前者共有7層;後者則是4層。每一層會有相關的數據處理方式定義,例如各種協定等等。

補充內容:网络分层TCP/IP 与HTTP - 掘金 (juejin.cn)

API

Application Programming Interface

透過API可以讓雙方交換資料。

SDK : Software Development Kit

類似包裝好的API,取得後可以用不同的方法呼叫已被包入的資料。

練習串接API的網址:Reqres - A hosted REST-API ready to respond to your AJAX requests

搭配request文件可以實作其他method:request - npm (npmjs.com)

資料格式的選擇

XML : eXtensible Markup Language

JSON : JavaScript Object Notation

  • 將JSON轉換為JS物件 : JSON.parse(<.json file>)
  • 將JS物件轉換為JSON:JSON.stringify(obj)
const request = require('request');
const process = require('process')

request('https://reqres.in/api/users/2', function (error, response, body)
{
const json = JSON.parse(body)//將JSON轉換為JS物件
console.log(json.data.first_name);
});

const obj =
{
name : 'yehs',
job : 'none'
}
console.log(JSON.stringify(obj))//將JS物件轉換為JSON

交換資料方式

HTTP API

SOAP 和其他

SOAP:Simple Object Access Protocol 是一種標準化的通訊規範,建立在XML格式之上。

測試工具 The World's Most Popular API Testing Tool | SoapUI

soap - npm (npmjs.com)

*RESTful

不是一種協定,是一種風格(建議)。因為HTTP的method並不是硬性規定一定要用哪個。e.g.DELETE,其他像post也能達到一樣的功能,但是這樣不同工程師作業時可能會造成混淆,所以盡量照"正規格式"來使用,稱為符合RESTful風格。

除了HTTP之外當然也能夠自定義資料交換格式

好用工具及指令

  • curl

    #等於用get方式連到google
    curl https://www.google.com

    #只要header
    curl -I https://www.google.com

    也可以達到上面做的post

    curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"name":"xyz","job":"xyz"}' \
    https://reqres.in/api/users
  • nslookup 解析IP位置

  • ping 測試可不可以連到該網址

  • telnet測試特定的port有沒有開。連到之後可以繼續輸入來拿到資料。

    Telnet是一種應用層協定,使用於網際網路區域網中,使用虛擬終端機的形式,提供雙向、以文字字串為主的命令列介面互動功能。屬於TCP/IP協定族的其中之一,是網際網路遠端登錄服務的標準協定和主要方式,常用於伺服器的遠端控制,可供使用者在本地主機執行遠端主機上的工作。