HTTP协议

HTTP入门

 1.为什么要学HTTP?

我们绝大多数的web应用都是基于http来进行开发的,我们对web的操作都是通过http协议进行传输数据的;简单来说,http协议就是客户端和服务器交互的 一种通讯格式。

Http的诞生主要是为了能够文档之间相互关联,形成超文本可以互相传阅,可以说http就是web通信的基础

2.HTTP基础概念

我们学计算机网络的时候就知道,我们把计算机网络分层了5层,一般我们现在用的都是TCP/IP这么一个分层结构。

虽然官方的是ISO 提出的7层结构,但是仅仅是理论基础,在实际上大多人都是使用TCP/IP的分层结构

首先,我们先得知道,为什么我们要在计算机网络中分层次???

因为如果两台计算机能够相互通信的话,实际实现起来是非常困难操作的...我们分层的目的就是为了将困难的问题简单化,并且如果我们分层了,我们在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层。

如果需要改动设计的时候,我们只需要把变动的层替换即可,并不用涉及到其他的层次。这与我们程序设计中的低耦合是一个概念。HTTP协议是在最上层,也就是应用层。这是最贴近我们的程序员的层次。

3.网站通信过程

web通信的过程中,不仅仅是需要http协议的,还会涉及到其他的协议。

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

HTTP:产生请求报文数据(当我们对web页面进行操作的时候,就会产生http报文数据,请求对应的服务器进行响应)

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

IP协议:传输数据包,找到通信目的地址(ip协议把我们产生的数据包发送给对方,IP地址指明了节点被分配的地址,但ip地址会变换,我们可以使用ARP协议来将Ip地址反射为MAC地址,MAC地址是不会更改的,是网卡所属的固定地址;在找到通信目的地之前,我们是需要不断的中转的,这过程我们称作为:“路由中转”,我们并不知道路由中转了多少次的。因此是不能全面了解到互联网中的传输状况的。)

4.服务器请求的意图

我们如果开发过Web程序的话,我们知道常用的提交方式有POST和GET方法;我们也知道GET是用来获取数据的,POST是用来提交数据的。HTTP提供方法的目的就是为了告知服务器该客户端想进行什么操作。当HTTP是OPTIONS方法的时候,服务器端就会返回它支持什么HTTP方法。

5.HTTP是不保存状态的连接

HTTP是无状态的,也就是说,它是不对通信状态进行保存的。它并不知道之前通信的对方是谁。这样设计的目的就是为了让HTTP简单化,能够快速处理大量的事务,但是,我们经常是需要知道访问的人是谁,于是就有了Cookie技术了。

要是服务器端想要记住客户端是谁,那么就颁发一个cookie给客户端;客户端把Cookie保存在硬盘中,当下次访问服务器的时候,浏览器会自动把客户端的cookie带过去。就这样,服务器就能够知道是谁了。

6.持久连接

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

7.提升传输效率

在说明之前,首先我们要知道什么是实体主体,实体主体就是作为数据在HTTP中传输的数据。

一般地,实体主体可以等价为报文主体,报文主体是HTTP中的一部分。

我们如果不使用任何手段,服务器返回的数据实体主体是原样返回的。我们可以使用两种方式来提高传输效率,

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

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

我们如果在下载东西的过程中断了,按照以前我们是需要重新下载的,但是现在可以在中断中继续下载。我们可以使用到获取范围数据,这种叫做范围请求。这种请求只会下载资源的一部分。比如我的图片下载到一半了,我们只需要下载另一半就可以组成一张完整的图片了。那么请求的时候请求没有下载的一部分即可。

8.常用状态码

2xx-一般是请求成功

200 正常处理

204 成功处理,但服务器没有新数据返回,显示页面不更新

206 对服务器进行范围请求,只返回一部分数据

3xx-一般表示重定向

301 请求的资源已分配了新的URI中,URL地址改变了。【永久重定向】

302 请求的资源临时分配了新的URI中,URL地址没变【临时重定向】

303 与302相同的功能,但明确客户端应该采用GET方式来获取资源

304 发送了附带请求,但不符合条件【返回未过期的缓存数据】

307 与302相同,但不会把POST请求变成GET

4xx-客户端出错

400 请求报文语法错误了

401 需要认证身份

403 没有权限访问

404 服务器没有这个资源

5xx-服务器出错

500 内部资源出错了

503 服务器正忙

9.服务器与客户端之间的应用程序

首先要说的是,一个HTTP服务器可以拥有多个站点,也就是说:HTTP下可以配置多个虚拟主机。当用户访问不同主机的时候,实际上都是访问同一台HTTP服务器。

在客户端和服务器中还有一些用于通信数据转发的应用程序:

-代理

可以用来缓存数据,当代理缓存了数据以后,客户端就可以直接用代理获取数据,可以用来对网站进行访问控制,获取访问日志记录

-网关

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

-隧道

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

10.HTTPS简述

HTTP在安全上是不足的

通信使用明文【没有加密过内容的】,不验证通信方身份,无论是客户端和服务器,都是随意通信的,无法证明报文的完整性【别人监听后,可以篡改】

我们一般在上网时,使用抓包工具就很容易获取到HTTP请求的信息了,这是TCP/IP在网络通信中无法避免的。

假设我们对HTTP报文进行加密了, 那也仅仅是是内容的加密。别人获取到了HTTP内容了,即使无法破解HTTP内容,还是能够篡改的。

我们最好就是使用SSL建立安全的通信线路,就可以在这条线路上进行HTTP通信了。

其实HTTPS就是披着SSL的HTTP...

HTTPS使用的是共享密钥和公开私有密钥混合来进行加密的。由于公开私有密钥需要太多的资源,不可能一直以公开私有密钥进行通信。因此,HTTP在建立通信线路的时候使用公开私有密钥,当建立完连接后,随后就使用共享密钥进行加密和解密了

对于认证方面,HTTPS是基于第三方的认证机构来获取认受认可的证书、因此,可以从中认证该服务器是否是合法的。

而客户端方面则需要自己购买认证证书、这实施起来难度是很大的【认证证书需要钱】。

所以,一般的网站都是使用表单认证就算了,这是用得最广泛的客户端认证了

所以相比HTTP,HTTPS 传输更加安全

(1) 所有信息都是加密传播,黑客无法窃听。(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。(3) 配备身份证书,防止身份被冒充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值