用简单的 Node.js 后台程序浅析 HTTP 请求与响应

用简单的 Node.js 后台程序浅析 HTTP 请求与响应

本文写于 2020 年 1 月 18 日

我们来看两种方式发送 HTTP 请求,一种呢,是命令行的 curl 命令;一种呢是直接在浏览器的地址栏输入地址。

那你会发请求吗?

我们哪里会发请求嘛,我们不会,所以我们需要 “用户代理“ 来帮助我们,即User Agent

那发完了如何响应呢?

假设,我们有一个服务器,然后我们写了一段 Node.js 的服务器代码,并在服务器的某个端口上开始运行。

那么这个时候,我们只要访问一次服务器,我们的后台程序就会知道。

这其中,包括你的路径查询参数。而锚点不会被服务器读取!!!

这是上次的文章中提到的 URL 的组成。

其实简单来说,十分简单(不是废话吗)。

可以用伪代码来实现一下:

http = 接收http请求
path = 路由
query = 查询参数

if(路由 === '/') {
  返回响应('这是根目录')
} else if (路由 === '/home') {
  返回响应('这是首页')
} else {
  返回响应('404 Not Found')
}

请求规则

那么具体的 HTTP 请求,要求的规则是什么呢?

简单来说,需要有一个请求动词,后跟路径查询参数,后跟协议名/版本号

比如说GET / HTTP/1.1,这就是说——请求是 GET,路径是 / 根目录,没有查询参数,协议是 HTTP/1.1。

请求动词一般有 GET / POST / PUT / PATCH / DELETE……

一般使用 GET 和 POST 最多,其中 GET 用来获取内容,POST 用来上传内容

除此之外呢,还会有 Host、Accept、Content-Type 等参数,这里说几个简单的常用的。

  • Host:域名或者 IP;
  • Accept:text/html,用来告诉服务器想要的文件类型;
  • Content-Type:请求体的格式
  • 一个回车;
  • 请求体。

之前说一个请求动词,后跟路径查询参数,后跟协议名/版本号叫做请求行

Host + Accept + Content-Type 是请求头

最后就是请求的内容:请求体在 GET 请求中,请求体为空

响应规则

  • 协议名/版本+状态码+状态字符串;
  • Content-Type:响应体的格式;
  • 一个回车;
  • 响应体。

第一个叫做状态行;第二个叫做响应头;第三个叫做响应体

如何用 Curl 来构造一个 HTTP 请求?

之前的文章稍微提了一下,说curl https://baidu.com是向百度发送 http 请求、curl -v xxxxx可以查看具体的请求过程。

那么接下来会结合刚刚说的 HTTP 请求,来讲一些,更具体的用法:

  • 设置请求动词
    -X POST
    大小写注意
  • 设置路径和查询参数
    直接加在 url 后面就可以了
  • 设置请求头
    -H 'Name:Value'或者--header 'Name: Value'。比如-H 'Xhy: handsome',或者规定 Content-Type 为纯文本,且是 utf-8 编码:Content-Type: text/plain;charset=utf-8
  • 设置请求体
    -d '内容'或者--data '内容'

服务器自然会有相应的 API 将每一个信息分别读出来,之后便可以进行处理。

总而言之,就是利用各种各样的 API 来实现接收或者发送符合 HTTP 协议的 HTTP 请求

(完)

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/xhyccc/p/13442189.html