请求与响应
-
一般前端的代码都运行在客户端
-
后端的代码都运行在服务端
-
客户端发请求到服务端的一个端口
-
服务端用这个端口响应给客户端
如何发请求?
-
浏览器输入一个网址
-
用 curl 命令
概念
- 帮你发请求的工具叫用户代理 (User Agent)
如何做一个响应?
需要用到编程
-
Node.js 有一个http模块可以做到
-
初始化代码在github里,直接复制即可(BaiJingSama/node.js-test (github.com))
-
有一次请求 都会运行一遍代码
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()
}
注意事项
-
这些代码就是服务器代码,一般被放置在服务器上
-
path 是不带查询参数的路径 /x
-
query 是查询参数的对象形式 {a:'1'}
-
queryString 是查询参数的字符串形式 ?a=1
-
pathWithQuery 是带查询参数的路径,一般不用
-
request 是请求对象
-
response 是响应对象
代码逻辑
语法
1. `这种字符串`里面可以回车
2. '这种字符串'里面要回车只能用\n表示
逻辑
-
每次收到请求都会吧中间的代码执行一遍
-
用
if else判断路径,并返回响应 -
如果是已知路径,一律返回200状态码
-
如果是位置路径,一律返回404状态码
-
content-Type表示内容的[类型/语法]里面一般填text/css、html、javascript -
response.write(``)可以填写返回的内容 -
response.end()表示响应可以发给用户了,这个不能省略,如果省略了会出问题
后缀可有可不有
- 程序员不看后缀,只看文件的类型
注意事项
-
URL里的后缀啥用没有, y.css 不一定是css内容
-
content-Type才是决定文件类型的关键
HTTP总结
必须会什么知识
-
基础概念
-
如何调试(用的是Node.js,可以用
console.log/debugger调试) -
在哪查资料(用的Node.js,就可以看Node.js文档)
-
标准指定者是谁(HTTP规格文档:RFC 2612 有中文)
学习方法
-
CRM方法
-
C:抄文档,抄网上的。R:放在自己机器上运行成功。 M:加入一点自己的想法,重新运行
学习请求
格式
- 请求行
请求动词/ 路径加查询参数 协议名/版本号
- 请求头
host:域名或IP
Accept:text/html
content-Type:请求体的格式
- 回车
在请求体和请求头之间有一个回车
- 请求体
也就是post的内容
细节
-
请求动词有 GET/POST/PUT/PATCH/DELETE等,目前只掌握GET和POST
-
请求体在 GET请求时一般为空
-
文档为于RFC 2612 第五章
-
大小写不敏感,但最好找个标准照着写,因为JS的大小写敏感
-
开发者工具 Net work————Request Headers
学习响应
格式
- 状态行
协议名/版本号 状态码 状态字符串
- 响应头
Content-type:响应体的格式
- 回车
隔开响应头与响应体
- 响应体
细节
-
常见的状态码要掌握:200和404
-
文档位于 RFC 2612 第六章
用 curl 构造请求
-
控制台输入
curl -v http://127.0.0.1:8888 -
设置请求动词
-X POST全部大写
- 设置路径和查询参数
直接在URL后面加你想设置的路径或查询参数
但要注意锚点不会发送到服务器!!!
- 设置请求头
-H 'Name:Value' 或者 --header'Name:Value'想咋改就咋改
- 设置请求体
-d '内容' 或者 --data '内容'
用Node.js 读取请求
- 读取请求动词
request.method
- 读取路径
request.url 路径带查询参数
path 纯路径,不带查询参数
query 只有查询参数
- 读取请求头
request.headers['Accept']
- 读取请求体
比较麻烦,需要的时候查文档
用Node.js 设置响应
- 设置响应状态码
response.statusCode=200
- 设置响应头
respomse.setHeader('content-Type','text/html')
- 设置响应体
respose.write('内容') 可以追加内容
- 404也是一个页面,只是大部分网页不主动设置404页面,导致看到的都是浏览器默认的404页面
补充
-
console.log(调试大法)
-
debug 就是不断质疑自己的过程
-
不要总是觉得怎么样,直接console.log 验证
-
云服务器的操作
-
给自己设置的用户添加 sudo 权限
-
遇到特殊操作,在命令前面加上
sudo,请出 root超级用户。 -
需要输入当前用户的密码
-
Ctrl+A 可以快速回到当前命令的最前面,方便修改
-
sudo !!的意思是用sudo 执行之前一局命令
在云服务器安装Node.js
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt-get update
sudo apt-get install -y nodejs
node -v
npm -v
npx -v
sudo apt install git
一行一行复制安装Node.js 14
git clone https://github.com/BaiJingSama/node.js-test.git
cd nodejs-test
touch log
启动命令:node server.js 8888 > log 2>&1 &
把启动命令做成 start 文件
添加执行权限 chmod +x ./start
运行 sh ./start 得到一个进程号 pid
tail log 看 log 内容
kill -9 pid 可以关掉进程
killall node 可以关掉所有 node 进程
在bash上配置云服务器的Node.js 复制上面代码即可