请求与响应模型
如何发请求
方法
- 用Chrome地址栏
- 用curl命令
Node.js 有一个http模块可以做到
代码链接
var http = require("http");
var fs = require("fs");
var url = require("url");
var port = process.argv[2];
if (!port) {
console.log("请指定端口号好不啦?\nnode server.js 8888 这样不会吗?");
process.exit(1);
}
var server = http.createServer(function (request, response) {
var parsedUrl = url.parse(request.url, true);
var pathWithQuery = request.url;
var queryString = "";
if (pathWithQuery.indexOf("?") >= 0) {
queryString = pathWithQuery.substring(pathWithQuery.indexOf("?"));
}
var path = parsedUrl.pathname;
var query = parsedUrl.query;
var method = request.method;
/******** 从这里开始看,上面不要看 ************/
console.log("有个傻子发请求过来啦!路径(带查询参数)为:" + pathWithQuery);
if (path === "/") {
response.statusCode = 200;
response.setHeader("Content-Type", "text/html;charset=utf-8");
response.write(`
<!DOCTYPE html>
<head>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<h1>你好</h1>
</body>
`);
response.end();
} else if (path === "/style.css") {
response.statusCode = 200;
response.setHeader("Content-Type", "text/css;charset=utf-8");
response.write(`h1{color: red;}`);
response.end();
} else {
response.statusCode = 404;
response.setHeader("Content-Type", "text/html;charset=utf-8");
response.write(`你访问的页面不存在`);
response.end();
}
/******** 代码结束,下面不要看 ************/
});
server.listen(port);
console.log(
"监听 " +
port +
" 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:" +
port
);
注意事项
- 这些代码就是服务器代码,一般放在服务器上
- path 是不带查询参数的路径 /x
- query 是查询参数的对象形式 {a: ‘1’}
- queryString 是查询参数的字符串形式 ?a=1
- pathWithQuery 是带查询参数的路径,一般不用
- request 是请求对象
-
代码逻辑
语法
这种字符串
里面可以回车
‘这种字符串’ 里面要回车只能用 \n 表示逻辑
每次收到请求都会把中间的代码执行一遍
- 用if else 判断路径,并返回响应
- 如果是已知路径,一律返回 200
- 如果是未知路径,一律返回 404
- Content-Type 表示内容的「类型/语法」
- response.write()可以填写返回的内容
- response.end()表示响应可以发给用户了
注意事项
HTTP基础概念
请求
请求行:
请求动词 路径加查询参数 协议名/版本
请求头:
Host:域名或 IP
Accept: text/html
Content -Type:请求体的格式
回车
请求体(也就是上传内容)
注意
- HTTP请求包括三部分:请求行、请求头、请求体
- 请求动词有 GET(获取内容)/ POST(上传内容) /PUT / PATCH /DELETE 等
- 请求体在 GET 请求中一般为空
- 文档位于 RFC 2612 第五章
-
响应
响应行:
协议名/版本 状态码 状态字符串
响应头:
Content - Type:响应体的格式
回车
响应体(也就是下载内容)注意
三部分:状态行、响应头、响应体
- 常见的状态码是考点