HTTP 请求与响应
前置条件
一、请求与响应模型
二、如何发请求?
- 浏览器地址栏输入网址
- curl 命令
三、如何做出响应?
- node.js 有一个 http 模块
- 使用代码编程实现
注意事项
- 这些代码就是服务器代码,一般放在服务器上
- query 是查询参数的对象形式{a:‘1’}
- queryString 是查询参数的字符串形式?a=1
- path 是不带查询参数的路径/x
- pathWithQuery 是带查询参数的路径,一般不用
代码编程如下:
运行代码,打开终端,输入:node server.js 8888
server.js是保存这段代码的文件名
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(`二哈`);
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 {
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
);
1、代码逻辑
`这是一个字符串` 为反引号,
里面可以直接回车。- 每次收到请求执行一遍代码
- 用 if else 判断路径。并作出响应
- 若是已知路径,一律返回 200
- 若是未知路径,一律返回 404
- response.write() 里面填写返回的内容
- response.end() 结束此次响应
2、注意事项
- URL 里面的后缀卵用没有,/y.css 不一定是 CSS 内容
Content-Type 才是决定文件类型的关键
四、HTTP 基础概念
1、请求
- 格式:
请求动词 路径+查询参数 协议名/版本
- Host:
域名或IP
- Accept:
text/html
- Content-Type:
请求体的格式
- 回车:
\n
- 请求体:
上传的内容
2、细节
- 三部分:
请求行 请求头 请求体
- 请求动词:
GET POST PUT PATCH DELETE等
请求体在GET请求中一般为空
3、响应
- 格式:
协议名/版本 状态码 状态字符串
- Content-Type:
响应体的格式
- 回车:
\n
- 响应体:
下载的内容
4、细节
- 三部分:
状态行 响应头 响应体
- 常见的状态码:传送门
五、用 curl 构造请求
curl -v http://127.0.0.1:8888
1、设置请求动词
-X POST
形式
2、设置路径和查询参数
- 直接在 URL 后面加
3、设置请求头
-H 'Name: Value' 或者 --header 'Name:Value'
4、设置请求体
-d '内容' 或者 --data '内容'
六、用 Node.js 读取请求及设置响应
1、读取请求动词
request.method()
2、读取路径
request.url 路径,带查询参数
path 纯路径,不带查询参数
query 只有查询参数
3、读取请求头
request.headers['Accept']
4、读取请求体
- 后续补充
5、设置响应
- 设置响应状态码
response.statusCode=200
- 设置响应头
response.setHeader('Content-Type','text/html')
- 设置响应体
response.write()
4、读取请求体
- 后续补充
5、设置响应
- 设置响应状态码
response.statusCode=200
- 设置响应头
response.setHeader('Content-Type','text/html')
- 设置响应体
response.write()