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

    (完)

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Win7 安装
    线上java排查
    spring boot
    redisson
    Jcaptca 图片
    URL重写
    gradle导出依赖的jar包
    Redis tomcat
    flex 通过htmlservices链接moss的rest(rest 的get post方式)
    java语言MySQL批处理
  • 原文地址:https://www.cnblogs.com/xhyccc/p/13442189.html
Copyright © 2020-2023  润新知