国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【NodeJs篇】http模塊

這篇具有很好參考價(jià)值的文章主要介紹了【NodeJs篇】http模塊。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么是 http 模塊

回顧:什么是客戶端、什么是服務(wù)器?

在網(wǎng)絡(luò)節(jié)點(diǎn)中,負(fù)責(zé)消費(fèi)資源的電腦,叫做客戶端;負(fù)責(zé)對外提供網(wǎng)絡(luò)資源的電腦,叫做服務(wù)器。

http 模塊是 Node.js 官方提供的、用來創(chuàng)建 web 服務(wù)器的模塊。通過 http 模塊提供的 http.createServer() 方法,就能方便的把一臺(tái)普通的電腦,變成一臺(tái) Web 服務(wù)器,從而對外提供 Web 資源服務(wù)。

如果要希望使用 http 模塊創(chuàng)建 Web 服務(wù)器,則需要先導(dǎo)入它

【NodeJs篇】http模塊

進(jìn)一步理解 http 模塊的作用

服務(wù)器和普通電腦的區(qū)別在于,服務(wù)器上安裝了 web 服務(wù)器軟件,例如:IIS、Apache 等。通過安裝這些服務(wù)器軟件,就能把一臺(tái)普通的電腦變成一臺(tái) web 服務(wù)器。

在 Node.js 中,我們不需要使用 IIS、Apache 等這些第三方 web 服務(wù)器軟件。因?yàn)槲覀兛梢曰?Node.js 提供的

http 模塊,通過幾行簡單的代碼,就能輕松的手寫一個(gè)服務(wù)器軟件,從而對外提供 web 服務(wù)

服務(wù)器相關(guān)的概念

IP 地址

IP 地址就是互聯(lián)網(wǎng)上每臺(tái)計(jì)算機(jī)的唯一地址,因此 IP 地址具有唯一性。如果把“個(gè)人電腦”比作“一臺(tái)電話”,那么“IP地址”就相當(dāng)于“電話號碼”,只有在知道對方 IP 地址的前提下,才能與對應(yīng)的電腦之間進(jìn)行數(shù)據(jù)通信。

IP 地址的格式:通常用“點(diǎn)分十進(jìn)制”表示成(a.b.c.d)的形式,其中,a,b,c,d 都是 0~255 之間的十進(jìn)制整數(shù)。例如:用點(diǎn)分十進(jìn)表示的 IP地址(192.168.1.1)

注意:

① 互聯(lián)網(wǎng)中每臺(tái) Web 服務(wù)器,都有自己的 IP 地址,例如:大家可以在 Windows 的終端中運(yùn)行 ping www.baidu.com 命令,即可查看到百度服務(wù)器的 IP 地址。

② 在開發(fā)期間,自己的電腦既是一臺(tái)服務(wù)器,也是一個(gè)客戶端,為了方便測試,可以在自己的瀏覽器中輸入 127.0.0.1 這個(gè)IP 地址,就能把自己的電腦當(dāng)做一臺(tái)服務(wù)器進(jìn)行訪問了。

域名和域名服務(wù)器

盡管 IP 地址能夠唯一地標(biāo)記網(wǎng)絡(luò)上的計(jì)算機(jī),但I(xiàn)P地址是一長串?dāng)?shù)字,不直觀,而且不便于記憶,于是人們又發(fā)明了另一套字符型的地址方案,即所謂的域名(Domain Name)地址。

IP地址和域名是一一對應(yīng)的關(guān)系,這份對應(yīng)關(guān)系存放在一種叫做域名服務(wù)器(DNS,Domain name server)的電腦中。使用者只需通過好記的域名訪問對應(yīng)的服務(wù)器即可,對應(yīng)的轉(zhuǎn)換工作由域名服務(wù)器實(shí)現(xiàn)。因此,域名服務(wù)器就是提供 IP 地址和域名之間的轉(zhuǎn)換服務(wù)的服務(wù)器。

注意:

① 單純使用 IP 地址,互聯(lián)網(wǎng)中的電腦也能夠正常工作。但是有了域名的加持,能讓互聯(lián)網(wǎng)的世界變得更加方便。

② 在開發(fā)測試期間, 127.0.0.1 對應(yīng)的域名是 localhost,它們都代表我們自己的這臺(tái)電腦,在使用效果上沒有任何區(qū)別。

端口號

計(jì)算機(jī)中的端口號,就好像是現(xiàn)實(shí)生活中的門牌號一樣。通過門牌號,外賣小哥可以在整棟大樓眾多的房間中,準(zhǔn)確把外賣送到你的手中。

