请求与响应模型

image.png

如何发请求

方法

  • 用Chrome地址栏

image.png

  • 用curl命令

image.png

  • 帮你发请求的工具叫做「用户代理」,英文名 User Agent

    image.png

    如何做出一个响应

    自己发请求,自己回响应

Node.js 有一个http模块可以做到
代码链接

  1. var http = require("http");
  2. var fs = require("fs");
  3. var url = require("url");
  4. var port = process.argv[2];
  5. if (!port) {
  6. console.log("请指定端口号好不啦?\nnode server.js 8888 这样不会吗?");
  7. process.exit(1);
  8. }
  9. var server = http.createServer(function (request, response) {
  10. var parsedUrl = url.parse(request.url, true);
  11. var pathWithQuery = request.url;
  12. var queryString = "";
  13. if (pathWithQuery.indexOf("?") >= 0) {
  14. queryString = pathWithQuery.substring(pathWithQuery.indexOf("?"));
  15. }
  16. var path = parsedUrl.pathname;
  17. var query = parsedUrl.query;
  18. var method = request.method;
  19. /******** 从这里开始看,上面不要看 ************/
  20. console.log("有个傻子发请求过来啦!路径(带查询参数)为:" + pathWithQuery);
  21. if (path === "/") {
  22. response.statusCode = 200;
  23. response.setHeader("Content-Type", "text/html;charset=utf-8");
  24. response.write(`
  25. <!DOCTYPE html>
  26. <head>
  27. <link rel="stylesheet" href="./style.css">
  28. </head>
  29. <body>
  30. <h1>你好</h1>
  31. </body>
  32. `);
  33. response.end();
  34. } else if (path === "/style.css") {
  35. response.statusCode = 200;
  36. response.setHeader("Content-Type", "text/css;charset=utf-8");
  37. response.write(`h1{color: red;}`);
  38. response.end();
  39. } else {
  40. response.statusCode = 404;
  41. response.setHeader("Content-Type", "text/html;charset=utf-8");
  42. response.write(`你访问的页面不存在`);
  43. response.end();
  44. }
  45. /******** 代码结束,下面不要看 ************/
  46. });
  47. server.listen(port);
  48. console.log(
  49. "监听 " +
  50. port +
  51. " 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:" +
  52. port
  53. );

注意事项

  • 这些代码就是服务器代码,一般放在服务器上
  • path 是不带查询参数的路径 /x
  • query 是查询参数的对象形式 {a: ‘1’}
  • queryString 是查询参数的字符串形式 ?a=1
  • pathWithQuery 是带查询参数的路径,一般不用
  • request 是请求对象
  • response 是响应对象

    代码逻辑

    语法

    这种字符串 里面可以回车
    image.png
    ‘这种字符串’ 里面要回车只能用 \n 表示
    image.png

    逻辑

  • 每次收到请求都会把中间的代码执行一遍

  • 用if else 判断路径,并返回响应
  • 如果是已知路径,一律返回 200

image.png

  • 如果是未知路径,一律返回 404

image.png

  • Content-Type 表示内容的「类型/语法」

image.png

  • response.write()可以填写返回的内容

image.png

  • response.end()表示响应可以发给用户了

image.png

注意事项

  • URL里的后缀卵用没有,/y.css 不一定是 CSS 内容
  • Content-Type 才是决定文件类型的关键

    补充

    查资料:看 Node.js 文档
    标准制定者:HTTP规格文档:RFC 2612

HTTP基础概念

请求

请求行:
请求动词 路径加查询参数 协议名/版本
image.png
请求头:
Host:域名或 IP
Accept: text/html
image.png
Content -Type:请求体的格式
回车
image.png
请求体(也就是上传内容)

注意

  • HTTP请求包括三部分:请求行、请求头、请求体
  • 请求动词有 GET(获取内容)/ POST(上传内容) /PUT / PATCH /DELETE 等
  • 请求体在 GET 请求中一般为空
  • 文档位于 RFC 2612 第五章
  • 大小写不敏感(随意)

    响应

    响应行:
    协议名/版本 状态码 状态字符串
    响应头:
    Content - Type:响应体的格式
    image.png
    回车
    响应体(也就是下载内容)
    image.png

    注意

  • 三部分:状态行、响应头、响应体

  • 常见的状态码是考点