HTTP协议(一):知识准备

来源:互联网 发布:nba2k18ios捏脸数据 编辑:程序博客网 时间:2024/06/15 17:07

web访问过程

  1. 客户端用户在浏览器中输入某个URL,如:http://www.baidu.com:80;
  2. 客户端OS进行DNS解析,获得目标服务器的IP地址;
  3. 客户端OS打开一个自由端口,向服务器发起连接请求;
  4. 经过3次握手,服务器确认与客户端的连接,打开一个自由端口与客户端通信;
  5. 客户端开始发送请求数据 – 以4KB(4096字节)为大小的一个又一个请求数据包【之所以是4KB,是最终的经验和技术得出的结果,数据链路层可以很好的保证这个大小处理,效率和速度都可以】,这个过程叫做发送请求 HTTP Request
  6. 服务器开始接收这些请求数据包,接收完成之后客户端会给个确认说自己发送完成了,比如一个12个包,服务器数了一下,果然12个,如果不够,告诉你哪个丢了,再重新发这个包(TCP的安全确认机制),接收完成后,开始处理接收到的数据(可能是保存在文件系统中,可能做数据库的增删改查,可能到其他服务器做一些访问)—
    Request Handing
  7. 服务器开始向客户端发送响应数据,依然是拆成4KB大小的数据包(可能是音频,视频,图片,文字等等,OS底层的网卡,OS等来拆成4KB的一个一个包)—
    发送 HTTP Response
  8. 响应之后,服务器会经过4次握手,断开连接,关闭各自的自由端口。

这里写图片描述


在客户端显示数据的时候,连接还在不在?这其实就和HTTP的版本有关了。早期的HTTP版本是不在了。HTTP1.1中有个Connect: Keep-Alive;

HTTP1.0: OfflineHTTP1.1: Keep-Alive //保持活跃,连接,请求完成后依旧保持几秒钟链接

也就是说HTTP1.0的时候,当浏览器开始渲染页面的时候,连接已经断开了,为啥呢?Offline?为了减少服务器压力,能够接受其他的请求,毕竟服务器又不是你一个人的资源,不能一直为你服务啊,所以响应之后,立马断开连接。但是到了HTTP1.1的时候,发现一个问题,服务器发来一个HTML文档,发送完之后立马断线,这会儿解析HTML文档,发现里面需要一篇CSS,一篇JS,若干jpg,还得请求啊,虽然HTTP1.0满足了让更多用户可以使用服务器,但是对于单个用户来说,那可不友好了,还得继续请求好多次,每次都是本文开头的那八个步骤,效率很低,这可不好。


预备知识

几种常见的MIME类型:

  1. image/jpeg —— .jpg
  2. image/jpeg——.jpeg
  3. text/html——.htm
  4. text/html——.html
  5. text/html——.xhtml
  6. application/json——.json
  7. application/xml—–.xml

虚拟主机技术:

公司花了几百万买了一台服务器,里面装了个Apache服务器,到头来只能运行一个网站,肯定不可以。肯定要运行很多个网站才能发挥服务器的用途啊,可是你一个主机,也就最多一两个网卡,一根网线,不能跑很多网站。这么多网站都用的是同一个IP地址啊,因为你只有一个网卡。服务器怎么区分你要访问哪个网站?在HTTP1.0里,一个服务器只能跑一个网站。到HTTP1.0+之后,虚拟主机,可以跑多个网站,多个网站用同一个IP地址,比如:www.xxyy.com , tts.xxyy.com,都是同一个IP地址。怎么区分??通过域名区分,不仅仅要知道IP,还要指定域名。域名要作为请求的一部分,发送个服务器。一个Apache里面可能跑了很多个网站,但你自己觉得好像独占了整个Apache。
例如新浪的IP地址是:218.30.13.36 ,但是,输入地址栏你什么也请求不到,你还得有具体域名,news.sina , sports.sina等等


HTTP协议的历史与标准

HTTP协议(Hyper Text Transfer Protocol)是TCP/IP协议栈/族 ‘应用层’的一个协议,用于在S和C(B)之间传送超文本内容(HTML、js、css、图片、音视频都是超文本内容)。


HTTP/0.9 : 1991年制定,缺陷严重,只支持GET方法,不支持MIME类型,很快被HTTP1.0取代;【MIME:多用途互联网邮件扩展,电子邮件指定的文件类型的扩展表达方式】


HTTP1.0 : 1996年制定,支持多种请求方法,支持多媒体,得到广泛应用,但是此版本的缺陷前面也说了,不支持持久连接(其实也就是几秒钟Keep-Alive),一个服务器只能跑一个网站 ,因此为了解决HTTP1.0的缺陷,产生了很多HTTP1.0+的版本,归纳如下。


HTTP1.0+ : 支持持久连接(Keep-Alive),虚拟主机,代理连接等,成为非官方的事实标准。


HTTP1.1 : 1999年指定,校正HTTP中的设计缺陷,性能优化,删除一些不好的性能。


HTTP-NG(HTTP/2.0):关注HTTP协议的性能优化,以及更强大的服务逻辑远程执行框架,研究工作仍在进行中。


列举HTTP1.1相较于HTTP1.0的改进:

  1. 支持持久连接(几毫秒到几秒);
  2. 虚拟主机技术(比如Apache配置中,一台服务器可以配置多个站点);
  3. 代理连接。

这里写图片描述


  1. URI : Unified Resource Identifier;
  2. URL : Unified Resource Locator , http://www.baidu.com/user=james
  3. URN: Unified Resource Name —> mailto: admin@acadine.com

看看URL的格式:

<scheme>://<user>:<pwd>@<host>:<port>/<path>;<params>?<query>#<frag>

主机/端口号

计算机中对外提供的服务器程序可以绑定到任何一个空闲端口上,从而实现监听客户端连接请求的任务。但实际中,常见协议都有默认的一些端口号。努力避免混用。

  1. FTP—–21—–文件上传下载;
  2. SSH—–22—–安全的远程登录;
  3. TELNET—–23—–远程登录;
  4. SMTP—–25—–简单邮件传输;
  5. DNS—–53—–域名解析;
  6. HTTP—–80—–超文本传输;
  7. POP3—–109—–邮件接收;
  8. HTTPS—–443—–加密传输的HTTPS。

原创粉丝点击