HTTP1.0/1.1/2.0 的起源和区别以及HTTP协议简介


前言

学习HTTP


一、什么是HTTP

  • 超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议
  • 常基于TCP/IP协议传输数据(HTML 文件, 图片文件, 查询结果等)。
  • Web内容都是存储在Web服务器上的,Web服务器使用的HTTP协议,且HTTP协议是可靠的,所以我们不用担心缺失,用于客户端和服务端之间的传递数据,发送和接收请求的响应。
  • HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
  • 互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

二、URI和URL

URI

每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。

这里第一个是HTTP的使用协议,下面的是访问的地址,再下一个是访问的资源
在这里插入图片描述

1. URL

对于URI有两种形式,分别为URL和URN,这其中我们比较常用的是URL,他也是分为三部分,类似上面的URI的格式。

我们在浏览器的地址栏里输入的网站地址就叫做URL ,URL也叫统一资源定位符(URI:统一资源标识符),URL描述了一台特定服务器上某资源的特定位置,也就是我们每个人家里的门牌号。它们可以明确说明如何从一个精确、固定的位置获取资源。

下面看个例子,比如我们一个URL链接:

https://www.weibo.com/AAA/index.jpg

那么该链接由下面的几部分组成:

  1. 协议:协议有多种,常见的有http以及https,mailto,ftp,上面的例子使用的就是https,该部分代表超文本传输的协议,后面是使用 // 来区分后面的域名部分。

  2. 域名:这里的域名是www.weibo.com,也可以使用IP地址作为域名使用,如192.168.1.5.一般用域名比较方便查看记忆,同时也便于隐藏我们的id,比较安全。

    • www:代表一个Web(万维网)服务器;
    • weibo.com/:这部分就是网页的服务器的域名,或站点服务器的名称;
    • AAA/:这部分是服务器上的子目录,就好像我们的文件夹;
    • Index.jpg:index.jpg是文件夹中的一张图片信息
  3. 端口:这里跟在域名后面的是端口部分,这部分是可有可无的。

2. URN

URI的第二种形式就是统一资源名(URN)。URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。


二、请求消息Request以及响应消息Response

所有的http报文都能分为两类,请求报文和响应报文,请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端

请求头报文

在这里插入图片描述
请求报文
请求报文主要是我们对服务器的操作,报文主要分为三个部分,方法,路径以及HTTP版本。每部分之间用空格来隔开。

  • 方法说明对服务器执行的操作(包括GET/POST/DELETE/PUT等)。
  • 路径就是跟在方法后面的哪一部分,就是资源所在的请求的URL。
  • 版本号就是最后面那一部分,说明该HTTP所使用的协议。

响应报文

在这里插入图片描述
响应报文
响应报文就是对我们请求报文的反馈结果,包含响应报文使用的HTTP版本、状态码,以及描述操作状态的文本形式的原因短语。同样都是用空格隔开。

下方还包含很多的信息,包括我们的token,时间,内容的格式和编码方式等等


三、状态码

状态码一般用来显示我们接口的状态情况的,我们通过返回的状态码就能里理解到大致发生的问题,对其进行处理。

  1. 1XX :信息,服务器收到请求,需要请求者继续执行操作
  2. 2XX:成功,操作被成功接收并处理
  3. 3XX:重定向,需要进一步的操作以完成请求
  4. 4XX:客户端错误,请求包含语法错误或无法完成请求
  5. 5XX:服务器错误,服务器在处理请求的过程中发生了错误

常见的有401:没有权限,404: 页面丢失 ,301:重定向, 200:响应成功,500:服务器错误等等

具体可以看:菜鸟-状态码


四、HTTP请求方法

HTTP和浏览器交互的方式常见有下面的几种,下面对应的是,一般来说对应增,删,改,查,但现在只用post就能完成全部了,我们来了解一下每一种,同时来区分一下post和get的区别。

PUT

  • 与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

DELETE

  • DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

POST

  • POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

