HTTP协议

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 方法获取类型
    
posted @ 2020-12-10 21:01  黛黛318  阅读(114)  评论(0编辑  收藏  举报