HTTP请求与响应&Node.js Server

182 阅读5分钟

请求与响应

  • 一般前端的代码都运行在客户端

  • 后端的代码都运行在服务端

  • 客户端发请求到服务端的一个端口

  • 服务端用这个端口响应给客户端

请求响应图.png

如何发请求?

  1. 浏览器输入一个网址

  2. 用 curl 命令

概念

  • 帮你发请求的工具叫用户代理 (User Agent)

如何做一个响应?

需要用到编程


var server = http.createServer(function(request, response){
    var parsedUrl = url.parse(request.url, true)
    var pathWithQuery = request.url 
    var queryString = ''
    if(pathWithQuery.indexOf('?') >= 0){ queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) }
    var path = parsedUrl.pathname
    var query = parsedUrl.query
    var method = request.method
    
    -----------------------------------------------------------------------

    console.log('终于有人发请求过来啦!路径(带查询参数)为:' + pathWithQuery)

 if(path === '/'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write(`成功访问`)
    response.end()
  } else if(path === '/x'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/css;charset=utf-8')
    response.write(`body{color: red;}`)
    response.end()
  } else {
    response.statusCode = 404
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write(`你输入的路径不存在对应的内容`)
    response.end()
  }

注意事项

  • 这些代码就是服务器代码,一般被放置在服务器上

  • path 是不带查询参数的路径 /x

  • query 是查询参数的对象形式 {a:'1'}

  • queryString 是查询参数的字符串形式 ?a=1

  • pathWithQuery 是带查询参数的路径,一般不用

  • request 是请求对象

  • response 是响应对象

代码逻辑

语法


1. `这种字符串`里面可以回车

2. '这种字符串'里面要回车只能用\n表示
   

逻辑

  • 每次收到请求都会吧中间的代码执行一遍

  • if else 判断路径,并返回响应

  • 如果是已知路径,一律返回200状态码

  • 如果是位置路径,一律返回404状态码

  • content-Type 表示内容的[类型/语法] 里面一般填text/css、html、javascript

  • response.write(``) 可以填写返回的内容

  • response.end() 表示响应可以发给用户了,这个不能省略,如果省略了会出问题

后缀可有可不有

  • 程序员不看后缀,只看文件的类型

注意事项

  1. URL里的后缀啥用没有, y.css 不一定是css内容

  2. content-Type 才是决定文件类型的关键

HTTP总结

必须会什么知识

  • 基础概念

  • 如何调试(用的是Node.js,可以用console.log/debugger调试)

  • 在哪查资料(用的Node.js,就可以看Node.js文档)

  • 标准指定者是谁(HTTP规格文档:RFC 2612 有中文)

学习方法

  • CRM方法

  • C:抄文档,抄网上的。R:放在自己机器上运行成功。 M:加入一点自己的想法,重新运行

学习请求

请求的格式.png

格式

  1. 请求行

请求动词/ 路径加查询参数 协议名/版本号

  1. 请求头

host:域名或IP

Accept:text/html

content-Type:请求体的格式

  1. 回车

在请求体和请求头之间有一个回车

  1. 请求体

也就是post的内容

细节

  • 请求动词有 GET/POST/PUT/PATCH/DELETE等,目前只掌握GET和POST

  • 请求体在 GET请求时一般为空

  • 文档为于RFC 2612 第五章

  • 大小写不敏感,但最好找个标准照着写,因为JS的大小写敏感

  • 开发者工具 Net work————Request Headers

学习响应

响应的格式.png

格式

  1. 状态行

协议名/版本号 状态码 状态字符串

  1. 响应头

Content-type:响应体的格式

  1. 回车

隔开响应头与响应体

  1. 响应体

细节

  • 常见的状态码要掌握:200和404

  • 文档位于 RFC 2612 第六章

用 curl 构造请求

  • 控制台输入curl -v http://127.0.0.1:8888

  • 设置请求动词

-X POST全部大写

  • 设置路径和查询参数

直接在URL后面加你想设置的路径或查询参数

但要注意锚点不会发送到服务器!!!

  • 设置请求头

-H 'Name:Value' 或者 --header'Name:Value'想咋改就咋改

  • 设置请求体

-d '内容' 或者 --data '内容'

用Node.js 读取请求

  • 读取请求动词

request.method

  • 读取路径

request.url 路径带查询参数

path 纯路径,不带查询参数

query 只有查询参数

  • 读取请求头

request.headers['Accept']

  • 读取请求体

比较麻烦,需要的时候查文档

用Node.js 设置响应

  • 设置响应状态码

response.statusCode=200

  • 设置响应头

respomse.setHeader('content-Type','text/html')

  • 设置响应体

respose.write('内容') 可以追加内容

  • 404也是一个页面,只是大部分网页不主动设置404页面,导致看到的都是浏览器默认的404页面

补充

  • console.log(调试大法)

    1. debug 就是不断质疑自己的过程

    2. 不要总是觉得怎么样,直接console.log 验证

云服务器的操作

  • 给自己设置的用户添加 sudo 权限

  • 遇到特殊操作,在命令前面加上 sudo ,请出 root超级用户。

  • 需要输入当前用户的密码

  • Ctrl+A 可以快速回到当前命令的最前面,方便修改

  • sudo !! 的意思是用sudo 执行之前一局命令

在云服务器安装Node.js

curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - 
sudo apt-get update
sudo apt-get install -y nodejs
node -v
npm -v
npx -v

sudo apt install git

一行一行复制安装Node.js 14

git clone https://github.com/BaiJingSama/node.js-test.git
cd nodejs-test
touch log
启动命令:node server.js 8888 > log 2>&1 &
把启动命令做成 start 文件
添加执行权限 chmod +x ./start
运行 sh ./start 得到一个进程号 pid
tail loglog 内容
kill -9 pid 可以关掉进程
killall node 可以关掉所有 node 进程

在bash上配置云服务器的Node.js 复制上面代码即可