终于到了第三篇,这一篇我们重点学习目标是express关于http请求的api对象
在使用express搭建web服务器的时候,大部分工作都是从请求对象开始,从响应对象结束,这两个对象起源于Node,而Express对其进行了拓展。
1.Url的组成及其说明
url 组成分为 协议 主机名 端口 路径 查询字符串 信息片段
用 http:// www.bind.com:3000/about?test=1&q=grunt#history 这个url做实例进行说明
1)协议
组成:http://
协议决定如何处理传输请求 我们主要是处理 http 和 https
当然常见的协议还有 ftp 和 file
2) 主机名
组成:www.bind.com
.com : 顶级域名
www :子域名
主机名为服务器的标识,运行在本地或者本地网络的服务器可以简单的表示(如localhost),而Internet环境下,主机名通常以一个顶级域名(TLD)结尾,比如.com 或者.net 。另外还会有子域名作为主机名的前缀 子域名可以是任何形式,通常以www最为常见,子域名通常是可选的
3)端口
组成:3000
每一台服务器都有一系列的端口号 有一些端口号比较特殊 ,比如 80 和 443 端口。如果省略端口号,则默认 80 端口负责http传输,而 443 端口负责https传输。
而如果不使用 80 端口或者 443 端口,就需要一个大于1023的端口号,通常选择比较容易记忆的端口号,比如3000 8080等
4)路径
组成:/about
URL中影响应用程序的第一个组成部分通常是路径(在前端开发中,前端开发的框架常常使用路径部分作为前端路由)
路径是应用中页面或者其他资源的唯一标识
5)查询字符串
组成:?test=1&q=grunt
查询字符串是一种键值对组合,它以?开头,并且键值对之间以&隔开,所有的名称和值必须是以URL编码的,JavaScript提供了一个嵌入式的函数encodeURIComponent来进行处理,例如,空格被+号替换,其它特殊字符被数字型字符替换
6)信息片段
组成:#history
信息片段(或称散列) 被严格限制在浏览器中使用,不会被传递到服务器,现在前端框架实现的单页面应用以及AJAX复应用非常普遍,而一开始信息片段只是用于给浏览器控制文档的锚点标志指定的部分
2.关于http请求的请求体和响应体
重点说明几个比较重要的报头内容
1)互联网媒体类型
内容消息报头非常重要,如果没有它,客户端很难判断如何渲染接受到的内容。内容类型报头就是一种互联网媒体类型。由一个类型,一个子类型以及可选的参数组成。例如text/html;chartset=UTF-8说明类型是text,子类型是html,字符编码是utf-8。
我么常见的Content-Type,Internet media type 和MIME type是可以互换的
2)请求体
除了请求报头之外,请求还有一个主题,一般GET请求没有主体内容,但是POST请求是有的
对于post请求的媒体类型 常见的媒体类型是 application/x-www-form-urlencoded 是键值对的简单编码,使用&来进行分隔
如果post请求需要支持文件上传,则媒体类型是multipart/form-data,这是一种更为复杂的格式
最后 前后端常用的ajax请求,常见的使用application/json application/xml
3)参数
其实参数这个词可以有很多的解释,因为在一次请求中,参数可以来自查询字符串,请求体,请求cookies或者指定的路由参数。而在node应用中,请求对象的参数方法会重写所有的参数,因此我们不需要深究,但是这会带来一些问题,比如在一个post请求中,如果一个来自查询字符串的参数名和请求体的参数名重名了,那我们会取哪个作为真正的参数名呢,这或许会带来一些困扰