浅析 http 请求与响应

307 阅读2分钟

请求:客户端发送一个信息给服务器端

响应:服务器端接收到客户端的信息后回复给客户端一个信号


请求

1. 如何发送一个请求

  • 使用curl
  • 使用浏览器

curl/浏览器会帮助你发送请求,所以被称为 “用户代理”

2. 请求的组成

  1. 请求:动词+路径+查询参数+协议名/版本
  2. Host:域名/ip
  3. Accept:接受响应内容的格式
  4. Content-Type:请求体的格式
  5. 回车
  6. 请求体(也就是上传的内容)
 GET / HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.58.0
> Accept: */*
>

其中:

1 被称为 请求行

2,3,4 被称为 请求头

6 被称为 请求体

3. 构造一个请求

例如:curl http://localhost:8888

  1. 在命令中加上 -X POST 则请求动词变位 POST
  2. 在命令中加上例如 -H "Content-Type:text/plain charset=utf-8" "accept:text/html" 等内容,可任意编辑
  3. 在命令在加上 -d 或 --data 可加入请求体
  4. 可在 url 后加长查询参数 ?wd=hahaha (锚点不会被上传到服务器)

一般来说,当动词为get时,请求体内不会有内容。


响应

1. 监听

我们可以使用nodejs来实现一个简单的响应,并监听特定端口。 参考代码

当我们输入node server.js 8888 后,可开始监听8888端口

每次8888端口被请求一次,nodejs中的代码就会被执行一次

2. 响应的组成

  1. 协议名/版本+状态码+状态字符串
  2. Conmtent-Type:响应体格式
  3. 回车
  4. 响应体(下载到客户端的内容)

其中:

1 被称为状态行

2 被称为响应头

4被称为响应体

< HTTP/1.1 200 OK
< Content-Type: text/html;charset=utf-8
< Date: Tue, 14 Apr 2020 13:50:18 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
<

        <!Document html>
        <head>
            <link rel="stylesheet" href="/x">
        </head>
        <body>
            <h1>标题</h1>
            <script src="/y"></script>
        </body>

3. nodejs中响应代码的逻辑

  1. 用if else判断路径,并返回响应
  2. 若为已知路径,则返回状态码200
  3. 若为未知路径,则返回状态码404
  4. Content-Type 表示内容的 类型/语法
  5. response.write() 填写响应体
  6. response.end() 表示结束
console.log("有个傻子发请求过来啦!路径(带查询参数)为:" + pathWithQuery);

  if (path === "/") {
    response.statusCode = 200;
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    response.write(`
       <!Document html> 
        <head>
            <link rel="stylesheet" href="/x">
        </head>
        <body>
            <h1>标题</h1>
            <script src="/y"></script>
        </body>`);
    response.end();
  } else if (path === "/x") {
    response.statusCode = 200;
    response.setHeader("Content-Type", "text/css;charset=utf-8");
    response.write(`body{color: red;}`);
    response.end();
  } else if (path === "/y") {
    response.statusCode = 200;
    response.setHeader("Content-Type", "text/javascript;charset=utf-8");
    response.write(`console.log('这是js内容')`);
    response.end();
  } else {
    response.statusCode = 404;
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    response.write(`你访问的页面不存在`);
    response.end();
  }


参考来源:饥人谷