3.HTTP协议
1)HTTP
超文本传输协议(HyperText Transfer Protocol,HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)请求和应答的标准。
2)报文
在HTTP请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,并且要遵守规定好的格式。
查看报文信息:右键网页审查元素→控制台 ’ Network ’ →刷新浏览器→ ’ Name ’ 、’ Headers ’ 、中可查看
3)请求报文
① 请求方式(Request Method):
Ⅰ. GET 请求数据(表单默认行为)
Ⅱ.POST 发送数据
② 请求方式 req.method :用来查看是哪种请求方式
③ 请求地址 req.url:获取请求地址,可以根据客户端输入的地址在服务端做出响应
④ 请求报文信息 req.headers[' 某个信息']:获取对应请求报文信息,没有 ' [ ] ' 获取的是全部报文信息
图解:
4)响应报文
Ⅰ. HTTP状态码:
① 200 请求成功
② 404 请求的资源没有被找到
③ 500 服务器端错误
④ 400 客户端请求有语法错误
Ⅱ. 内容类型:
① text/html
② text/css
③ application/javascript
④ text/plain
⑤ image/jpeg
⑥ application/json
Ⅲ. res.writeHead(状态码,{响应报文信息}):
修改状态码;报文信息 content-type 为内容类型,charset=utf8 后防止乱码,可写中文了
图解 :
5)请求参数
Ⅰ. GET请求参数
参数被放置在浏览器地址栏中,例如:http://localhost:3000/?name=zhangsan&age=20(?表示后面是请求的参数,就是额外携带的数据;这些额外携带的参数是以 = 号分隔的键值对;它们以 & 符号隔开多个参数)
② 使用 req.url 获取额外携带数据
③ 引入用于处理url地址的 url内置模块
④ 并使用url模块的parse方法,解析成返回一个对象的url信息:url.parse(req.url,true)
④ PowerShell中得到query对象,url.parse(req.url,true).query
④ 又因为下面的判断语句需要用到 ' pathname ' 这个属性,则需要使用对象的解构函数:let { query,pathname } = url.parse( req.url,true )
④ 而之后的 req.url 可以用 pathname 代替
图解:
Ⅱ. POST请求参数
① 设置表单名name
② 请求参数在请求报文中,打开控制台查看
③ post事件是通过事件的方式接收的,有 ' data ' 和 ' end ' 两个事件
④ 由于 post 传递过来的参数很多,所以需要声明一个空变量用来拼接这些参数
⑤ params 表示当前传递过来的参数
⑥ 使用 querystring 系统模块的 parse 方法将参数转换为对象格式
图解:
Ⅲ. 路由
路由是指客户端请求地址与服务器端程序代码的对应关系。简单的说,就是请求什么响应什么。
-
步骤:
1、引入系统模块 http 2、创建网站服务器 3、为网站服务器对象添加请求事件 (1) 获取客户端请求方式 req.method 返回的是大写的方法,要用 toLowerCase() 方法转换成小写 (2)获取客户端请求地址 url 有个 parse解析方法,解析 req.url 为对象,对象中有 pathname 的属性 放着地址 (3)判断请求方式和请求地址 end 中为 中文,需要设置报文内容类型和防乱码 4、监听端口 5、给服务器提示表运行成功
图解:
Ⅳ. 静态资源
服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。
-
具体见static文件目录的app.js文件。
-
步骤:
*新建 static文件目录,在里面新建public文件夹用于放置静态资源 *static文件下创建js文件开始编写代码 1、创建网站服务器 2、获取用户的请求路径 3、把用户的请求路径转换成真实的物理路径(实际的服务器硬盘路径) 由于不同系统分隔符不一样需要用到 路径拼接 ① 先找到当前文件(app.js)的绝对路径,__dirname获取当前文件所在绝对路径 ② 再拼接上所有静态资源文件的目录,最后拼接上用户输入的请求地址 ③ 使用系统模块 path 的 join 方法,它可以帮我们拼接路径的分隔符 4、读取路径 需要先引入 fs 系统模块,再使用 它的 readFile 方法 5、设置当用户请求路径为 ' / ',即用户没有输入地址时返回仍为首页 6、读取路径代码中设置响应内容类型 响应时,页面请求外连接文件,例如css的link引用、js的src引用等 mime 第三方模块可以根据当前的请求路径分析出所需的资源类型,然后返回资源类型 ① 到命令行下载 mime模块, 然后重新执行 app.js 开启服务器 ② 引入mime模块并使用 mime 的 getType 方法获取类型