用简单的 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 请求

(完)

用简单的 Node.js 后台程序浅析 HTTP 请求与响应的更多相关文章

  1. 在 Web 应用中创建 Node.js 应用程序

    本分步指南将通过 Azure Web 应用帮助您启动并运行示例 Node.JS 应用程序.除 Node.JS 外,Azure Web 应用还支持其他语言,如 PHP..NET.Node.JS.Pyth ...

  2. node.js后台快速搭建在阿里云(二)(pm2和nginx篇)

    前期准备 阿里云服务器 node.js pm2 express nginx linux(推荐教程:鸟哥的私房菜) 简介 嗯……我只是个前端而已 在第一部分说完了express篇. 后面继续项目的部署, ...

  3. node.js后台快速搭建在阿里云(一)(express篇)

    前期准备 阿里云服务器 node.js pm2 express nginx linux(推荐教程:鸟哥的私房菜) 简介 嗯……我只是个前端而已 前段时间写过一个.net mvc的远程发布,关于.net ...

  4. 高效使用 JavaScript 闭包,避免 Node.js 应用程序中的内存泄漏

    在 Node.js 中,广泛采用不同形式的闭包来支持 Node 的异步和事件驱动编程模型.通过很好地理解闭包,您可以确保所开发应用程序的功能正确性.稳定性和可伸缩性. 闭包是一种将数据与处理数据的代码 ...

  5. Node.js后台开发初体验

    Node.js是什么 Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质时对Chrome V8引擎进行了封装 Node.js安装 ...

  6. Node.js 异步模式浅析

    注:此文是node.js实战读后的总结. 在平常的脚本语言中都是同步进行的,比如php,服务器处理多个请求的方法就是并行这些脚本.多任务处理,多线程等等.但是这种处理方式也有一个问题:每一个进程或者线 ...

  7. 一个用来爬小说的简单的Node.js爬虫

    小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...

  8. 从零开始学习渗透Node.js应用程序

    本文来源于i春秋学院,未经允许严禁转载 0x01 介绍 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...

  9. 搭建一个简单的node.js服务器

    第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...

随机推荐

  1. 详解AOP——用配置文件的方式实现AOP

    AOP概念 1.AOP:面向切面(方面)编程,扩展功能不修改源代码实现 AOP原理 AOP采用横向抽取机制,取代了传统纵向继承体系重复性代码 传统的纵向抽取机制: 横向抽取机制: AOP操作术语 1. ...

  2. Linux基础学习 | 目录及文件

    一.目录结构 Linux目录采用树形结构,以根目录/向下延伸呈一个倒置的树的形状. 每个目录下都有其相对应的子目录,而子目录中又有其子目录的存在,就像一棵树的树枝分叉,所有的目录层次结构分明,每个目录 ...

  3. java中时间的规范是按美国,SimpleDateFormat怎么处理

    题目3.2: 如果时间的规范是按美国,怎么处理? import java.text.ParseException;import java.text.SimpleDateFormat;import ja ...

  4. vue-cli打包后dist文件运行空白和背景图显示问题详解

    1.文件引用路径.我们直接运行打包后的文件夹中的index.html文件,会看到网页一片空白,f12调试,全是css,js路径引用错误的问题. 解决:到config文件夹中打开index.js文件. ...

  5. table表格做出圆角效果

    采用border-radius 这个属性的时候在chrome里面没有圆角,倒是在IE里面有圆角. 不知道是不是没有写webkie 前缀,但是加上一段神奇的代码overflow:hidden的是时候在c ...

  6. BootstrapBlazor实战-Tree树形控件使用(1)

    实战BootstrapBlazor树型控件Tree的使用, 以及整合Freesql orm快速制作数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql/Sql ...

  7. docker下将容器按照端口号分配

    问题情境:现在有一个服务器主机,安装了docker,想给成员分配各自的容器,但不想成员通过宿主机进入容器.那么成员如何直接访问容器呢? 成员可以通过ip加端口号访问 因此,需要生成一个容器,将容器的2 ...

  8. JavaWeb知识梳理(可收藏)

    **JavaWeb相关知识 ** 1.Servlet 1.1 Status Code(Http状态码) 1.1xx 请求信息 Http状态码 Http Status Code Http状态码含义中文说 ...

  9. 阿里云-部署-服务-Docker

    目录 ♫ MusicPlayer Naiveboom - 比较安全 个人阿里云部署的小服务,欢迎使用,服务器资源有限,如果遇到卡顿还请谅解~ 索引: 在线音乐播放器 阅后即焚 ♫ MusicPlaye ...

  10. js的split函数

    split() 方法用于把一个字符串分割成字符串数组. separator 必需.字符串或正则表达式,从该参数指定的地方分割 stringObject. ***如果把空字符串 ("" ...