请求:客户端发送一个信息给服务器端
响应:服务器端接收到客户端的信息后回复给客户端一个信号
请求
1. 如何发送一个请求
- 使用curl
- 使用浏览器
curl/浏览器会帮助你发送请求,所以被称为 “用户代理” 。
2. 请求的组成
- 请求:动词+路径+查询参数+协议名/版本
- Host:域名/ip
- Accept:接受响应内容的格式
- Content-Type:请求体的格式
- 回车
- 请求体(也就是上传的内容)
GET / HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.58.0
> Accept: */*
>
其中:
1 被称为 请求行
2,3,4 被称为 请求头
6 被称为 请求体
3. 构造一个请求
例如:curl http://localhost:8888
- 在命令中加上 -X POST 则请求动词变位 POST
- 在命令中加上例如 -H "Content-Type:text/plain charset=utf-8" "accept:text/html" 等内容,可任意编辑
- 在命令在加上 -d 或 --data 可加入请求体
- 可在 url 后加长查询参数 ?wd=hahaha (锚点不会被上传到服务器)
一般来说,当动词为get时,请求体内不会有内容。
响应
1. 监听
我们可以使用nodejs来实现一个简单的响应,并监听特定端口。 参考代码
当我们输入node server.js 8888 后,可开始监听8888端口
每次8888端口被请求一次,nodejs中的代码就会被执行一次
2. 响应的组成
- 协议名/版本+状态码+状态字符串
- Conmtent-Type:响应体格式
- 回车
- 响应体(下载到客户端的内容)
其中:
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中响应代码的逻辑
- 用if else判断路径,并返回响应
- 若为已知路径,则返回状态码200
- 若为未知路径,则返回状态码404
- Content-Type 表示内容的 类型/语法
- response.write() 填写响应体
- 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();
}
参考来源:饥人谷