计算机网络(Web和HTTP)

Web就是万维网,因为Web的出现,给我们带来了极大的便利,足不出户而知天下。当用户需要时,就能得到所想要的内容,网络之大各式各样的资源都有。
    web的应用层协议就是有名的HTTP(超文本传输协议),通常被称为web的核心。HTTP的实现需要有一个服务端和一个客户端,通过交换HTTP报文进行会话。HTTP定义了这些报文的结构格式以及进行报文交换的方式。
    web页面是由对象组成的,一个对象只是一个文件,诸如HTML文件、一个JPEG图形、一个java小程序或一个视频片段,它们通过一个URL地址寻址。多数web页面含有一个HTML基本文件,以及多个引用对象,例如说一个web页面包含一个HTML基本文件和5个JPEG图形,那么这web页面就有6个对象。每个URL地址由两部分组成,一个是主机名(域名),一个是对象的路径。www.cloudker.com/img/logo.png中,www.cloudker.com就是主机名(域名),而/img/logo.png就是对象的路径。web浏览器就是实现HTTP的客户端,360安全浏览器、搜狐浏览器等,web服务器实现HTTP的服务器端,它用于存储web对象。
    我们从上面已经知道HTTP定义了HTTP协议进行会话的报文结构格式及交换方式,浏览器向服务器发出该页面中所包含对象的HTTP请求报文,服务器收到请求并用包含这些对象的HTTP响应报文进行响应。
    HTTP使用TCP作为它的支撑运输协议,HTTP客户首先发起一个与服务器的TCP连接。客户会从它的套接字发送HTTP请求报文和接收HTTP响应报文,服务器也会从头它的套接字接收HTTP请求报文和发送HTTP响应报文。web服务器总是打开的,具有一个固定的IP地址。
    HTTP有两种连接方式,非持续连接和持续连接。在非持续连接情况下,每请求一个对象就需要建立一次TCP连接,即该连接并不会为其他的对象而持续下来。HTTP客户在端口号80发送一个到www.cloudker.com的TCP连接,HTTP客户通过它的套接字向该服务器发送一个HTTP请求,报文中包含了对象的路径。HTTP进程通过它的套接字接收HTTP请求报文,在一个响应报文中封装对象,并通过其套接字接收发送响应报文。TCP确认客户已经完整地收到响应报文,中断TCP连接。HTTP客户接收响应报文,TCP连接关闭。

    持续连接的HTTP在响应后一直保持TCP连接打开,一个web页面可以用单个持续TCP连接进行传送,可以一个接一个地发出对对象的请求,如果一条连接经过一定时间仍未被使用就会自动关闭该连接。

    这是一个简单的HTTP请求报文,首先该报文仅有5行,第一行为请求行,其后为首部行。请求行有3个字段,方法字段、URL字段、HTTP版本字段,方法字段取不同的值,包括GET、POST、HEAD、PUT和DELETE,绝大多数方法字段都是用GET方法。URL字段是请求对象的路径,图例中HTTP版本为1.1。首部行指明了对象所在的主机。
    第三行是告诉服务器不希望麻烦地使用持续连接,它要求服务器在发送完被请求的对象后关闭该连接。第四行是用来指用户代理,即向服务器发送请求的浏览器的类型。最后一行表示用户想要该对象的法语版本,如果服务器中有这样的对象的话,否则,服务器将发送它默认版本。

计算机网络(Web和HTTP)_第1张图片

上面是一个简单的响应报文,有三个部分一个是初识状态栏,6个首部行,然后是实体体。实体体部分是报文的主要部分,即发送的对象本身(data data...)。状态栏有3个字段:协议版本字段、状态码和相应状态信息。状态行为第一行,指示服务器正在使用HTTP/1.1,并且一切正常。第二行是首部行,告诉客户发送完报文后将关闭该TCP连接。Date首部行指示服务器产生并发送该响应报文的时间,Server首部行指示该报文是由一台Apache Web产生的,Last-Modified首部行指示对象创建或者最后修改的日期和时间吗,这个首部行对既可能在本地客户也可能在网络缓存器服务器上的对象缓存非常重要。Content-Type首部航指示了实体体中的对象是HTML文本。
    接下来让我们看一下神图:

计算机网络(Web和HTTP)_第2张图片

计算机网络(Web和HTTP)_第3张图片

分别是HTTP请求报文的通用格式和HTTP响应报文的通用格式。

