Http协议

HTTP协议

一、HTTP协议简介

1、一些基本概念

1)协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
2)HTTP协议:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

2、URI和URL的区别

URI:是uniform resource identifier,统一资源标识符,用来唯一标识一个资源。例如:file://a:1234/b/c/d.text 表示资源在a主机下的1234端口下的b目录下的c目录下的d.txt文件。强调资源。
URI的三个组成部分:
1)访问资源的命名机制。如:file
2)存放资源的主机名。如:a:1234
3)资源自身的名称,由路径表示,着重强调于资源。如:/b/c/d.txt
URL:是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。强调路径。
URL的三个组成部分:
1)协议
2)存有该资源的主机IP地址
3)主机资源的具体地址

二、HTTP协议的特点

1)简单快速。(客户端向服务端请求服务时只需要传递请求方法和路径就能获取响应的数据。)

2)无连接。(限制每次连接只处理一个请求,服务端处理完请求后会受到客户端的应答然后才断开连接。采用这种方式可以节省传输的时间。)

3)无状态。(该协议对之前的请求无记忆能力,如果想再次请求需重新提交request。有可能导致传输量巨大。)

三、request/response

打开浏览器,在地址栏中输入URL,然后我们就看到了网页。原理是怎样的呢?

我们输入完URL之后,浏览器给Web服务器发送了request请求,服务器收到浏览器发送的request请求就会做相应的处理,生成相应的response,然后发送给浏览器,浏览器解析response中的HTML文档,这样就能看到了平常所看到的网页。我们的request还有可能是经过我们的代理服务器的,这样才会到达我们的Web服务器。代理服务器实际是网络信息中转站,最主要的功能是提高我们的访问速度,因为大多数的代理服务器都有缓存功能。当要访问前一个请求时可以直接在代理服务器中获取,而不用再去请求Web服务器。

request

在这里插入图片描述

  • 请求方法,协议版本号
  • 告知请求的主机和端口号
  • 告知服务端客户端使用的浏览器的名称和版本
  • 浏览器的特征。无需关注,非通用
  • 告知浏览器可以接受的媒体类型(*/*通配符,表示浏览器可以接受任意类型数据)
  • 告知服务器是从哪连接的
  • 声明浏览器的编码方法,是否支持压缩等
  • 浏览器声明自己可以接收的语言(支持的语言和字符集GBK等)
  • 和response中的ETag联合使用,客户端请求发ETag服务端(返回304:直接使用本地缓存文件不用在服务器获取数据)告知客户端是否可以直接使用本地的。
  • 浏览器缓存页面的最后修改时间发送给服务端

在这里插入图片描述

  • 协议和状态码
  • HTTP的稳定信息
  • 生成response的具体时间
  • 资源最后修改的日期
  • 标志服务端信息的标志位
  • 指定浏览器不能使用本地缓存的时间
  • 缓存机制
  • keep-alive表示网页打开之后客户端和服务端传输数据的tcp连接不会关闭,如果客户端再次访问该网页会使用这个已经建立好的tcp链接,不会重新开链接,对使用网络资源的极大提升。

四、http协议中比较容易混淆的知识

1、http1.1/http1.0区别

1)http1.0产生背景

超文本传输协议(HyperText Transfer Protocol)伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络的应用层。

2)http1.0所做的优化

带宽:现阶段已经解决
延迟:1、浏览器阻塞:浏览器对于同一个域名,同时只能有4个连接
延迟:2、DNS查询:浏览器需要知道目标服务器的IP才能建立连接。
延迟:3、建立连接:三次握手

3)http1.1/http1.0具体区别

1、缓存处理 http1.1比1.0引入了更多的缓存控制策略。
2、带宽优化及网络连接的使用 1.0请求时服务端会把所有的资源传回,1.1请求是请求头中有range允许只请求资源的一部分。1.0不知持断点续传功能。
3、Host头处理 因为一台服务器上有多个虚拟主机所以1.0是支持host
4、长连接 http1.1引入长连接

4)http1.1和http1.0存在的问题

1、http1.0在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间。用1.1
2、http1.1在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。(无法保证数据的安全性,通过HTTPS保证数据的安全性)
3、http1.1在使用时,header里携带的内容过大,在一定程度上增加了传输的成本。
4、虽然http1.1支持了keep-alive,来弥补多次创建连接所产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力。

2、http1.1/http2.0区别

HTTP 2.0 的出现,相比于 HTTP 1.x ,大幅度的提升了 web 性能。在与 HTTP/1.1 完全语义兼容的基础上,进一步减少了网络延迟。
HTTP/2: the Future of the Internet (https://http2.akamai.com/demo)这是 Akamai 公司建立的一个官方的演示,用以说明 HTTP/2 相比于之前的 HTTP/1.1 在性能上的大幅度提升。 同时请求 379 张图片,从Load time 的对比可以看出 HTTP/2 在速度上的优势。
多路复用 (Multiplexing)
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
众所周知 ,在 HTTP/1.1 协议中 「浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞」。
该图总结了不同浏览器对该限制的数目。
在这里插入图片描述
这也是为何一些站点会有多个静态资源 CDN 域名的原因之一,拿 Twitter 为例,http://twimg.com,目的就是变相的解决浏览器针对同一域名的请求限制阻塞问题。
而 HTTP/2 的多路复用(Multiplexing) 则允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
在这里插入图片描述
因此 HTTP/2 可以很容易的去实现多流并行而不用依赖建立多个 TCP 连接,HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上双向交换消息。
二进制分帧
在不改动 HTTP/1.x 的语义、方法、状态码、URI 以及首部字段…… 的情况下, HTTP/2 是如何做到「突破 HTTP1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量」的 ?
关键之一就是在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。
在这里插入图片描述
在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。
HTTP/2 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。
在过去, HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。
HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。
总结:
单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大,由于 TCP 连接的减少而使网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快

3、get/post方法的区别

get获取资源,post更新服务器上资源。
提交的数据 get放在URL的?之后,post会放在请求包的value中
提交数据的大小是否有限制 get请求的数据大小有限制,浏览器对URL的长度有限制。post提交的大小是没有限制的。
取得变量的值Request.QueryString vs Request.Form
安全问题 get方法有安全问题

4、cookie和session的区别

1)cookie:什么是cookie

Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊信息。(响应头里和request头里)
Cookie设置发送过程
在这里插入图片描述
cookie:工作原理
在这里插入图片描述
cookies 是用户身份的标识

2)session:什么是session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
session的工作原理
1、第一步当然是创建Session了
2、在创建Session的同时,服务器会为该Session创建唯一的Session id
3、在Session被创建之后,就可以调用Session相关的方法往Session中添加内容。
4、当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session。

3)区别

1、存放位置不同 cookie客户端 session服务器端
2、存取方式的不同 cookie中保存的是字符串 session可以存任何类型
3、安全性(隐私策略)的不同 session存储在服务器端不存在泄露风险,cookie有泄露风险
4、有效期上的不同 cookie会设置很长,session如果设置成-1,关闭浏览器即过期。
5、对服务器造成的压力不同 并发很多session会给服务端造成压力,客户端的cookie不会造成服务器压力,并发很多的情况选择cookie。

4、ETag/if-None-Match referer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值