HTTP协议

1989年3月,HTTP诞生

三项WWW构建技术:

超文本标记语言  HTML

文档传递协议     HTTP

统一资源定位符  URL

HTTP 1.1 是目前最主流的HTTP协议版本

TCP/IP最重要的是分层: 应用层、传输层、网络层和数据链路层

 

IP网际协议位于网络层

ARP协议就是一种用于解析地址的协议,可以根据通信方的IP地址反查出对应的MAC地址

TCP位于传输层,提供可靠的字节流服务,字节流服务可以把大块数据分割成报文段为单位的数据包进行管理。可靠是可以把数据准确可靠的传给对方。

为了准确把数据送到目标处,TCP采取三次握手:发送方发送SYN标志的数据给对方,对方回一个SYN/ACK标志的数据包,最后发送端再传回一个ACK标志的数据包,握手结束。如果中间有一个过程中断,TCP协议会再次用同样的顺序发送相同的数据包。

域名解析的DNS服务:

和HTTP协议一样位于应用层

URI用于字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),可见URL是URI的子集。

绝对URI、绝对URL以及相对URL

相对URL是指从浏览器中基本的URI处指定的URL

 

RFC:制定HTTP协议技术标准的文档(并不是所以程序都符合RFC)

HTTP协议用于客户端和服务器端的通信,HTTP协议能够明确区分哪一端是客户端,哪一端是服务器端。

请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

       请求报文

 

 

       响应报文

 

      

HTTP是无状态的:不会对通信状态进行保存,所以引入cookie技术

告知服务器意图的HTTP方法

       GET:获取资源

              请求已经被URI识别的资源,指定的资源经服务器端解析后返回响应内容

       POST:传输实体主体

              虽然GET方法也可以传输实体的主体,但一般不用GET方法,而是用POST方法

       PUT:传输文件

              就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

              但是HTTP/1.1的PUT方法不带验证机制,所以存在安全性问题,因此一般Web网站不用该方法。

       HEAD:获得报文首部

              HEAD和GET方法一样,只是不返回报文的主体部分,可以用于缺人URI的有效性及资源更新的日期时间等。

       DELETE:删除文件

              按请求URI删除指定的资源,HTTP/1.1中本身和PUT方法一样不带验证,所以一般不用DELETE方法

       OPTIONS:询问支持的方法

              查询针对请求URI指定的资源支持的方法(向服务器查询可以支持那些方法)

       TRACE:追踪路径

              让Web服务器将之前的请求通信返回给客户端的方法

              发送请求的时候在Max-Forwards 首部字段中填入数值,每经过一个服务器端就将该数字减1,数值减到0时,停止继续传输,最后接到该请求的服务器返回状态码200 OK的响应。

              TRACE容易引发XST攻击,所以平常不怎用。

       CONNECT:要求用隧道协议链接代理

              隧道协议需要TCP协议,主要使用SSL(安全套接层)和TLS(传输层安全),把通信内容加密后经网络隧道传输。

             

持久连接节省通信量

       在HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接。

      

持久连接:

       在HTTP/1.1和一部分HTTP/1.0想出了持久连接,只要一端没有明确提出断开连接,则保持TCP连接状态。

      

管线化:

       从前是发送请求之后收到响应才能发送下一个请求,但是管线化技术出现后,不需要等待响应就可以直接发送下一个请求。

       可以并行发送请求

      

使用Cookie的状态管理

       HTTP是无状态协议。cookie通过在请求和响应报文中写入cookie信息来控制客户端状态

 

请求行:包含请求的方法,请求URI和HTTP版本

状态行:结果的状态码,原因短语和HTTP版本

首部字段:包含请求和响应的各种条件和属性的各类首部

其他:包含HTTP里RFC里未定义的首部(比如cookie)

报文:HTTP通信的基本单位,8位组字节流组成,通过HTTP通信传输

实体:请求和响应的有效载荷,其内容由实体首部和实体主体组成。

压缩传输用到内容编码:常用的有gzip、compress、deflate和identity

分割发送的分块传输代码:会分成很多块,每一块都会用十六进制来标记块的大小,实体的最后一块会使用“0(CR+LF)"来标记。

发送多种数据的多部分对象集合:

       采用MIME,多用途因特网机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。

       multipart/form-data 是在表单文件上传的时候使用的

       multipart/byteranges 状态码206 响应报文包含了多个范围内容时使用

获取部分内容范围的请求

       指定下载的实体范围: 可以从之前下载的中断处恢复下载

       Range来指定资源的byte范围,比如 Range: bytes=5001-10000

       针对范围请求,响应会返回状态码206,如果无法响应则会返回200 ok

内容协商返回最合适的内容

       内容协商:比如同一个页面有英文版有中文版

       服务端驱动协商、客户端驱动协商和透明协商      

       状态码告知从服务器端返回的请求结果

常用的有14种状态码

       2xx 成功

              200    ok

              204  服务器接收的请求正确处理,但是返回的响应报文中不含实体的主体部分。

              206   Partial Content 客户端进行了范围请求

       3xx 重定向

              301  永久重定向,请求的资源被分配了新的URI

              302 临时重定向,表示请求的资源被分配了新的URI,但是是临时的

              303  请求资源存在另外一个URI,应该使用GET方法获取请求的资源

                     303和302功能相同,但303明确表示客户端应该采用GET方法获取资源

                     当301、302、303响应状态码时,几乎所以浏览器都会把POST改成GET

              304  附带条件的请求,资源已找到但是不符合条件要求。虽然是3xx开头的,但是和重定向没有关系。

              307  临时重定向,会遵循浏览器标准,不会从POST变成GET

       4xx 客户端错误

              400 表示请求报文中存在语法错误

              401 发送的请求需要HTTP认证,如果之前进行过1次请求,则表示用户认证失败。

              403 请求资源的访问被服务器拒绝了

              404 服务器上没有资源

       5xx 服务器错误

              500 服务器端执行请求的时候发生了错误

              503 服务器处在超负荷或者正在进行停机维护

       // 补充:不少状态码的响应都是错误的,比如web应用程序内部发生错误,状态码依然返回 200 OK

用单台虚拟主机实现多个域名

       同一台服务器为多个用户使用,即使物理层面只有一台服务器,使用虚拟主机可以假想有多台服务器。

通信数据转发程序:代理、网关、隧道

       代理:服务器和客户端中间起到转发功能。

              可以级联多台服务器

              缓存代理:代理转发响应的时候,会先将资源的副本保存在代理服务器上,当代理再次接收到相同资源请求时,就可以不从源服务器哪里获取资源。

              透明代理:不对报文做任何加工的代理类型

       网关:转发其他服务器通信数据的服务器,接收到客户端请求的时候,就好像自己拥有源服务器一样对请求进行处理

              客户端和网关之间会加密,而且网点可以连接数据库。

       隧道:相隔特别远的服务器和客户端进行中转,并且保持双方通信连接的应用程序

              会使用SSL进行加密通信,隧道本身不会去解析HTTP请求。

保存资源的缓存:

       缓存服务器是代理服务器的一种,可以理解为代理转发从服务器返回的响应时,代理服务器会保存一份资料的副本。可以避免多次从源服务器获取资源。

       缓存的有效期限:对有效性有影响,若缓存失败,则缓存服务器会从源服务器上获取新资源。

客户端缓存:

浏览器缓存如果有效就不需要向服务器端请求相同的资源了,当缓存器过后会向源服务器缺人确认资源的有效性。若失效,则会再次请求资源。

原文地址:https://www.cnblogs.com/oaoa/p/14723514.html