Http协议 讲解

HTTP协议

作为学习前端开发的开始,我们从HTTP协议入手来了解!

我们先了解一下以下几点问题:

1.什么是互联网?

互联网就是物理连接的介质加上互联网的协议所组成的!

2.互联网建立的目的?

打破数据传输的地域性限制,那什么是数据传输的地域性限制呢?

数据传输的地域性限制,就是我想要远在首都的科学家刚得到的最新数据,那我就需要远途过去拿着一个电脑硬盘去拷贝,这就是地域性的限制,如果距离太远呢,例如你需要美国的一些最新数据,难道你还要开飞机专门过去拿么?

3.什么是上网?

用户上网的过程即浏览器向服务端发送请求,然后将服务端主机的文本文件下载到本地显示的过程。而浏览器与服务器之间走的HTTP协议

我们学习前端开发就是为了编排好一个文本文件存放到服务端主机,然后提供给浏览器下载显示的,所以在学习前端开发前,我们必须先研究HTTP协议

HTTP协议讲解

1.HTTP协议

  • HTTP协议,全称Hyper Text Transfer Protocol(超文本传输协议)
  • HTTP协议是用于从(WWW:World Wide Web,简万维网 )服务器传输超文本到本地浏览器的传送协议。

2.HTTP协议的工作架构:

  • HTTP协议工作于B/S或者是C/S(我们几乎是不会去一C/S架构去搭建的)架构之上
  • 浏览器作为HTTP的客户端通过URL向HTTP服务端也就是WEB服务器发送请求Request
  • Web服务器根据接收到的请求后,向客户端发送响应信息Response。

3.HTTP协议是基于什么通信协议来传递数据的呢?

  • HTTP协议是基于TCP/IP协议去传递数据的。
  • img

HTTP/1.1协议详解:

HTTP/1.1是HTTP协议的第三个版本,是目前主流的HTTP协议版本

HTTP 1.1引入了许多关键性能优化keepalive连接请求流水线chunked编码传输字节范围请求

1、Persistent Connection(keepalive连接)

#1、长连接
允许HTTP设备在事务处理结束之后将TCP连接保持在打开的状态,以便未来的HTTP请求重用现在的连接,直到客户端或服务器端决定将其关闭为止。
#2、HTTP1.1对比HTTP1.0?
在HTTP1.0中使用长连接需要添加请求头 Connection: Keep-Alive,而在HTTP 1.1 所有的连接默认都是长连接,除非特殊声明不支持( HTTP请求报文首部加上Connection: close )

img

2、Pipelining(请求流水线)

A client that supports persistent connections MAY "pipeline" its requests (i.e., send multiple requests without waiting for each response). A server MUST send its responses to those requests in the same order that the requests were received.

支持持久连接的客户端可以“流水线”它的请求(即,发送多个请求而无需等待每个响应)。服务器必须按照与收到请求的相同顺序来向这些请求发送响应。

img

3、chunked编码传输

#1、介绍
该编码将实体分块传送并逐块标明长度,直到长度为0块表示传输结束, 这在实体长度未知时特别有用(比如由数据库动态产生的数据)

#2、传输编码和分块编码
当响应头里包含Transfer-Encoding: chunked,代表分块编码,会把「报文」分割成若干个大小已知的块,块之间是紧挨着发送的,这样就不需要在发送之前知道整个报文的大小了,也意味着不需要写回Content-Length首部了。

#3、分块传输的应用
当使用持久连接时,在服务器发送主体内容之前,必须计算出主体内容的大小,然后放到响应头里(Content-Length:主体的字节数)发送给客户端。
如果服务器动态创建内容,可能在发送之前无法知道主体大小,分块编码就是为了解决这种情况:服务器把主体逐块发送,说明每一块的大小。服务器再用大小为0的块作为结束块。,为下一个响应做准备,此时响应头里便不再需要Content-Length了

除非使用了分块编码Transfer-Encoding: chunked,否则响应头首部必须使用Content-Length首部。 摘自HTTP/1.1:https://tools.ietf.org/html/rfc2616

#4、关于Content-Length首部:
如果请求头包含Accept-Encoding': 'gzip',则服务端会将内容压缩后返回,内容的Content-Length长度是压缩后的长度,
如果请求头不包含Accept-Encoding': 'gzip',
服务器就不会采取gzip压缩,同时我司服务器设定也不进行分块编码。所以返回响应头的Content-Length首部是必须的,但是这个值的大小肯定是没有进行过压缩的文件大小。 

4、字节范围请求

HTTP1.1支持传送内容的一部分。比方说,当客户端已经有内容的一部分,为了节省带宽,可以只向服务器请求一部分。该功能通过在请求消息中引入了range头域来实现,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码206(Partial Content)

HTTP 1.1还新增了如下特性:

#1、请求消息和响应消息都应支持Host头域
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。因此,Host头的引入就很有必要了。

#2、新增了一批Request method
HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT方法

#3、缓存处理
HTTP/1.1在1.0的基础上加入了一些cache的新特性,引入了实体标签,一般被称为e-tags,新增更为强大的Cache-Control头。 

View Code

前端HTML 与HTML 标签

努力学习!
原文地址:https://www.cnblogs.com/Orange-YXH/p/13846790.html