HTTP就是这么简单

我们访问一个网页的时候,往往是通过域名来访问的,而计算机通信只认的是我们的主机地址(192.168.xxx.xxx),因此,当我们输入域名的时候,需要DNS把域名解析成主机来进行访问。

HTTP:产生请求报文数据

当我们对Web页面进行操作的时候,就会产生HTTP报文数据,请求对应的服务端进行响应。

TCP协议:分割HTTP数据,保证数据运输

TCP协议采用了三次握手的方式来保证数据的准确运输,在运输的数据的时候,发送标识过去给服务器,服务器也返回标识给客户端,而客户端收到消息后再次返回标识给服务器。这样一来就保证了数据运输是可靠的。

IP协议:传输数据包,找到通信目的地地址。

IP协议把我们的产生的数据包发送给对方,IP地址指明了节点被分配的地址,但IP地址可能会变换,我们可以使用ARP协议来将IP地址反射为MAC地址。MAC地址是不会更改的,是网卡所属的固定地址。

在找到通信目的地之前,我们是需要不断的中转的,这过程我们称作为:“路由中转”,我们并不知道路由中转了多少次的。因此是不能全面了解到互联网中的传输状况的。

接下来就离我们比较远了,属于硬件相关的了,也就是链路层和物理层。以后复习到计算机网络的时候再来补充吧!我们网页上请求数据就是上边这么一个流程。告知服务器请求的意图我们如果开发过Web程序的话,我们知道常用的提交方式有POST和GET方法我们也知道GET是用来获取数据的,POST是用来提交数据的。其实HTTP协议中还支持着其他的方法,比如:Input、Delete、OPTIONS很多这样的方法。而由于常用,于是我们也可能仅仅知道GET和POST方法了。HTTP提供方法的目的就是为了告知服务器该客户端想进行什么操作。当HTTP是OPTIONS方法的时候,服务器端就会返回它支持什么HTTP方法。当然了,现在RESTful盛行,也就是充分利用了HTTP协议的这些方法。HTTP是不保存状态的协议HTTP是无状态的,也就是说,它是不对通信状态进行保存的。它并不知道之前通信的对方是谁。这样设计的目的就是为了让HTTP简单化,能够快速处理大量的事务!但是,我们经常是需要知道访问的人是谁,于是就有了Cookie技术了。

要是服务器端想要记住客户端是谁,那么就颁发一个cookie给客户端

客户端把Cookie保存在硬盘中,当下次访问服务器的时候,浏览器会自动把客户端的cookie带过去。

就这样,服务器就能够知道这家伙是谁了。

持久连接在HTTP1.0的时候,每一次进行HTTP通信就会断开一次连接。如果容量很少的文本传输是没有问题的。但是如果我们访问一个网页,该网页有非常多的图片。一个图片就算上一个HTTP请求了。那么在中途中就不断地建立TCP连接、获取图片、断开TCP连接。这样是非常浪费资源的,因此在HTTP1.1版本,就是持久连接了。一次HTTP连接能够处理多个请求。持久连接为“管线化”方式发送成为了可能:在一次HTTP连接里面,不需要等待服务器响应请求,就能够继续发送第二次请求。提升传输效率在说明之前,首先我们要知道什么是实体主体

实体主体就是作为数据在HTTP中传输的数据

一般地,实体主体可以等价为报文主体,报文主体是HTTP中的一部分。我们如果不使用任何手段,服务器返回的数据实体主体是原样返回的。我们可以使用两种方式来提高传输效率

使用压缩技术把实体主体压小,在客户端再把数据解析

使用分块传输编码,将实体主体分块传输,当浏览器解析到实体主体就能够显示了。

我们如果在下载东西的过程中断了,按照以前我们是需要重新下载的,但是现在可以在中断中继续下载。我们可以使用到获取范围数据,这种叫做范围请求!这种请求只会下载资源的一部分。

比如我的图片下载到一半了,我们只需要下载另一半就可以组成一张完整的图片了。那么请求的时候请求没有下载的一部分即可。

