node.js 实战——(Http 知识点学习)

HTTP

又称为超文本传输协议

是一种基于TCP/IP的应用层通信协议;这个协议详细规定了 浏览器 和万维网 服务器 之间互相通信的规则。协议中主要规定了两个方面的内容:

  • 客户端:用来向服务器发送数据,可以被称之为请求报文
  • 服务端:向客户端返回数据,可以被称之为响应报文

请求报文

请求报文 请求行 请求头 空行 请求体

请求头

格式: 请求头名:值

请求头 说明
Host 主机名
Connection 连接的设置 keep-alive(保持连接);close(关闭连接)
User-Agent 用户代理,客户端字符串标识,服务器可以通过这个标识来识别这个请求来自
哪个客户端 ,一般在PC端和手机端的区分
Accept 设置浏览器接收的数据类型
Accept-Encoding 设置接收的压缩方式
Cookie Cookie值

请求体

请求体内容的格式是非常灵活的,

(可以是空)> GET请求,
(也可以是字符串,还可以是JSON)=> POST请求

响应报文

响应报文 响应行 响应头 空行 响应体

响应头

node 中使用Http

创建Http服务端

javascript 复制代码
//1. 导入 http 模块
const http = require('http');
//2. 创建服务对象 create 创建 server 服务
// request 意为请求. 是对请求报文的封装对象, 通过 request 对象可以获得请求报文的数据
// response 意为响应. 是对响应报文的封装对象, 通过 response 对象可以设置响应报文
const server = http.createServer((request, response) => {
response.end('Hello HTTP server');
});
//3. 监听端口, 启动服务
server.listen(3000, () => {
console.log('服务已经启动, 端口 3000 监听中...');
});

1、当服务启动后,更新代码必须重启服务才能生效;当然你也可以安装nodemon 来解决这个问题

2、如果响应内容中出现中文乱码,可以在响应头设置如下代码解决

response.setHeader('content-type','text/html;charset=utf-8');

获取请求行和请求头

方法 说明
request.method 获取请求方法
request.url 获取请求路径,只包含url中的路径与查询字符串
request.headers 获取请求头内容

获取请求体

javascript 复制代码
const http = require('http')

const server = http.createServer((req, res) => {
    let body="";
    
    req.on('data',(chunk) => {
        body += chunk;
    })
    
    req.on('end', () => {
        res.end('table');

    })
})

server.listen(9000, () => {
    console.log('Listening on port 9000,')
})

获取请求路径与查询字符串

引入url模块

javascript 复制代码
const http = require('http')
const url = require('url')
const server = http.createServer((req, res) => {

    let res =url.parse(req.url)
    //路径
    let path=res.pathname;
    //查询字符串
    url.parse(req.url,true);
})

server.listen(9000, () => {
    console.log('Listening on port 9000,')
})

直接实例化URL对象

javascript 复制代码
const http = require('http')
const server = http.createServer((req, res) => {
     let url = new URL(req.url,"http://"+req.headers.host);
    res.setHeader('Content-Type','text/html; charset=utf-8');
     if(url.pathname==='/login'){
      res.end('登陆页面')
     }else if(url.pathname==='/reg'){
         res.end('注册页面')
   }else{
        res.end('欢迎你')
    }
})

server.listen(9000, () => {
    console.log('Listening on port 9000,')
})

设置HTTP响应报文

语法 说明
response.statusCode 设置响应状态码
response.statusMessage 设置响应状态描述
response.setHeader('头名', '头值') 设置响应头信息
response.write('xx') response.end('xxx') 设置响应体
相关推荐
purrrew42 分钟前
【Java ee初阶】HTTP(2)
网络·网络协议·http
火星数据-Tina1 小时前
从HTTP轮询到WebSocket:如何让体育API性能提升100倍?
websocket·网络协议·http
2501_915909066 小时前
开发日常中的抓包工具经验谈:Charles 抓包工具与其它选项对比
websocket·网络协议·tcp/ip·http·网络安全·https·udp
欧先生^_^9 小时前
Node.js 源码架构详解
架构·node.js
沐土Arvin10 小时前
从零开始认识 Node.js:异步非阻塞的魅力
node.js
TE-茶叶蛋10 小时前
Node.js中的洋葱模型
node.js
北极象10 小时前
Go语言处理HTTP下载中EOFFailed
开发语言·http·golang
Q_Q196328847512 小时前
python的漫画网站管理系统
开发语言·spring boot·python·django·flask·node.js·php
outstanding木槿12 小时前
react中安装依赖时的问题 【集合】
前端·javascript·react.js·node.js
{⌐■_■}13 小时前
【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总
网络·网络协议·计算机网络·http·rpc·golang