还记得几年前刚刚工作的我每天上班的第一件事就是打开浏览器,浏览一些军事,财经方面的新闻。那个时候对TCP/IP还不是很清楚,为什么明明是TCP协议要和IP一起,他们为什么客户端连接服务端需要指定ip和端口号,服务端连接客户端的时候不用指定端口号呢?为什么要三次握手?为什么TCP能保证消息的可靠性。我在问自己这是为什么,没想到几年过去了比起几年前更加迷惑!哈哈开玩笑的。那么当我们通过浏览器发送一次网络请求的时候到底发送了什么事情呢?
当我们开发web应用时,首先会在浏览器上输入http://ip地址,端口号和资源目录,这种连接叫做URL,其实浏览器还可以处理像FTP,MAILTO等协议,当然这里咱们还是要关注下HTTP协议,毕竟是web居多。下图为不同协议的URL(URL(uniform resource locator)以及各个部分含义
HTTP协议
FTP协议
file协议(本地文件)
那我们现在知道了URL的大体概念之后,咱们可以进行第一个步骤
1.浏览器解析URL:
以http://user:password@localhost:9009/dir/name.html为例
1.1.1:http代表协议名称
1.1.2://后面user:password代表的服务器的用户名和密码(可省略大部分情况都是//直接跟服务器域名)
1.1.3 @后面是服务器域名和端口号 (端口号可以sheng'l)
1.1.4端口号后面/之后的是文件目录(可省略)
刚刚1.1.4说文件目录可以省略,像这样http://localhost:9009/没有文件目录的URL访问的是什么,很简单这需要服务器上设置一个默认文件, 一般来讲都叫index.html或者是default.html,这样写http://localhost:9009 也是允许的。我们都知道/代表的是web服务器的root目录,那这样的请求呢,
http://localhost:9009/name 是不是说一个叫name的文件名字呢?实际上这个name不一定是文件名称,也有可能是目录,因为操作系统不允许同时存在name的目录和文件名。
2.URL在解析之后,因为我们使用的是HTTP协议,浏览器会生成HTTP消息