---
# System prepended metadata

title: 網路基礎概論
tags: [網路, internet, NET101, note, Lidemy]

---

# 網路基礎概論
###### tags: `Lidemy` `note` `網路` `internet` `NET101`
[TOC]

----
## HTTP
>**超文本傳輸協定**（英語：HyperText Transfer Protocol，縮寫：HTTP）是一種用於分佈式、協作式和超媒體訊息系統的應用層協定。HTTP是全球資訊網的資料通信的基礎。
>
HTTP 就像是網際網路傳輸的說明書。

### HTTP request
```sequence
client->server: request 請求
server->client: response 回應
```
開發者工具 >> Network 中有列出所有進行的 request。
1. 瀏覽器傳 HTTP request 到 server
2. server 回傳一個 response

### DNS - Domain Name System
```sequence
client->DNS Server: github.com 的位置在哪
DNS Server->client: 13.250.177.223
```

comment line 的 `nslookup` 可以查 Domain Name 的 IP 位置在哪

發送 request 後，會將網址導到 `/private/etc/hosts[RO]` 檔案中設定的 IP 位置

----
>安裝 `npm install request` 即可不透過瀏覽器發送 request 及接收 response。

### HTTP Method
| request methods | 功能 |
| -- | -- |
| `GET` | `GET` 方法請求展示指定資源。使用 `GET` 的請求只應用於取得資料。 |
| `HEAD` | `HEAD` 方法請求與 `GET` 方法相同的回應，但它沒有回應主體（response body）。 |
| `POST` | `POST` 方法用於提交指定資源的實體，通常會改變伺服器的狀態或副作用（side effect）。 |
| `PUT` | `PUT` 方法會取代指定資源所酬載請求（request payload）的所有表現。 |
| `DELETE` | `DELETE` 方法會刪除指定資源。 |
| `CONNECT` | `CONNECT` 方法會和指定資源標明的伺服器之間，建立隧道（tunnel）。 |
| `OPTIONS` | `OPTIONS` 方法描述指定資源的溝通方法（communication option）。 |
| `TRACE` | `TRACE` 方法會與指定資源標明的伺服器之間，執行迴路返回測試（loop-back test）。 |
| `PATCH` | `PATCH` 方法套用指定資源的部份修改。 |

### HTTP 狀態碼
[維基百科自己查](https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81)

![](https://i.imgur.com/tIkXxhH.png)

## TCP / IP
### IP 地址
固定 IP：
1. 位置固定
2. 可直接連線
3. server 一定會有一個固定 IP
----
浮動 IP：
1. 每次連接的時候 IP 都不一樣
----
虛擬 IP：
```graphviz
digraph hierarchy {
    node[shape=record];
    rankdir="BT";
	subgraph level0{
	    server [label="{<f0> 數據機|<f1> 20.46.77.58 \n固定 or 浮動}" shape=Mrecord];
    }
    subgraph cluster_level1{
        label ="內網";
        com1 [label="{<f0> 電腦1|<f1> 192.168.0.20}" shape=Mrecord];
        com2 [label="{<f0> 電腦2|<f1> 192.168.0.23}" shape=Mrecord];
        com3 [label="{<f0> 電腦3|<f1> 192.168.0.31}" shape=Mrecord];
        {rank=same; com1, com2, com3}
    }
    com1->server [dir="forward"];
    com2->server [dir="forward"];
    com3->server [dir="forward"];
}
```

### Port 連接埠
指定傳送 request 到指定電腦上的哪個服務。

## API - Application Programming Interface
透過 API 可以讓雙方交換資料。

### API 與 Web API
Web API => HTTP API
透過 HTTP　協定的 API

## 資料格式

### XML - Extensible Markup Language
利用標籤來標明屬性的格式
```
<?xml version="1.0" encording="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Reminder body</body>
</note>
```


### JSON - JavaScript Object Notation
JavaScript 的物件所產生的資料格式，跟 JavaScript 相容性好，檔案大小也比 XML 小。
目前的資料格式都以 JSON 為主。
```
"note": {
    "to": "Tove",
    "from": "Jani",
    "heading": "Reminder",
    "body": "Reminder",
}
```

將 JSON 格式轉換成 JavaScript 的物件。

``` js
const jsonObject = JSON.parse(body) // JavaScript 的物件
```

將 JavaScript 的物件轉換成 JSON 格式。

``` js
const jsonString = JSON.stringify(jsonObject) // JSON 格式的字串
```

## REATful
他不是一種協定，是一種「風格」。