计算机网络——应用层(一)

HTTP协议

HTTP全称是超文本传输协议,字面意思上来看,就是用来传输超文本这个东西的。那么,我们可能需要知道‘超文本’究竟是什么东西呢?其实在WEB应用网络上传输的所有数据都可以被称为超文本,在内容上可以是二进制或者八进制的数据,但在表现形式上可以是我们能够理解的文本,比如英文或者中文。具体来讲,可以分为请求报文和响应报文。因为这份协议是老外发明的,所有自然这两份报文的表现格式就是用英文的形式。但我们可以在响应报文中的数据段中加入我们熟悉的中文。所谓的WEB应用网络并不是平常我们所说的网络,而是基于客户端/服务器端的应用网络,简单来讲,就是你用浏览器上网所使用的网络,而我们称在这个网络中所传输的数据为超文本。

谈到网络就肯定要涉及数据传输,如果一个网络中没有进行数据传输,那么这个网络是没有意义的。HTTP协议干的就是你在WEB应用网络上传输数据时所用遵循的一些规范。举个例子,你是客户端浏览器,你想要访问某个页面,比如‘www.baidu.com’这个页面。当你在浏览器中输入这个网址并按回车键之后,你的浏览器应用程序会生成一份报文,我们称之为——请求报文。这份报文都会报些什么东西呢?我们来看这样一份报文:
GET /index.html HTTP/1.1
Host: www.baidu.com
Connection: close
User-agent: Mozilla/63.0
Accept-language: UTF-8
这份报文第一行我们称之为请求行,其余行我们称之为首部行
请求行显示了我们的请求方法为‘GET’,请求的内容是‘index.html’,遵循的是HTTP/1.1协议
首部行中的Host显示了我们要请求的主机域名;Connection为close则规定请求相应完成后服务器可以自行关闭TCP连接;User-agent则说明了我们是使用哪个浏览器来访问百度的,这里代表的是火狐浏览器;Accept-language则规定我们想要得到什么编码格式的响应文档,这里是UTF-8。

那么我们可能会问,为什么浏览器要生成这份报文呢?这份报文有什么用呢?其实这就是HTTP协议起作用的地方。HTTP协议规定,你的客户端浏览器如何想要和服务器打交道,那就得有这么一份报文才行,而且报文还得按它要求的格式来,就像上面的格式一样。因为只有这样服务器才能知道你要干嘛,如果大家的浏览器都不遵循同一个协议,今天你说你的请求方式叫GET,明天他说他的请求方式叫MAKE,后天又有个人说他的请求方式叫WANT,那岂不是乱套了。服务器哪知道你们究竟都要干嘛,所以大家都遵循一个协议,定个规矩,请求方法统一都叫GET,而这个协议我们就称之为HTTP协议,当然HTTP协议中你的请求报文还包含很多其他的东西。

浏览器生成的这份报文通过套接字接口传输给服务器,因为传输就跟HTTP协议没什么关系了,而是跟TCP协议有关。套接字接口就相当于HTTP到TCP的一扇门,通过这道门你才能把应用层的请求报文送到传输层中的TCP协议当中去。话不多说,传输层不是本文的重点。当服务器通过网络接收到你的请求报文后,它同样也会发回给你一份报文,我们称之为响应报文。这份响应报文是怎么写的呢?我们来看:
HTTP/1.1 200 OK
Connection: close
Date: Fri 2 Nov 2018 13:22:20 GMT
Server: Apache/2.2.3
Content-Type: text/html
(data data data …)
这份报文第一行我们称之为状态行,接下来那几行我们称之为首部行,而最后面那个(data)我们称之为实体或者响应体。而这些内容同样也是HTTP协议规定的,关于具体内容的具体含义我这里不展开讲,有兴趣可以查阅相关资料,其实看名字也能知道个大概。服务器通过它那边的套接字接口把这份报文传输给我们,然后我们的浏览器就可以解析这份报文,从而形成我们所能看到的网页。这基本上就是我们按回车之后,在网络上浏览器和服务器所发生的一切。

写到这,我突然对我所定义的超文本持保留意见。可能超文本仅仅只是响应报文中响应体那部分或者请求报文中用POST方式所提交的请求体那部分,并不是整个请求报文或者响应报文。这里我还不清晰,有兴趣的朋友可以查阅有关资料。

讲到这,我的HTTP协议讲解就已经结束了,你可能还不是很清晰,因为我也不是很清晰,这只是目前为止我的理解而已,但如果这博文能稍微帮助到你对于该协议理解,我就很满足了。一言以蔽之,HTTP协议是客户端浏览器与服务器打交道所必须遵循的协议,这份协议规定了你需要通过报文来进行相互应答,以及规定了你的报文所应当遵循的格式。

猜你喜欢

转载自blog.csdn.net/weixin_43379478/article/details/83653990