node从零开始之HTTP
HTTP(HyperText Transfer Protocol) 超文本传输协议
HTTP格式
文本
HTTP的组成部分
详情请看我写的 HTTP入门文章
- 动词 路径 协议/版本 第一部分路径随便写 一定要以”/“开头
- 第二部分 键值对
- Key1: value1
- Key2: value2
- Key3: value3
- Content-Type: application/x-www-form-urlencoded
- Host: www.baidu.com
- User-Agent: curl/7.54.0
- 回车 就一个目的区分 第二部分和第四部分
- 要上传的数据
推荐使用的测试工具 postman
方便调试http请求的工具
- get 获取数据
- post 新增数据
- patch 更新资源
- delete 删除数据
- head 不用实际请求资源的时候,获取文件的相关信息(大小/长度/权限)
对一个资源发一个head请求就会返回它的头文件(里面包含CDN 上的资源/图片/视频的相关信息)
- options 向服务器询问我能通过那些方法去操作这个资源(区分管理员/游客信息)
具体风格请去看 restful 相关的约定
响应头
- 200 OK 响应成功啦
- 201 Created 创建资源的时候做一个返回
- 202 服务器已接受但是没有处理(最终请求可能会也可能不会被执行)
- 206 断点续传。下载时(文件比较大100MB)先返回10M 你下载好后下次再从10M的节点去要后面的10M
- 302 Found 重定向(资源被放到了其他地方)
- 304 Not modified 表示资源未修改返回上一次请求的内容(但是仍然触发了请求)
- 400 参数不对 返回请求失败的一些原因
- 401 服务器向客户端询问权限的一个响应头
- 403 服务器已经收到,但是拒绝执行。 通常告诉用户权限不够
- 404 未找到页面
- 500
- 502 网关错误
- 504 超时
推荐书籍
- 图解HTTP(简单)推荐这本
- HTTP权威指南(工具书)
node 模块化
最简单的模块点定义
module_a.js
1 | function haha(){console.log(1)} |
main.js 使用module_a.js
1 | var mod = require('./module_a') |
- 系统模块用绝对路径如 requier(‘http’)
- 自有模块要用相对路径 requier(‘./module_a’)
同一模块导出多个变量或方法
module_a.js
1 | function haha(){console.log(1)} |
每个都指定一下
1 | module.exports.haha = haha; |
多个导出
1 | module.exports = { |
node 之字里行间创建一个服务器
node可以很简短的几句话就可以创建一个服务器
1 | const http = require('http'); |