HTTP协议是位于TCP协议之上的应用层协议,是应用进程之间通讯的一种协议。之所以称之为应用层协议,是因为它无需关心数据是通过什么方式到达对端的,在到达对方的应用程序之前都经历了什么,而只需要协商好使用的数据格式,保证一方可以解析出另一方的意图即可
这也是TCP/IP协议的真正目的,上层无需过度关心底层的实现细节
当用户在浏览器上输入一段网址后,主要经历了以下几个阶段
- dns解析,通过主机名找到主机ip地址
- 向对应ip地址和端口(默认是80)发送连接请求,服务器接收请求(三次握手)
- 浏览器发送HTTP请求报文段
- 服务器解析HTTP请求,生成响应报文段
- 浏览器解析HTTP响应,将资源信息显示在屏幕上
- 保持连接或者断开连接,取决于是否开启keep-alive
可以参考这篇博客,讲得比较详细从输入URL到页面加载发生了什么
URL格式
不管是否学过HTTP协议,总听过URL这个东西吧,平时输入在浏览器上的网址,自然就是URL本尊了。但是URI又是什么呢
URI学名叫统一资源标识符,它有两种形式,分别是URL和URN
URL,统一资源定位符是URI最常见的形式,它描述了资源在一台特定服务器上的特定位置。比如输入下面的网址时
http://www.balabala.com/index.html
实际上要访问的资源就是目标主机服务器当前目录下的index.html文件,而
http://www.balabala.com/image/hello.jpg
要访问的是目标主机服务器当前目录下的image子目录下的hello.jpg文件
通过URL可以准确定位一个资源的具体位置。但是如果服务器主机的内部目录有所改变,那么网站就要