网络2 HTTP

网络2 HTTP

1 http请求报文和响应报文

​ (1)http请求报文由请求行、请求头部、空行、请求数据组成。

​   请求行:(请求方法,url中的path路径,http版本)

​   请求头部(header):关键字/值对组成

​ (2)http响应报文由状态行、响应头部、空行、响应数据组成。

​   状态行:(http版本,状态码,状态码描述)

​   响应头部(header):关键字/值对组成

2 http请求方法

GET:获取资源。请求访问已被URI识别的资源。

POST:传输实体主体。

PUT:传输文件。

HEAD:获得报文的首部。与GET一样,但是不返回报文主体。

DELETE:删除文件。与PUT相反。PUT和DELETE方法本身不带有验证机 制,所以一般的网站不使用这两种方法。

OPTIONS:询问支持的方法。

TRACE:追踪路径。

3 Get和Post区别

语义区别

  get获取数据,post提交数据。

规范

  (1)get把参数写在url中,post通过请求体传参。实际上,http协议没有要求,HTML中有类似的定义,所以后来浏览器实现了。

  (2)get请求url中传递的参数长度有限制,post没有。实际上,http协议没有要求,主要出于浏览器和服务器的性能方面的考虑。

  (3)安全性。

区别(http协议方面)

  (1)安全。是否改变服务器状态。

  (2)幂等性。重复提交是否有意外情况发生。

  (3)缓存。get有缓存,post没有缓存。

4 http状态码

典型的状态码及其语义

100 继续请求者应当继续提出请求

200 成功。

201 已创建。请求成功并且服务器创建了新的资源。

204 无内容。服务器对于客户端没有返回新的信息。

206 部分内容。客户端进行了范围请求,服务器成功执行get请求。

301 永久移动。

302 临时移动。与301的区别,临时性质。例如用户把URI保存书签,301会更新书签,302不会。

303 查看其它位置。由于请求位置存放另一个URI,应该使用GET方法定向获取请求资源。

304 未修改。

400 请求错误。服务器不理解请求语法。

401 未授权。需要身份认证。

403 禁止。服务器禁止请求。

404 未找到。服务器找不到请求的网页。

500 服务器内部错误。

503 服务不可用。

5 http版本的区别

http1.0和http1.1的区别

(1)长连接

  HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连。HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求 。

(2)节约宽带

  HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

  另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

(3)HOST域

  现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

  HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

http1.1和http2.0的区别

(1)多路复用

  HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

  TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

(2)数据解锁

  HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

(3)服务器推送
  当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

  服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。


  HTTP网络
You forgot to set the qrcode for Alipay. Please set it in _config.yml.
You forgot to set the qrcode for Wechat. Please set it in _config.yml.
You forgot to set the business and currency_code for Paypal. Please set it in _config.yml.
You forgot to set the url Patreon. Please set it in _config.yml.

评论