同樣的道理,在一臺(tái)電腦中,可以運(yùn)行成百上千個(gè) web 服務(wù)。每個(gè) web 服務(wù)都對應(yīng)一個(gè)唯一的端口號??蛻舳税l(fā)送過來的網(wǎng)絡(luò)請求,通過端口號,可以被準(zhǔn)確地交給對應(yīng)的 web 服務(wù)進(jìn)行處理。

【NodeJs篇】http模塊

注意:

① 每個(gè)端口號不能同時(shí)被多個(gè) web 服務(wù)占用。

② 在實(shí)際應(yīng)用中,URL 中的 80 端口可以被省略。

創(chuàng)建最基本的 web 服務(wù)器

1. 創(chuàng)建 web 服務(wù)器的基本步驟

① 導(dǎo)入 http 模塊

② 創(chuàng)建 web 服務(wù)器實(shí)例

③ 為服務(wù)器實(shí)例綁定 request 事件,監(jiān)聽客戶端的請求

④ 啟動(dòng)服務(wù)器

// 1. 導(dǎo)入 http 模塊
const http = require('http')
// 2. 創(chuàng)建 web 服務(wù)器實(shí)例
const server = http.createServer()
// 3. 為服務(wù)器實(shí)例綁定 request 事件,監(jiān)聽客戶端的請求
server.on('request', function (req, res) {
  console.log('Someone visit our web server.')
})
// 4. 啟動(dòng)服務(wù)器
server.listen(8080, function () {  
  console.log('server running at http://127.0.0.1:8080')
})

【NodeJs篇】http模塊

req 請求對象

只要服務(wù)器接收到了客戶端的請求,就會(huì)調(diào)用通過 server.on() 為服務(wù)器綁定的 request 事件處理函數(shù)。

如果想在事件處理函數(shù)中,訪問與客戶端相關(guān)的數(shù)據(jù)屬性,可以使用如下的方式:

res請求對象

在服務(wù)器的 request 事件處理函數(shù)中,如果想訪問與服務(wù)器相關(guān)的數(shù)據(jù)屬性,可以使用如下的方式

const http = require('http')
const server = http.createServer()
// req 是請求對象,包含了與客戶端相關(guān)的數(shù)據(jù)和屬性
server.on('request', (req, res) => {
  // req.url 是客戶端請求的 URL 地址
  const url = req.url
  // req.method 是客戶端請求的 method 類型
  const method = req.method
  const str = `Your request url is ${url}, and request method is ${method}`
  console.log(str)
  // 調(diào)用 res.end() 方法,向客戶端響應(yīng)一些內(nèi)容,并結(jié)束這次請求的處理過程
  res.end(str)
})
server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

【NodeJs篇】http模塊

【NodeJs篇】http模塊

解決中文亂碼問題

當(dāng)調(diào)用 res.end() 方法,向客戶端發(fā)送中文內(nèi)容的時(shí)候,會(huì)出現(xiàn)亂碼問題,此時(shí),需要手動(dòng)設(shè)置內(nèi)容的編碼格式:

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  // 定義一個(gè)字符串,包含中文的內(nèi)容
  const str = `您請求的 URL 地址是 ${req.url},請求的 method 類型為 ${req.method}`
  // 調(diào)用 res.setHeader() 方法,設(shè)置 Content-Type 響應(yīng)頭,解決中文亂碼的問題
  res.setHeader('Content-Type', 'text/html; charset=utf-8')
  // res.end() 將內(nèi)容響應(yīng)給客戶端
  res.end(str)
})

server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

【NodeJs篇】http模塊

【NodeJs篇】http模塊

根據(jù)不同的 url 響應(yīng)不同的 html 內(nèi)容

1. 核心實(shí)現(xiàn)步驟

① 獲取請求的 url 地址

② 設(shè)置默認(rèn)的響應(yīng)內(nèi)容為 404 Not found

③ 判斷用戶請求的是否為 / 或 /index.html 首頁

④ 判斷用戶請求的是否為 /about.html 關(guān)于頁面

⑤ 設(shè)置 Content-Type 響應(yīng)頭,防止中文亂碼

⑥ 使用 res.end() 把內(nèi)容響應(yīng)給客戶端

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  // 1. 獲取請求的 url 地址
  const url = req.url
  // 2. 設(shè)置默認(rèn)的響應(yīng)內(nèi)容為 404 Not found
  let content = '<h1>404 Not found!</h1>'
  // 3. 判斷用戶請求的是否為 / 或 /index.html 首頁
  // 4. 判斷用戶請求的是否為 /about.html 關(guān)于頁面
  if (url === '/' || url === '/index.html') {
    content = '<h1>首頁</h1>'
  } else if (url === '/about.html') {
    content = '<h1>關(guān)于頁面</h1>'
  }
  // 5. 設(shè)置 Content-Type 響應(yīng)頭,防止中文亂碼
  res.setHeader('Content-Type', 'text/html; charset=utf-8')
  // 6. 使用 res.end() 把內(nèi)容響應(yīng)給客戶端
  res.end(content)
})

