HTTP 浅析

node server.js 8888 命令 在电脑创建或占用了8888端口 server.js 占用其端口 如果有人请求8888 就会运行一次server.js里面的代码。

curl -v http://127.0.0.1:8888/xxx 这里请求看一次8888端口

在bash就会显示:

  1. λ node server.js 8888
  2. 监听 8888 成功
  3. 请用在空中转体720度然后用电饭煲打开 http://localhost:8888
  4. 有个傻子发请求过来啦!路径(带查询参数)为:/
  5. 有个傻子发请求过来啦!路径(带查询参数)为:/favicon.ico
  6. 有个傻子发请求过来啦!路径(带查询参数)为:/xxx

逻辑
每次收到请求都会把中间的代码执行一遍
用if else判断路径,并返回响应
如果是已知路径,一律返回200
如果是未知路径,一律返回404
Content-Type表示内容的「类型/语法」

  1. response.setHeader('Content-Type', 'text/html;charset=utf-8');
  2. response.setHeader('Content-Type', 'text/css;charset=utf-8');
  3. response.setHeader('Content-Type', 'text/javascript;charset=utf-8');

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

  1. response.write(`你输入的路径不存在对应的内容\n`)
  2. /* 这是html*/
  3. response.write(`
  4. <!DOCTYPE html>
  5. <head>
  6. <link rel="stylesheet" href="/x">
  7. <script src="/y"></script>
  8. </head>
  9. <body>
  10. <h1>我是红色</h1>
  11. <p>我是粉红色</p>
  12. </body>
  13. `);
  14. /* 这是js*/
  15. response.write(`
  16. console.log("这是JS的部分")
  17. `);

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

HTTP 基础概念

请求

请求动词路径加查询参数协议名/版本
Host: 域名或IP
Accept: text/html 我想接受什么内容
Content- Type:请求体的格式
回车
请求体(也就是上传内容)

curl -v -X POST —data ‘上传内容’ http://127.0.0.1:8888/

04 HTTP全解 - 图1

细节

三部分:请求行、请求头、请求体

请求动词有GET / POST /PUT / PATCH/ DELETE等;GET获取 POST发送

请求体在GET请求中一般为空

文档位于RFC 2612第五章

大小写不敏感(随意),最好照着我的写

响应

协议名/版本状态码状态字符串

Content- Type:响应体的格式

回车

响应体(也就是下载内容)

04 HTTP全解 - 图2

用CURL构造请求(在cmder里面)

请求:

  1. curl -v http://127.0.0.1:8888/xxx 这里请求看一次8888端口

设置请求动词(动词为POST)

  1. curl -v -X POST --data '上传内容' http://127.0.0.1:8888/

设置请求头(这里是:我要接受HTML内容)

  1. curl -v -X POST -H 'Accept:text/html' http://127.0.0.1:8888/

设置请求体(-d/—data)

  1. curl -v -X POST --data '上传内容' http://127.0.0.1:8888/

用Node.js 读取请求(在JS里面)

读取请求动词

  1. console.log(request.method);

读取路径

  1. console.log('路径(带查询参数)为:' + pathWithQuery)

读取请求头

  1. console.log(request.headers['Accept']);

设置响应状态码

  1. response.statusCode = 200

设置请求头

  1. response.setHeader('Content-Type', 'text/html');

设置响应体

  1. response.write(`哈哈哈\n`)