一.HTTP什么?
字面上的意思就是HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,请注意这这是字面上的意思!
二.HTTP用在哪里?
http协议最常用的地方就是在我们的浏览器中,你可能会说?谁说的http在浏览器中,我怎么没看见。
其实,http协议最常用的也就是浏览器与服务器之间的通信啦!在哪里呢?就在我们的浏览器地址栏中,因为浏览器最常用的协议就是http,只不过它被我们的浏览器隐藏了。
自从http1.1版本发布之后,还有一个用得多的地方就是我们的多线程下载,你可能听说过IDM下载软件,它就是一个典型的http多线程下载软件
三.当我们输入URL之后,这其中的过程是怎样的?
首先,当我们输入URL之后,浏览器会先查找我们本地的hosts文件,如果是windows系统,则是C:\Windows\System32\drivers\hosts,如果是linux系统,则是在/etc/hosts中。当浏览器发现我们的域名存在hosts中时,就会指向我们hosts中相对于的IP,这种用法常常用于在本地调试。
当我们的域名不存在hosts中的时候,我们的浏览器就会根据我们计算机的网络配置,通过DNS地址,去查询相应的IP,查询成功后,域名服务器就会返回我们需要的IP。
得到IP之后,浏览器会根据我们默认的端口号去查找到对应的主机。http默认端口号为80端口,浏览器也将其省略了!
地址组成
(http://)hostname(:80)/URL
OSI七层模型和TCP/IP五层模型
3.1客户端是如何找到服务器主机的?
首先,http协议是一个应用层的协议,其他的应用层协议还有smtp,ftp,telnet等等。http会被封装成TCP报文,会被添加上源端口和目的端口,然后进一步被封装成IP报文,加上目的IP地址,然后会被数据链路成封装成帧,并加上相应的序号,进一步到物理层,物理层会将帧编程字节流,这样,就能够在物理线路中传播了。当我们所以的帧到达目的网络后。通过由下到上的解包。注意,这里不是主机,而是目的网络,然后会根据我们的ARP协议,结合主机的MAC地址找到相应的主机。
3.2客户端和服务器之间的具体过程是怎样的?
首先,浏览器会发送http请求。http请求内容由三部分组成:
1,请求行;一般包含有请求的方法,请求的URL地址以及HTTP协议版本号。常用的请求方法有,POST,GET,DELETE,HEAD,PUT,这5个是我们平时使用的最常用的,POST用于增加数据,GET用于请求获取数据,DELETE用于删除数据,PUT用于更新数据。
2.请求头,也叫消息报头,请求头一般会包含需要告知服务器我客户端的状态等等,比如客户端能够解析的文件类型Accept,能够解析的字符编码Accept-Charset,支持的语言Accept-Language,以及是否支持压缩等等。
3,请求正文,通常请求正文为一个空白行。 之后,通过3.1中提到的寻找服务器的方法找到服务器的位置。 服务器通常也由好几个部分组成:负载均衡,LVS(Linux虚拟服务器),反向代理服务器,WEB服务器。 1.负载均衡的作用是将到达服务器的请求进行合理的分配,将他们分别转到不同的服务器上,以减轻服务器的压力。 2.LVS则是一个服务器集群,由于每一种服务器能够处理的请求有限,所以我们要使用集群来解决访问量过大的问题,比如国内的百度,新浪,网易等门户网站都使用了LVS。 3.反向代理,则是在服务器端建立一个代理服务器,由代理服务器去WEB服务器上代替我们寻找资源,然后将资源返回给我们。常常用于防攻击策略、放抓取、SSL、gzip、自动性能优化以及高速缓存等。 4.WEB服务器则是我们网站的实际存在位置,web服务器将我们的网站部署,向请求的浏览器提供请求的。常用的又Apache,Tomcat以及nodejs。 资源。 当我们的WEB服务器监听到我们的HTTP请求时,会对http请求的信息进行解析,得到相应的URL路径和请求的方法。因为我最近在使用nodejs做开发,这里就使用nodejs来举例 nodejs实际上是一个javascript的运行环境,node通过http模块来提供http服务。nodejs有一个名叫路由控制器的中间件,当URL地址和方法传到node的时候,路由控制器会进行解读, 将得到的URL地址和index.js路由文件进行匹配,当匹配到相同的路径是,就会调用模板引擎对静态文件,模型进行加工,得到需要返回的数据。 这时候,WEB服务器就会对返回的信息按照http协议进行封装。 消息响应,即返回给浏览器的数据,通常也有三部分组成:状态行,消息报头,响应正文。 1.状态行。状态行中主要包含了HTTP协议版本,以及返回的状态码。常用的状态码有2XX,3XX,4XX。点击这里查看具体 2.消息报头。主要包含有返回的数据类型,内容长度等信息 3.响应正文,这里就包含我们服务器返回的正文数据。 当响应体到达浏览器的时候,浏览器引擎会对响应内容进行渲染,渲染成功后,就可以在浏览器中显示了!