看到Cookie有些人第一反应就是黑阔技术里的Cookie欺骗技术,这是技术是干什么的呢?让我们带着对知识的渴求一起来了解。
    上节我们讲HTTP服务器是无状态的,也就是说不会去存储、记忆上次进行的事务处理,如果需要用到上次的信息就需要重传。然而一个web站点通常希望能够去识别用户。当一个客户端向一个站点请求连接,完成操作后就会关闭TCP连接,如果需要再交互数据就要再建立新的连接,也就是无法跟踪上次的对话。因此,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。然而在这节我们并不讨论session,而是讨论Cookie。
    Cookie技术有四个组件:
    ①在HTTP响应报文中有的一个cookie首部行;
    ②在HTTP请求报文中有的一个cookie首部行;
    ③在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
    ④位于web站点的一个后端数据库

计算机网络(Web和HTTP)_第4张图片

    这是我利用浏览器抓包工具,在访问云客联盟论坛时抓的包,我们能了解,这是一个HTTP请求报文。其中带着cookie信息,我看了访问同一站点时其他的请求报文,cookie信息都是一样的。cookie其实是一一段小文本信息,当客户端第一次访问一个web站点时,该站点就会分配一个cookie伴随响应报文发给客户端(浏览器),这些cookie是由浏览器进行管理的,在下次访问该站点的时候HTTP请求报文中就会带着之前分配的cookie。那么cookie有什么用呢?每个站点的cookie用途都不一样,有的用来记录用户状态,有的是用来限制用户访问,有的是用来将内容与用户身份联系起来。cookie可能会记录着用户按什么顺序、在什么时间访问了哪些网页,有些商务站点还用来记录用户购买的物品列表。总之,cookie的根本目的就是为了使web站点能够记住你,起到标识用户的作用。
    各站点的cookie一般都是有限期限的,例如规定浏览器上的cookie只保存到2015/4/15 20:00,一般来说站点不可能无限的永久的存储每个用户的cookie。cookie是不可跨域名的,也就是说,每个站点有每个站点的cookie,我们不可能用百度分配的cookie去访问搜狐。
    有些站点利用cookie避免多次输入密码,cookie能够标识用户,黑阔内有一种叫cookie欺骗技术,就是利用一些方法获取他们的cookie,如果是管理员cookie,我们就能进入后台,然后上传木马拿下webshell。cookie一般都会利用md5进行加密,但是cookie欺骗技术并不需要去破解它,而是直接用一些cookie利用工具直接登入站点,这样就能冒充受害人的身份。
    
    web缓存器又叫代理服务器,它是能够代表初始web服务器来满足HTTP请求的网络实体。web缓存器有自己的磁盘存储空间,能存储最近请求过的对象的副本。可以配置用户的浏览器,使得用户的所有HTTP请求首先指向web缓存器,假设我们现在的浏览器指向了一个web缓存器,我们访问网站时就会被定向到该web缓存器。浏览器建立一个TCP连接到该web缓存器,并向web缓存器中发送HTTP请求,web缓存器会先检查自己本地是否有用户请求的对象的副本,有的话就发送HTTP响应报文。如果没有,它就会在这个缓存器到服务器的TCP连接上发送一个HTTP请求,初始服务器(原服务器)就会进行HTTP响应。当web缓存器收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器进行HTTP响应。可见web缓存器既做服务端又做客户端。
    建个web缓存器有什么用呢?有人会觉得,这样的话还不如直接向原服务器发送请求报文。web缓存器能够大大减少对客户请求的响应时间,web缓存器可以减少一个机构的接入链路到因特网的通信量。在校园网、企业机构内部都会有web缓存器,这样可以提高响应时间,如果该没有web缓存器,该web站点刚好处于忙碌状态,那响应延时会很长,如果有web缓存器,缓存器中也刚好有请求的对象,那么响应速度会非常快。除此之外,因为是在局域网内的通信,用到的因特网通信量不会很大。可能有人会疑惑了,既然请求的对象在web缓存器,那就不用向原web服务器发送请求报文了,应该是不会产生任何因特网通信量的。带着问题引入我们今天最后一个内容,条件GET方法。
    矛盾:web缓存器中存储的对象,在原web服务器可能已经被修改,这样的话客户的浏览器得到的会是旧的(过时)的对象副本。
    有矛盾,强大的计算机人员肯定会有解决办法,于是出现了一种叫条件GET方法的机制。
    当客户的浏览器向web缓存器请求一个对象副本的时候,web缓存器首先会检查本地是否有该对象副本,若没有该对象副本,web缓存器就会进行····(上面已经有说明),当web缓存器接收到原web服务器发送的响应报文,在存储的时候还会存储最后修改日期,一个星期后,如果用户又请求同一个对象,可能该对象在原web服务器上已经被修改了,所以缓存器通过发送一个条件GET执行最新检查。如果没有被修改过,原web服务器会发送一个响应报文,但是响应报文中不包括该对象。若被修改过,原web服务器被修改过就会重新发送一次。

你可能感兴趣的:(计算机网络)