常用的状态码简述2XX一般是请求成功200 正常处理204 成功处理,但服务器没有新数据返回,显示页面不更新206 对服务器进行范围请求,只返回一部分数据3XX一般表示重定向301 请求的资源已分配了新的URI中,URL地址改变了。【永久重定向】302 请求的资源临时分配了新的URI中,URL地址没变【转发】303 与302相同的功能,但明确客户端应该采用GET方式来获取资源304 发送了附带请求,但不符合条件【返回未过期的缓存数据】307 与302相同,但不会把POST请求变成GET4XX表示客户端出错了。400 请求报文语法错误了401 需要认证身份403 没有权限访问404 服务器没有这个资源5XX服务器出错了500 内部资源出错了503 服务器正忙服务器与客户端之间的应用程序首先要说的是,一个HTTP服务器可以拥有多个站点,也就是说:HTTP下可以配置多个虚拟主机。当用户访问不同主机的时候,实际上都是访问同一台HTTP服务器。在客户端和服务器中还有一些用于通信数据转发的应用程序

代理

可以用来缓存数据,当代理缓存了数据以后,客户端就可以直接用代理获取数据

可以用来对网站进行访问控制,获取访问日志记录

网关

能够提供非HTTP请求的操作,访问数据库什么的

隧道

建立一条安全的通信路径,可以使用SSL等加密手段进行通信。

HTTP首部简述HTTP请求报文HTTP请求报文:在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分组成。

请求行【描述客户端的请求方式、请求的资源名称,以及使用的HTTP协议版本号

首部字段【描述客户端请求哪台主机,以及客户端的一些环境信息等】

一个空行

实体内容【服务器向客户端回送的数据

首部字段例子:

Accept: text/html,image/* 【浏览器告诉服务器,它支持的数据类型】

Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种字符集

Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的压缩格式

Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的语言环境】

Host: www.it315.org:80【浏览器告诉服务器,它的想访问哪台主机】

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,缓存数据的时间】

Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的---反盗链

8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,浏览器的内核是什么】

Cookie【浏览器告诉服务器,带来的Cookie是什么

Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】

Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】

HTTP响应报文HTTP响应报文:在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分组成。

一个状态行【用于描述服务器对请求的处理结果。

首部字段【用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据】

一个空行

实体内容【服务器向客户端回送的数据

状态行:

格式: HTTP版本号 状态码 原因叙述

状态行:HTTP/1.1 200 OK

状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类

首部字段例子:

Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个页面

Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】

Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式

Content-Length: 80 【服务器告诉浏览器回送数据的长度】

Content-Language: zh-cn 【服务器告诉浏览器,服务器的语言环境】

Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,回送数据的类型

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】

Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要定时刷新

Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器以下载方式打开数据

Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块方式回送】

Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie

Expires: -1【服务器告诉浏览器不要设置缓存

Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存

Pragma: no-cache 【服务器告诉浏览器不要设置缓存

Connection: close/Keep-Alive 【服务器告诉浏览器连接方式】

Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】

对于HTTP首部这一部分是非常庞大的一个章节,知识点也很多,我就没有一一去记录了。用到的时候再查吧。我看的是《图解HTTP》。HTTPS简述HTTP在安全上是不足的

通信使用明文【没有加密过内容的】

不验证通信方身份,无论是客户端和服务器,都是随意通信的

无法证明报文的完整性【别人监听后,可以篡改】

我们一般在上网时,使用抓包工具就很容易获取到HTTP请求的信息了,这是TCP/IP在网络通信中无法避免的。假设我们对HTTP报文进行加密了, 那也仅仅是是内容的加密。别人获取到了HTTP内容了,即使无法破解HTTP内容,还是能够篡改的。我们最好就是使用SSL建立安全的通信线路,就可以在这条线路上进行HTTP通信了。其实HTTPS就是披着SSL的HTTP...HTTPS使用的是共享密钥和公开私有密钥混合来进行加密的。由于公开私有密钥需要太多的资源,不可能一直以公开私有密钥进行通信。因此,HTTP在建立通信线路的时候使用公开私有密钥,当建立完连接后,随后就使用共享密钥进行加密和解密了对于认证方面,HTTPS是基于第三方的认证机构来获取认受认可的证书、因此,可以从中认证该服务器是否是合法的。而客户端方面则需要自己购买认证证书、这实施起来难度是很大的【认证证书需要钱】。所以,一般的网站都是使用表单认证就算了,这是用得最广泛的客户端认证了。如果文章有错的地方欢迎指正,大家互相交流。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208G0IWZY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券