server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

【NodeJs篇】http模塊

【NodeJs篇】http模塊

【NodeJs篇】http模塊

【NodeJs篇】http模塊

案例 - 實(shí)現(xiàn) clock 時(shí)鐘的 web 服務(wù)器

1. 核心思路

把文件的實(shí)際存放路徑,作為每個(gè)資源的請求 url 地址。

【NodeJs篇】http模塊

2. 實(shí)現(xiàn)步驟

① 導(dǎo)入需要的模塊

② 創(chuàng)建基本的 web 服務(wù)器

③ 將資源的請求 url 地址映射為文件的存放路徑

④ 讀取文件內(nèi)容并響應(yīng)給客戶端

⑤ 優(yōu)化資源的請求路徑

// 1.1 導(dǎo)入 http 模塊
const http = require('http')
// 1.2 導(dǎo)入 fs 模塊
const fs = require('fs')
// 1.3 導(dǎo)入 path 模塊
const path = require('path')

// 2.1 創(chuàng)建 web 服務(wù)器
const server = http.createServer()
// 2.2 監(jiān)聽 web 服務(wù)器的 request 事件
server.on('request', (req, res) => {
  // 3.1 獲取到客戶端請求的 URL 地址
  //     /clock/index.html
  //     /clock/index.css
  //     /clock/index.js
  const url = req.url
  // 3.2 把請求的 URL 地址映射為具體文件的存放路徑
  // const fpath = path.join(__dirname, url)
  // 5.1 預(yù)定義一個(gè)空白的文件存放路徑
  let fpath = ''
  if (url === '/') {
    fpath = path.join(__dirname, './clock/index.html')
  } else {
    //     /index.html
    //     /index.css
    //     /index.js
    fpath = path.join(__dirname, '/clock', url)
  }

  // 4.1 根據(jù)“映射”過來的文件路徑讀取文件的內(nèi)容
  fs.readFile(fpath, 'utf8', (err, dataStr) => {
    // 4.2 讀取失敗,向客戶端響應(yīng)固定的“錯(cuò)誤消息”
    if (err) return res.end('404 Not found.')
    // 4.3 讀取成功,將讀取成功的內(nèi)容,響應(yīng)給客戶端
    res.end(dataStr)
  })
})
// 2.3 啟動(dòng)服務(wù)器
server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

【NodeJs篇】http模塊文章來源地址http://www.zghlxwxcb.cn/news/detail-421437.html

