zoukankan      html  css  js  c++  java
  • http协议(三)几种数据传输方式

     

    说说http协议的一些特点:

    1)无状态

    http协议是一种自身不对请求和响应之间的通信状态进行保存的协议,即无状态协议。

    这种设置的好处是:更快的处理更多的请求事务,确保协议的可伸缩性

    不过随着web的不断发展,有时候,需要将这种状态进行保持,随即,就引入了cookie技术,cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。

    有关cookie的内容后面我们再说。。。

    2)持久性

    正常在发送http时,都需要建立TCP的连接,再发送报文。

     

    如果每次想要发送http报文都需要经过这个过程,那么时间大部分都会消耗在建立和断开连接的过程中。

    因此http中使用了connection属性,用于指定连接的方式。

    当设置成keep-alive,http就会建立一条持久化的连接,不需要每次都建立连接,再中断。

    这样做的好处是:减轻了服务器端的负载,减少开销的那部分时间,使http请求和响应都能更快的结束,相应的,web页面显示速度也就相对提升了。

    3)管线化

    如果一个http请求,请求了大量的图片等大文件,那么其他的http请求怎么办呢?

    现在,管线化技术的出现,使得http请求比持久性连接更要快;特点在于:请求数越多,时间差越明显。

    4)内容编码

    由于某些报文的内容过大,因此在传输时,为了减少传输的时间,会采取一些压缩的措施。

    例如上面的报文信息中,Accept-Encoding就定义了内容编码的格式:gzip

    有下面几种方式:

    gzip:GNU压缩格式

    compress:UNIX系统的标准压缩格式

    deflate:是一种同时使用了LZ77和哈弗曼编码的无损压缩格式

    identity:不进行压缩

    5)多部分对象集合

    有的时候传输的内容,不仅仅是一些字符串,还有可能是一些图片,字符,音乐二进制等混杂的内容。

    这就需要使用多部分对象集合,multipart,例如在使用java编写web上传文件的代码时,需要在form中指定form的编码格式。

    设置form的enctype属性的值为multipart/form-data。

    这是因为默认的情况下form使用的编码格式是:applicatin/x-www-form-urlencoded,这种编码格式会把所有的内容进行编码,不适合上传文件这种情况。

    这两种编码格式的区别主要是:

    multipart/form-data 会以控件为基准,编码form中的内容。

    application/x-www-form-urlencoded 会把form中的内容编码成键值对的形式。

    6)范围请求

    有些场景下,http报文请求一些很大的图片,但是加载过程很慢。

    比如我们登录一些大图片的网址,会发现有时候图片是一块一块加载的。

    这就是因为设置了http请求的长度,这样就可以分块的加载资源文件。

    在请求报文中使用Range属性,在响应报文中使用Content-Type属性都可以指定一定字节范围的http请求。

     

    接下来,说说几种http协议的数据传输方式

    http协议的传输方式有很多种,处于安全考虑,常用的一般都是GET和POST两种,先来介绍下这两种

    1)GET:获取资源

    GET方法用来请求访问已被URL识别的资源

    2)POST:传输实体主体

    POST方法用来请求服务器传输信息实体的主体

    GET和POST的区别:

    首先,使用目标不同:GET方法只是用来查询,不会对浏览器上的信息产生影响,每次GET的方法都是相同的

    其次,大小不同:GET是放在URL首部,因此大小随着浏览器而定,而POST则是在报文中,只要没有具体限制,文件的大小是没限制的

    然后,安全性不同:GET采用的是明文传输,而POST是放在报文内部,无法看到

    从使用场景的角度来说,一般像用户注册登录这种信息都是私密的,采用POST,而针对查询等,为了快速,大多采用GET传输。

    (关于关于GET和POST的区别,最近重新看了很多别人写的博客啊资料什么的,发现上面的解释比较模糊,我就在下面的评论区里面将区别清晰的描述一下,当然,后面的博客也会详细的解释)

     

    接下来介绍其他几种数据传输方式:

    3)PUT:传输文件

    PUT要求在请求报文的主体中包含文件内容,然后保存到请求URL指定的位置

    处于安全考虑,一般web网站不使用此方法,若配合web的安全验证机制,或者架构采用REST标准的网站,就可能开放使用此方法

    4)HEAD:获得报文首部

    HEAD和GET方法一样,只不过不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等

    5)DELETE:删除文件

    DELETE是与PUT相反的方法,是按请求URI删除指定的资源

    处于安全考虑,一般web网站不使用此方法,若配合web的安全验证机制,或者架构采用REST标准的网站,就可能开放使用此方法

    6)OPTIONS:询问支持的方法

    用来查询针对请求URI指定的资源支持的方法

    7)TRACE:追踪路径

    是让web服务器端将之前的请求通信还回给客户端的方法

    发送请求时,在Max-Frowards首部字段中填入数值,每经过一个服务器端就-1,当数值为0时,停止传输,最后收到服务器返回状态码200 OK的响应

    但是,这种方法基本很少使用,而且很容易引起XST(跨站追踪)攻击,就更不会用到了。

    8)CONNECT:要求采用隧道协议连接代理

    该方法要求在于代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经过网络传输。

     

    最后,附上一张http1.1和http1.0版本各自支持的方法,另外,注意用大写。。。。。。

    其中,LINK和UNLINK已被HTTP1.1废弃,不再支持!

     

  • 相关阅读:
    java项目和web项目路径的区别
    ModelAndView跳转
    struts漏包和tomcat上传问题
    映射文件的路径写错的出现的错误
    hibernate二级缓存
    find命令小结
    【转】Python的XML-RPC简介
    Python的类实例方法,类方法,类静态方法
    itertools模块速查
    Python中处理时间 —— time模块
  • 原文地址:https://www.cnblogs.com/zhengyao9236/p/11583520.html
Copyright © 2011-2022 走看看