用简单的 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 请求。
(完)
用简单的 Node.js 后台程序浅析 HTTP 请求与响应的更多相关文章
- 在 Web 应用中创建 Node.js 应用程序
本分步指南将通过 Azure Web 应用帮助您启动并运行示例 Node.JS 应用程序.除 Node.JS 外,Azure Web 应用还支持其他语言,如 PHP..NET.Node.JS.Pyth ...
- node.js后台快速搭建在阿里云(二)(pm2和nginx篇)
前期准备 阿里云服务器 node.js pm2 express nginx linux(推荐教程:鸟哥的私房菜) 简介 嗯……我只是个前端而已 在第一部分说完了express篇. 后面继续项目的部署, ...
- node.js后台快速搭建在阿里云(一)(express篇)
前期准备 阿里云服务器 node.js pm2 express nginx linux(推荐教程:鸟哥的私房菜) 简介 嗯……我只是个前端而已 前段时间写过一个.net mvc的远程发布,关于.net ...
- 高效使用 JavaScript 闭包,避免 Node.js 应用程序中的内存泄漏
在 Node.js 中,广泛采用不同形式的闭包来支持 Node 的异步和事件驱动编程模型.通过很好地理解闭包,您可以确保所开发应用程序的功能正确性.稳定性和可伸缩性. 闭包是一种将数据与处理数据的代码 ...
- Node.js后台开发初体验
Node.js是什么 Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质时对Chrome V8引擎进行了封装 Node.js安装 ...
- Node.js 异步模式浅析
注:此文是node.js实战读后的总结. 在平常的脚本语言中都是同步进行的,比如php,服务器处理多个请求的方法就是并行这些脚本.多任务处理,多线程等等.但是这种处理方式也有一个问题:每一个进程或者线 ...
- 一个用来爬小说的简单的Node.js爬虫
小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...
- 从零开始学习渗透Node.js应用程序
本文来源于i春秋学院,未经允许严禁转载 0x01 介绍 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...
- 搭建一个简单的node.js服务器
第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...
随机推荐
- 信号量,semaphore源代码之我见
信号量,Semaphore,一个限定访问线程数量的工具类,属于并发包java.util.concurrent 里面的类. Semaphore,内部提供了构造方法(包含默认的非公平信号量构造方法,已经可 ...
- 学习Kvm(一)
背景介绍 传统数据中心面临的问题: 资源使用率低 资源分配不均 自动化能力差 初始化成本高 云计算: 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计 ...
- Netty学习摘记 —— Netty客户端 / 服务端概览
本文参考 本篇文章是对<Netty In Action>一书第二章"你的第一款 Netty 应用程序"的学习摘记,主要内容为编写 Echo 服务器和客户端 第一款应用程 ...
- 3_Phase Portrait_相图_相轨迹
- vue双向绑定、Proxy、defineproperty
本文原链接:https://www.jianshu.com/p/2df6dcddb0d7 前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素 ...
- 祖先元素transform非none时在Iphone6上引起后代fixed/absolute元素的怪异表现及解决方案
如题,祖先元素transform非none时,记录一下Iphone6中引起后代元素fixed参考视图怪异表现和解决方案. 层叠关系及参考视图 层叠上下文是HTML元素的三维概念,这些HTML元素在一条 ...
- js 获取和设置css3 属性值的实现方法
众多周知 CSS3 增加了很多属性,在读写的时候就没有原先那么方便了. 如:<div style="left:100px"></div> 只考虑行间样式的话 ...
- 没有高度的div中的子元素高度自动撑开
直接上代码: 很多时候 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- python 简要小结
初学python 简单总结部分内置函数 将两个数组合并为元组:zip() 解压:zip(*zip) range(a,b,c) 取值范围 起始:a 结尾:b 间隔:c (参数不能为空否则 ...
- 修复tunl0-二进制安装calico
这篇博文很重要,出现这个问题导致pod之间无法通讯,pod无法连接外网. 出现的问题是二进制方式安装了节点之后, tunl0没有显示,通过ifconfig tunl0 up 启动tunl0 没有意义, ...