到了這里,關(guān)于【NodeJs篇】http模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QT實(shí)現(xiàn)客戶端服務(wù)器HTTP(get請求、post請求)

    QT實(shí)現(xiàn)客戶端服務(wù)器HTTP(get請求、post請求)

    服務(wù)器代碼如下: QtHttpForS.h QtHttpForS.cpp main.cpp QtHttpForS.ui 客戶端代碼: QtHttpForC.h QtHttpForC.cpp mian.cpp QtHttpForC.ui 程序運(yùn)行效果: GET請求: POST請求: POST請求使用postman測試: 注意: 可以發(fā)現(xiàn),在使用postman進(jìn)行POST請求發(fā)送時(shí),服務(wù)器接收到的請求頭與QTSocket的POST請求的請求頭

    2023年04月22日
    瀏覽(23)
  • 基于Spring Boot2.0 & HTTP/2 實(shí)現(xiàn)服務(wù)器、客戶端

    基于Spring Boot2.0 & HTTP/2 實(shí)現(xiàn)服務(wù)器、客戶端

    HTTP協(xié)議由于其無狀態(tài)的特性以及超高的普及率,是當(dāng)下大部分網(wǎng)站選擇使用的應(yīng)用層協(xié)議。然而,HTTP/1.x的底層傳輸方式的幾個(gè)特性,已經(jīng)對應(yīng)用的整體性能產(chǎn)生了負(fù)面影響。特別是,HTTP/1.0在每次的TCP連接上只允許發(fā)送一次請求,在HTTP/1.1中增加了請求管線,但是這僅僅解決

    2023年04月09日
    瀏覽(83)
  • HTTP Header定制,客戶端使用Request,服務(wù)器端使用Response

    HTTP Header定制,客戶端使用Request,服務(wù)器端使用Response

    ?在服務(wù)器端通過request.getHeaders()是無效的,只能使用response.getHeaders()。 ?

    2024年02月16日
    瀏覽(29)
  • 為什么客戶端和服務(wù)器不支持SSL協(xié)議

    為什么客戶端和服務(wù)器不支持SSL協(xié)議?這是使用 SSL證書 的用戶經(jīng)常會(huì)遇到了一個(gè)問題,客戶端和服務(wù)器不支持SSL協(xié)議可能有以下幾個(gè)原因,大家可以作個(gè)參考。 版本不匹配:SSL協(xié)議有多個(gè)版本,包括過時(shí)的SSL 2.0、SSL 3.0和較新的TLS(Transport Layer Security)版本(如TLS 1.0、TLS

    2024年04月25日
    瀏覽(40)
  • cpp-httplib: 輕量級、高性能的C++ HTTP/HTTPS客戶端和服務(wù)器庫

    cpp-httplib 是一個(gè)輕量級且高效的 C++ HTTP/HTTPS 客戶端和服務(wù)器庫。它由 Hideaki Sone(yhirose)開發(fā),并在 MIT 許可下發(fā)布。該項(xiàng)目的主要目標(biāo)是提供一種簡單易用的方式,在 C++ 應(yīng)用程序中實(shí)現(xiàn) HTTP 和 HTTPS 功能。 項(xiàng)目倉庫地址:https://gitcode.com/yhirose/cpp-httplib cpp-httplib 可用于以下場

    2024年04月09日
    瀏覽(88)
  • Mojo:為Web應(yīng)用程序提供了完整的框架,包括路由、模板、插件、Websocket、HTTP客戶端、HTTP服務(wù)器、配置文件管理等功能

    ????????Mojo是一種高級的、動(dòng)態(tài)的Perl Web應(yīng)用程序框架,它可以用來開發(fā)Web應(yīng)用程序,定位于速度、簡單和可擴(kuò)展性。Mojo的設(shè)計(jì)理念是簡潔、靈活、易用和高效,它為Web應(yīng)用程序提供了完整的框架,包括路由、模板、插件、Websocket、HTTP客戶端、HTTP服務(wù)器、配置文件管理等

    2024年02月09日
    瀏覽(86)
  • 后端服務(wù)器的響應(yīng)為什么能夠精準(zhǔn)的返回給請求它的那個(gè)客戶端

    正向代理位于客戶端和目標(biāo)服務(wù)器之間,代表客戶端發(fā)送請求;–》代理客戶端 反向代理位于目標(biāo)服務(wù)器和客戶端之間,代表目標(biāo)服務(wù)器接收請求。–》代理服務(wù)端 當(dāng)客戶端發(fā)送請求到反向代理服務(wù)器時(shí),反向代理服務(wù)器會(huì)在轉(zhuǎn)發(fā)請求給后端服務(wù)器之前,記錄請求的源IP地址

    2024年02月12日
    瀏覽(24)
  • 學(xué)習(xí)NodeJs之【如何獲取客戶端真實(shí)IP】

    學(xué)習(xí)NodeJs之【如何獲取客戶端真實(shí)IP】

    ????????產(chǎn)品想要增加一個(gè)操作日志的模塊,重點(diǎn)記錄增刪改的操作ip。 ????????這塊業(yè)務(wù)其實(shí)需要按【是否代理】來分邏輯。首次開發(fā)時(shí),并未考慮? 測試生產(chǎn)環(huán)境有統(tǒng)一代理? ,導(dǎo)致傳統(tǒng)的獲取ip方式取到了容器網(wǎng)關(guān)ip?!@然這樣是無法滿足產(chǎn)品想要區(qū)分操作

    2024年02月03日
    瀏覽(24)
  • http客戶端Fegin

    http客戶端Fegin

    代碼可讀性差,編程體驗(yàn)不統(tǒng)一 參數(shù)復(fù)雜URL難以維護(hù) Feign是聲明式的http客戶端(只需要將發(fā)http請求的信息寫出即可) ?主要基于SpringMvc的注解來聲明遠(yuǎn)程調(diào)用的信息: ?步驟: 1.引入依賴 2.添加EnableFeignClients注解 3.編寫FeignClient接口 4.使用FeigClient中定義的方法代替RestTempl

    2024年02月09日
    瀏覽(16)
  • netty構(gòu)建udp服務(wù)器以及發(fā)送報(bào)文到客戶端客戶端詳細(xì)案例

    netty構(gòu)建udp服務(wù)器以及發(fā)送報(bào)文到客戶端客戶端詳細(xì)案例

    目錄 一、基于netty創(chuàng)建udp服務(wù)端以及對應(yīng)通道設(shè)置關(guān)鍵 二、發(fā)送數(shù)據(jù) 三、netty中的ChannelOption常用參數(shù)說明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、ChannelOption.SO_LINGER 6、ChannelOption.TCP_NODELAY 以上代碼中

    2024年04月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包