HTTP请求与响应&Node.js 服务器

1,339 阅读3分钟

系统学习 HTTP

HTTP 到底是啥

体系化学习

必须学会什么

  • 基础概念(有哪些是必会的,HTTP 有哪些基础概念呢?就两个,请求和响应)
  • 如何调试(我们用的是 Node.js,可以用 log/debugger。通过 Node.js 来学习 HTTP,那我们的本质还是学习 HTTP,所以你不要在 Node.js 上花太多时间,你只要会怎么调试就行了)
  • 在哪查资料(用的是 Node.js,看 Node.js 文档)
  • 标准制定者是谁(HTTP 规格文档,RFC 2612 等)

体系化学习

  • CRM 学习法

HTTP 基础概念

请求(Request Headers)

  1. 请求动词 路径加查询参数 协议名/版本
  2. Host:域名或 IP
  3. Accept:text/html
  4. Content-Type:请求体的格式
  5. 回车
  6. 请求体(也就是上传内容,可以是任意内容,只要你格式写了)

细节

  1. 三部分:请求行(1)、请求头(234)、请求体(6)
  2. 请求动词有 GET/POST/PUT/PATCH/DELETE 等
  3. 请求体在 GET 请求中一般为空
  4. 文档位于 RFC2612 第五章
  5. 大小写不敏感(随意)。js 大小写敏感

响应(Response Headers)

  1. 协议名/版本 状态码 状态字符串
  2. Content-Type:响应体的格式
  3. 回车
  4. 响应体(也就是下载内容)

细节

  1. 三部分:状态码、响应头、响应体
  2. 常见的状态码是考点,
  3. 文档位于 RFC2612 第六章

用 curl 构造请求,-v 是看过程,不要-v 也行

设置请求动词

  • -X POST(写在-v 后面,注意大小写)

设置路径和查询参数

  • 直接在 url 后面加

设置请求头

  • -H 'Name:Value' 或者 --header 'Name:Value'

设置请求体

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

用 Node.js 读取请求

读取请求动词

  • request.method

读取路径

  • request.url 路径,带查询参数
  • path 纯路径,不带查询参数
  • query 只有查询参数

读取请求头

  • request.headers['Accept']

读取请求体

  • 比较复杂,后面再学

用 Node.js 设置响应

设置响应状态码

  • response.statuCode=200

设置响应头

  • response.setHeader('Content-Type','text/html');

设置响应体

  • response.write('内容')
  • 可追加内容。写两个及以上 response.write('内容'),它们可以拼接在一起。

curl 不是用来测试的,curl 是个浏览器,只不过它看不见东西

http 里面的路径没有./,只有/

本节内容讲了,什么是请求,什么是响应,如何用 node.js 造请求,如何用 curl 造请求,如何用 node.js 造响应。你会造请求、会造响应,你就可以了,你就是一个后端程序员了。

命令行 ssh frank2@aliyun1 退出 后面加 exit

sudo

给 frank2 添加 sudo 权限

  • adduser frank sudo

sudo 是什么

  • 全称 super user do
  • 类似于 Windows 的[以管理员身份运行]
  • 平时你不应该使用 root 账户,而是用 frank 账户
  • 遇到特殊操作,就在前面加 sudo,请出 root
  • 需要输入 frank2 的密码,不是 root 的密码
  • 使用 CTRL+A 可以快速回到命令前面,CTRL+E 回到后面
  • sudo !! 的意思是用 sudo 执行上一句命令

部署应用

下载代码

  • git clone 仓库的 https 地址

启动应用

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

如何重启应用

上传代码

  • 在本地改完代码
  • git push

下载代码

  • ssh frank2@实例IP
  • cd nodejs-test
  • git pull
  • killall node(忘了进程号就用这个,记下来的话就用kill -9 进程号)
  • sh ./start
  • 重启完毕