GET

  • GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

OPTIONS

  • 它用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息,告诉我们所支持的方法。

TRACE

  • TRACE方法被用于激发一个远程的,应用层的请求消息回路。也就是使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的代理服务器的信息),由于该方法原样返回客户端提交的任意数据,因此有被用来进行跨站脚本(XSS)攻击的可能。

CONNECT

  • 把请求连接转换到透明的TCP/IP通道,也就是将服务器作为代理,让服务器代替用户去访问其他网页(说白了,就是翻墙),之后将数据返回给用户。我们在网页开发中基本不会用到~

POST和GET的区别

在这里中,我们需要区分的是POST和GET,实际上你会发现其实两者可以共通的,但为什么又出现两者呢?这里我们就要去了解一下他们的区别了。

  1. url可见性:
    get,参数url可见,请求的数据放在url上,其格式为:以?分割URL和传输数据,参数之间以&相连;
    post,url参数不可见,post把数据放在HTTP的包体内
  2. 传输数据的大小:
    get一般传输数据大小不超过2k-4k
    post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大
  3. 后退页面的反应:
    get请求页面后退时,不产生影响
    post请求页面后退时,会重新提交请求
  4. GET请求只能进行url编码,而POST支持多种编码方式
  5. GET只接受ASCII字符的参数的数据类型,而POST没有限制

那么看起来post好像很多好处呀,那么为什么还用get呢?因为get的效率高呀(不过其实现在基本都全用post的,实习中,公司的接口文档全是post的~~~)


五、HTTP的版本发展

HTTP/0.9

出现原因:

  • 学术交流,便于网络间传输HTML文件

特点:

  • 仅支持GET请求
  • 只有请求行,不支持请求头和请求体,没有返回信息
  • 只能传输纯文本内容
  • 典型的无状态连接

连接流程:

  • 客户端先根据IP,端口,和服务器三次握手,建立连接(TCP)
  • 连接成功后发送GET请求,获取文件
  • 服务器返回数据,传输完闭就断开连接

HTTP/1.0

  • 默认短连接(一次请求建议一次TCP连接,请求完就断开),但是增加了keep-alive关键字来由短链接变成长连接,就是请求报文里的字段指定Connection:keep-alive;支持GET、POST、 HEAD请求。

HTTP/1.1

出现原因

  • 解决HTTP1.0中没次连接通信都得建立一个TCP连接的问题,添加了一个持久连接的方法。

特点:

  • 默认长连接(一次TCP连接可以多次HTTP请求),也可以用请求报文Connection:close(默认:keep-alive)来把长连接变成短连接;
  • 新增了5种请求类型;
  • 引入rang头域,允许只请求资源的某部分,返回状态码206,方便开发者只有安排带宽和连接
  • 请求头部增加了Host字段,在HTTP1.0中认为每台服务器都绑定一个唯一的ip地址,因此在URL中并没有传递主机名,但是随着虚拟机技术的发展,可能在一台物理机器上存在多个虚拟主机,并且他们共享了一个ip地址,http1.1中请求消息和响应消息都支持host头域;以及使用CDN实现域名分片机制,减小整个资源的下载。
  • 增加了100,409等在内的一些状态响应码。
  • 引入了客户端cookis机制和安全机制

连接流程:

HTTP/2.0

出现原因

  • 通过多路复用来减少延迟,同时通过压缩HTTP首部字段,降低协议开销,增加请求优先级和服务端推送的支持。

特点:

  • 多路复用,降低开销(一次TCP连接可以处理多个请求), 一个连接里面并发处理请求,不像http1.1在一个tcp连接中各个请求是串行的;解析基于二进制,解析错误少,更高效(HTTP/1.X解析基于文本);在1.0版本后增加了header头信息,2.0版本通过算法把header进行了压缩这样数据体积就更小,在网络上传输就更快。

ps
其中,1.0和1.1最常用,0.9几乎不用(旧),2.0比较少用(更新代价大)


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值