聊聊HTTP协议

HTTP协议

  1. 简介:Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

  2. HTTP协议属于应用层,是基于TCP/IP协议传输数据。

  3. HTTP协议是工作于客户端——服务器架构之上,浏览器作为HTTP客户端通过URL向HTTP服务器发送所有请求,而后服务器根据请求经过处理,返回相应的响应信息。

  4. HTTP协议的三特性:

    • 无连接:限制每次连接只处理一个请求,当服务器处理完客户请求并返回响应后,即刻断开连接(类似短连接),以此节省传输时间,HTTP/1.0默认为短连接而HTTP/1.1后默认为长连报文头中会有keepAlive,服务器端需开启支持。

    • 媒体独立:只要客户端和服务器端知道如何处理数据内容,任何数据类型都可以通过HTTP发送,可指定适合的内容类型。

    • 无状态:对事务处理没有记忆功能,这也就意味着后续处理需要之前的信息时需要重传,为了保持会话,我们使用了COOKIE和SESSION来保持会话机制。

  5. 工作原理:

     

     

  6. HTTP长连接/短连接:其实说的是TCP/IP传输层的长连接和短连接;

    长连接:两端数据传输完成后,TCP连接会保持不断,等待在同域名下复用此通道传输数据。

    短连接:两端数据传输完成后,TCP连接直接断开,下次需要时,再次建立新连接传输数据。

    两者优劣:长连接比短连接能带来更高的TPS(每秒处理消息数,也为吞吐量),更低的CPU消耗,更少的IO,更高的内存占用,更少的系统调用

  7. 长连接的使用场景以及Web_Server相关配置

    • 我们在什么情况下适合使用长连接:

      • 服务器内存充足的情况下,KeepAlive on or off 对系统性能影响不大。

      • 若服务器上静态资源(HTML、js、CSS、图片文件)居多时,建议开启KeepAlive。

      • 若服务器上多为动态请求(数据库连接较多,对文件系统访问较多),KeepAlive 关掉,会节省一定的内存,节省出来的内存可作为文件系统缓存,降低I/O压力。

    • Web_Server长连接配置:

      • Apache:


        // httpd.conf 引用此扩展文件,默认不引用
        #Include conf/extra/httpd-default.conf
        // 编辑 httpd-default.conf 文件部分参数罗列
        // 发起请求后和响应前的超时时间
        TimeOut 300
        // on or off KeepAlive
        KeepAlive on
        // 允许长连接请求最大数
        MaxKeepAliveRequests 100
        // 等待来自相同客户端下次连接,保持时间设置
        KeepAliveTimeOut 5
      • Nginx:Nginx反向代理实现长连接

  8. 消息结构

    • 客户端请求消息格式:

      • 请求头(header)

      • 请求行(request line)

      • 空行

      • 请求数据

      •  

    • 服务器响应消息格式:

      • 状态行

      • 消息报头

      • 空行

      • 响应正文

      •  

    • 常用方法

      方法描述是否包含主题
      GET 从服务器获取一份文档
      POST 向服务器发送需要处理的数据
      PUT 将请求的主题部分储存在服务器上
      DELETE 从服务器删除一份文档
    • GET和POST请求方式对比

      • GET:从指定的资源请求数据。

      • 注意:

        • GET 请求可被缓存

        • GET 请求保留在浏览器历史记录中

        • GET 请求可被收藏为书签

        • GET 请求不应在处理敏感数据时使用

        • GET 请求有长度限制

        • GET 请求只应当用于取回数据

        • GET请求所传参数会在请求URL的? 后通过& 符拼接发送,且在地址栏可见

      • POST:向指定的资源提交要被处理的数据

      • 注意:

        • POST 请求不会被缓存

        • POST 请求不会保留在浏览器历史记录中

        • POST 不能被收藏为书签

        • POST 请求对数据长度没有要求

         

 

posted @ 2018-05-25 17:07  MR_leew  阅读(181)  评论(0编辑  收藏  举报