HTTP的常见方法 / HTTP状态码 / HTTP版本

HTTP的常见方法

  • GET方法:获取资源
    客户端请求指定的资源信息,服务器返回指定资源。
  • POST方法:传输实体主体
    一般用于表单的提交数据,将客户端的数据提交到服务器。
  • PUT方法:传输文件
    在请求报文主体中包含文件的内容,然后保存到请求URL指定的位置。
  • HEAD方法:获得报文首部
    请求HTTP 首部,响应报文中用于确认URL的有效性及资源更新的日期时间等。
  • DELETE方法:删除文件
    请求服务器删除指定的资源。
  • OPTIONS方法:询问支持的方法
    用来查询请求URL指定的资源支持的方法。
  • TRACE方法:追踪路径
    回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT方法:要求用隧道协议连接代理

GET和POST的区别

  1. 功能上
    get 是从服务器上获取数据,post 是向服务器传送数据。
  2. 数据存储上
    get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,值和表单内各个字段一一对应,在URL中可以看到。post 是将表单中的数据放在的数据体中,按照变量和值相对应的方式,传递到 action 所指向URL。用户看不到这个过程。
  3. 安全上
    get 的安全性较低,post 安全性较高, 通过 get 提交数据,用户名和密码将明文出现在 URL 上。Post的所有操作对用户来说都是不可见的。
  4. 传送的数据量
    get 传送的数据量较小,长度受到 URL 长度的限制,post 传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。也跟各个浏览器、操作系统以及服务器的限制有关。
  5. 缓存
    get 通过一次请求的时候会在浏览器上进行一次缓存,post 不会。
  6. get会产生一个TCP数据包,POST会产生两个TCP数据包。
    get会发送http header和data给服务端,服务端返回一个200,请求成功。
    post会先发送http header给服务端,告诉服务端等一下会有数据过来,服务端返回100,告诉客户端已经准备接收数据,post在发送一个data给服务端,服务端返回200,请求成功。但是上面所说的post会比get多一个tcp包其实不太严谨。多发的那个expect 100 continue header报文,是由客户端对http的post和get的请求策略决定的,目的是为了避免浪费资源,如带宽,数据传输消耗的时间等等。所以客户端会在发送header的时候添加expect 100去探探路,如果失败了就不用继续发送data,从而减少了资源的浪费。所以是否在发送一个包取决了客户端的实现策略,和get/post并没什么关系。有的客户端比如fireFox就只发送一个包。

HTTP 的状态码

  • 1消息
    100 Continue:客户端应当继续发送请求。这个临时响应式用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分。
  • 2成功
    这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
    200:请求成功,请求所希望的响应头或数据体将随此响应返回。
  • 3重定向
    301:永久重定向,表示所请求的文档在别的地方,文档新的 URL 会在定位响应头信息中给出,浏览器自动连接到新的 URL。
    302:临时重定向,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    304:未修改,自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
  • 4请求错误
    400 :错误请求,服务器不理解请求的语法。
    401:未授权,访问被拒绝。
    403:禁止访问,服务器拒绝请求。
    404:未找到,服务器找不到请求的网页。
    408:请求超时,服务器等候请求时发生超时。
    410:已删除,如果请求的资源已永久被删除,服务器就会返回此响应。
  • 5服务器错误
    500:服务器遇到错误,无法完成请求。
    502:错误网关,服务器作为网关或代理,从上游服务器收到无效响应。
    503:服务不可用,服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
    505:HTTP 版本不支持,服务器不支持请求中所用的 HTTP 协议版本

HTTP版本

http 1.0:

每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
头信息是 ASCII 码,后面数据可为任何格式。
服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME即多用途互联网邮件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型, 常见Content-Type值:text/xml image/jpeg audio/mp3

http 1.1:

新增方法:PUT、PATCH、OPTIONS、DELETE
引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接。
引入了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率。

同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)

为避免上述问题
两种方法:一是减少请求数,二是同时多开持久连接

http1.1没有解决的问题
1.传输数据是明文
2.header头部数据太长
3.每次传输还是要重新连接
4.server不能主动push

Http2.0

HTTP2.0是SPDY(谷歌公司研发的https的一种协议)的升级版
1.头信息和数据体都是二进制,称为头信息帧和数据帧
2.复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工。
3.引入头信息压缩机制,头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
4.HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)

http1.0和http1.1的区别

  1. 长连接
    HTTP 1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,弥补了HTTP1.0每次请求都要创建连接的缺点

  2. 缓存处理
    在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略

  3. 带宽优化和网络连接的使用
    HTTP1.0中,存在一些浪费带宽的现象,例如:客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便了开发者自由的选择以便于充分利用带宽和连接

  4. 错误通知的管理
    在HTTP1.1中新增24个状态响应码,如
    409(Conflict)表示请求的资源与资源当前状态冲突;.
    410(Gone)表示服务器上的某个资源被永久性的删除

  5. Host头处理
    在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)

  6. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

猜你喜欢

转载自blog.csdn.net/qq_43239560/article/details/104698073