基本概念
- HTTP全称HyperText Transfer Protocol,超文本传输协议;
- HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。
- 帮我们发送请求的工具就叫做用户代理(User Agent);
- 那服务器如何做出响应呢?在这里我们使用node.js里面的http模块可以做到,把代码放到服务器上运行;
- 在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
- 服务器就是没有显示器的电脑,有IP有端口;前端写的代码是运行在客户端,后端写的代码是运行在服务端,客户端会发送请求到服务端,这就是请求,服务器会给客户端反应就是响应;
HTTP工作原理
HTTP实践
- 那如何发送请求呢,我们通常可以使用浏览器和curl命令;使用chrome浏览器的开发者工具可以看到网站的请求与服务器的响应;
下面的图片是chrome浏览器发送的请求与响应图
本地搭建一个有所响应的node.js的服务器
- 1.新建一个文件夹,里面新建一个js,暂时命名为server.js,并把以下代码复制到js文件中
let http = require('http');
let fs = require('fs');
let url = require('url');
let port = process.argv[2];
if(!port){
console.log('请指定端口号好不啦?\nnode server.js 8888 这样不会吗?');
process.exit(1)
}
let server = http.createServer(function(request, response){
let parsedUrl = url.parse(request.url, true);
let pathWithQuery = request.url;
let queryString = '';
if(pathWithQuery.indexOf('?') >= 0){ queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) }
let path = parsedUrl.pathname;
let query = parsedUrl.query;
let method = request.method;
console.log(request.headers);
console.log('发请求过来啦!路径(带查询参数)为:' + pathWithQuery);
if(path === '/'){
response.statusCode = 200;
response.setHeader('Content-Type', 'text/html;charset=utf-8');
response.write(`请求成功!\n`);
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(`你输入的路径不存在对应的内容\n`);
response.end()
}
});
server.listen(port);
console.log('监听 ' + port + ' 成功\n请在浏览器打开 http://localhost:' + port);
- 启动本地服务器>> node server.js, 由于代码中需要自己设定端口号,而我们启动的时候没有设定,所以服务器会有以下反应;
- 重新使用node server.js 8888启动

同时,我们启动的本地服务器有以下反应

上面的server.js里面的代码就是服务器代码了,一般放在服务器上;
深入分析HTTP请求与响应
- 请求头分析,如下图;

- 服务器是可以得到请求的所有响应头

- 响应体分析: