计算机网络知识点总结2

HTTP

请求报文

GET /index.html HTTP/1.1\r\n
Host: www-net.cs.umass.edu\r\n
User-Agent: Firefox/3.6.10\r\n
Accept: text/html,application/xhtml+xml\r\n Accept-Language: en-us,en;q=0.5\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: ISO-8859-1,utf-8;q=0.7\r\n Keep-Alive: 115\r\n

Connection: keep-alive\r\n

第一行为请求行由3个字段组成:方法、URL、HTTP版本

方法包括:GET、POST、HEAD、PUT、DELETE。绝大部分HTTP请求报文使用GET方法,当浏览器请求一个对象时,使用GET方法,在URL字段填写的是请求对象,例/somedir/page.html

第二行及以下的行叫做首部行

host:对象所在的主机,该处信息主要提供给Web代理高速缓存要求

user-agent:用户代理,服务器可以根据用户代理来给提供指定对象的不同类型的版本

connection:让浏览器高速服务器是使用持续连接还是发送完请求就关闭连接,此时是持续连接

使用POST方法时的实体体,一般用户在提交表单时,会使用POST方法,实体体中包含了要发送的内容,用户使用搜索引擎时提供搜索关键字时,实体体中就包含了输入的关键字。

注意:向服务器发送数据并不只是POST方法可以,用GET方法也是可以的,只不过这个时候输入的数据将会URL中,www.somesite.com/animalsearch?monkeys&banana,上述的URL中的'?'后面的monkeys&banana就是用户输入的数据。但是,用户账号密码的表单不要使用GET方法来发送给服务器,不然在浏览器上方的URL中就会显示所输入的账号信息。

HEAD方法类似GET方法,服务器收到HEAD请求,会使用HTTP报文进行响应,但是不返回请求的对象。一般用于开发者进行调试。

PUT方法用于上传对象到服务器。

DELETE方法用于删除指定的对象。

HTTP响应报文

HTTP/1.1 200 OK\r\n
Date: Sun, 26 Sep 2010 20:09:20 GMT\r\n

Server: Apache/2.0.52 (CentOS)\r\n Last-Modified: Tue, 30 Oct 2007 17:00:02

GMT\r\n
ETag: "17dc6-a5c-bf716880"\r\n Accept-Ranges: bytes\r\n
Content-Length: 2652\r\n
Keep-Alive: timeout=10, max=100\r\

Connection: Keep-Alive\r\n
Content-Type: text/html; charset=ISO-8859-1\r\n

\r\n

data data data data data ...

第一行为状态行,状态行由协议版本,状态码和对应的短语组成。

状态码和对应的短语

  • 200 OK:请求成功,信息在返回的响应报文中;
  • 301 Moved Permanently:请求的对象已被永久转移,新的URL定义在响应报文的Loacation
  • 400 Bad Request:一个通用差错代码,指示该请求无法被服务器理解
  • 404 Not Found:被请求的文档不在服务器上
  • 505 HTTP Version Not Supported:服务器不支持请求HTTP报文所使用的协议版本

接下来就是首部行,Date行表示服务器发送该响应报文的时间;Server行表示该报文由Apache Web服务器产生,类似于请求报文中的User-Agent;Connection表示连接保持;其余不再阐述。

首部行中Last-Modified字段指示了对象创建或者是最后修改的时间,这个字段对于缓存在本地还是代理服务器上的对象十分重要

最后面就是实体体,实体体部分是TCP响应报文的主要部分,包含了所请求的对象本身。

HTTP文本格式特点带来的优缺点

  • 这使得HTTP这个协议十分简单,十分易于解释信息,易于人的理解阅读,在编码上没有什么问题,让数据长度变得可变。
  • 但是这也存在一个明显的缺陷,那就是没有那么高效。很多协议都是使用二进制数据类型,像一个数字12345678,字符串就要使用8个字节,但是将其看做是一个整型数据类型,那就仅需4个字节。平时使用的过程中需要对字符串进行语法上的分析,以及非文本内容需要进行编码处理。

cookie

为了解决HTTP是无状态的这个问题,提出了cookie,服务端可以通过请求首部中的cookie字段来区分用户。浏览器会保存cookie,而在服务器的数据库中也会保存cookie。一开始用户访问一个服务器,服务器的发送的响应报文中会有一个set-cookie的字段在首部行中,用户将会以其中的信息作为自己的身份标识符。后续服务器发送的响应报文都将会和往常一样。

cookie可以用于身份的认证,购物网站,推荐系统。

第三方cookie

cookie允许网站能够熟悉你,你或许也要提供名字和邮箱甚至更多信息给网站。第三方cookie可以跨多个网站跟踪你,例如:只要你访问了一个网站,后续你将会有看见很多与其相关的广告。

第三方cookie是由用户当时所访问的域以外的域创建的cookie,主要用于跟踪和在线广告目的。

那么那些网站是如何创建第三方cookie的呢,通常是在打开这个网页时还需要向第三方服务器发送请求,所请求的文件根据用途不同而不同,可以是我们看到的广告图片或者是跟踪像素(用户完全看不到)。

例如,如果第三方是Google DoubleClick之类的广告服务,则请求广告素材,即访问者看到的实际广告。DoubleClick标记可以允许放置第三方Cookie。广告标记如下所示:

<a href="ad.doubleclick.net/some-other-parameters-specific-to-this-ad" target="_blank" rel="noopener"><img src="ad.doubleclick.net/the-extension-to-the-creative"></a>

加载网页时,上述广告标记也将加载,并且将向ad.doubleclick.net/the-extension-to-the-creative发送请求以检索素材并同时向用户分配Cookie时间。

不同的第三方可能会从其Web服务器请求不同的文件,然后将它们发送回浏览器。

HTTP的性能

页面的加载时间PLT是一个十分重要的衡量指标,其影响因素有网页的内容、使用的协议、网络性能。

希望达到的目标

对于用户而言:下载快、高可用性。

对于服务器而言:能够让用户体验好,同时让服务器的负载压力小

对于网络而言:能够尽可能避免网络拥堵

如何提高PLT

  1. 减小页面大小来达到传输更快:让页面中的图片更小,压缩。
  2. 改变HTTP协议,使其能够更好地利用网络带宽:通过改用持续连接以及流水线。
  3. 改变HTTP协议来避免重复传输:cache以及网络代理服务器。
  4. 让所请求的内容距离客户端更近:CDNs技术。

改进HTTP/1.0非持续连接

如图所示,在HTTP/1.0中,一个请求的响应时间=3RTT+文件传输时间

与目标服务器建立多个TCP连接 

并发的请求和响应,不考虑请求的先后顺序。

注意:这个方案存在一个巨大的问题 ,每个客户端都和服务器建立多个连接,将会给服务器带来巨大的负担。

持续连接外加流水线(HTTP/1.1)

 Caching(Web cache or proxy server)

因为访问的局部性,我们可以使用缓存caching。而实际情况来看,缓存的效果非常好,人们访问的内容很大部分具有重复性,但是也有很多不重复的请求。但是现在有一个趋势,内容都是动态的,网页内容都是定制化了,这大大减弱了缓存带来的收益,同时还有音频内容是特例,无法缓存的。

Web缓存器/代理服务器就是能够代表初始服务器来满足HTTP请求的网络实体。代理服务器的磁盘中会保存最近请求过的对象的副本。用户可以配置浏览器使得所有请求首先指向代理服务器。

在浏览器配置了代理服务器的情况下,整体流程为:1、浏览器和代理服务器建立TCP连接;2、向代理服务器发起HTTP请求;3、代理服务器查看本地是否有副本;4、若有则返回副本,若无则向初始服务器发起HTTP请求,并将返回的对象保存在本地并返回给用户。

代理服务器在这个过程中既充当了server还充当了client。

代理服务器一般都是由ISP提供的,代理服务器能够有效减轻服务器的压力,同时减轻网络的通信的负担。

条件GET

缓存可以有效减小响应时间,但是存在一个问题就是存放在缓存中的对象可能是陈旧的。因此,HTTP协议提供了条件GET机制,在方法为GET的请求报文中,在首部行中加入一行If-Modified-Since,那么这个请求报文就是条件GET。

请求报文中的If-Modified-Since字段应该和上一次收到的响应报文中的Last-Modified字段的值一样。

在用户向代理服务器请求对象时,代理服务器会向初始服务器发送一个条件GET检查对象是否过期,如果没有过期,代理服务器将会收到代号为304 Not Modified的响应报文,报文中将并没有所请求的对象,表明对象并没有过期,随后代理服务器即可转发该副本给用户。

CDN内容分发网络

CDN通过冗余的方法,在各地部署服务器,并且服务器中的静态资源相同。

用户通过域名来访问静态资源,CDN能够让DNS服务器给用户解析出距离用户最近的服务器的IP地址。

我们知道DNS记录中有A、NS、CNAME、MX类型,如果一个域名对应记录的数据类型为CNAME,那么DNS服务器将会返回一个权威域名服务器的主机名给本地DNS服务器,后续本地DNS服务器还会根据返回来的主机名,向其询问。

而CDN就是利用了这样的原理,许多网页的域名在DNS服务器上的记录中的数据类型均为CNAME,将会返回一个权威域名服务器的主机名,而这个服务器就是CDN服务商设置的CDN专用DNS服务器,这个服务器会根据用户的IP确认地理位置并为其分配最近的服务器的IP地址。

HTTPS

我们已知HTTP不安全。在HTTP中密码是通过BASE64编码加密,然而这种加密方法现在已经可以被破解还原了。

因此HTTP的基础上运用SSL进行加密。我们已经SSL就是安全套接字层,这其实是在应用层上实现安全性的。

用户在访问一个web服务器时,发起一个安全的HTTPS请求,那么服务器就会返回经过CA认证的数字证书,这个证书中存在着公钥,随后用户即可用公钥进行加密信息的哈希值从而实现数字签名,服务器通过自身掌握的私钥和签名来判断数据是否被篡改。

HTTP/2

在HTTP/1.1中我们已知在一个TCP连接中实现了流水线形式的多次发送请求。

但是其中还是有一个问题需要解决,就是服务器需要以FCFS的顺序发送响应报文,这其实和操作系统中FCFS的进程调度算法存在一样的问题,一些请求是小的对象如果排在大的请求对象后面就要等很长的时间。如果等待过长会导致用户误以为请求报文丢失了,进行重传。

HTTP/2让服务器发送对象给客户端更加灵活,服务器是以请求报文所请求的对象来给特定的优先级,根据优先级来决定发送顺序。并且服务器不再是直接发送给客户端所请求的对象,而是会将所请求的对象分割为多个帧,然后以一个帧一个帧的发送回去。

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值