关于HTTP 你不能不知道的

作者: 采风JS | 来源:发表于2017-04-19 21:13 被阅读381次

    HTTP:Hyper Text Transfer Protocol(超文本传输协议),是用于服务器向浏览器传输超文本的协议,其建立在TCP/IP之上,由于其简单、快速的特点,得到广泛应用。小采风同学,自作主张选取部分方面,粗略的聊一聊我们不能不知道的常识。

    一、HTTP的工作原理

        HTTP协议定义web客户端(通常为浏览器,以下统称为浏览器)向服务器发送请求报文,服务器读取请求报文内容,定位URL中相应资源,以响应报文的方式传送给浏览器,浏览器解析响应报文中的实体数据,呈现出静态和动态页面。其工作原理如下所示:

    1)浏览器建立连接

    浏览器根据DNS返回的域名的IP地址和服务器端口号(默认为80),建立基于TCP的套接字连接,具体参考TCP之连接的建立与终止

    2)发送HTTP请求

    以请求报文的形式,包括请求行、请求头部、空行和实体数据部分

    3)服务器解析请求并发送HTTP响应

    服务器解析请求报文,定位请求资源位置,以响应报文的方式返回,包括响应行、响应头部、空行和实体数据,具体分析见下文

    4)浏览器解析实体数据

    将静态页面和动态页面显示在浏览器窗口

        在HTTP/1.0版本中,其连接建立一次,断开一次。为解决此问题,HTTP/1.1中提出持久化连接方式,只要任意一端没有提出断开连接,则保持TCP连接状态。在持久连接基础上,管线化发送成为可能。管线化方式,无需等待上次请求响应,直接发送下一次请求,如图一所示:

    图1 : 管线化方式发送

        双方在传送数据时,在不同的业务场景下,可选择不同方式来提高效率。常见的有压缩传输、分割传输的分块传输、多部分对象结合传输和部分内容的范围请求传输。

        需要注意的是,HTTP只被用来发布客户端和服务端的应用层命令。当进行数据传输时,除了在数据流的开始和结束部分,是看不到应用层的控制信息的,如图2所示:

    图2 : wireshark抓包分析HTTP

    二、HTTP报文结构分析

    HTTP报文分为请求报文和响应报文,其组成包括请求首部(响应首部)、空白行和实体数据组成。空白行,即使没有数据也不能省略。而请求首部由请求行(响应首部由响应行)、请求头部(响应头部)、通用首部、实体首部和其他项组成,如图3所示:

    图3 : 报文结构

    上图中请求行和状态行,是需要特别注意的。而首部的类型和种类之多,需要参考《HTTP权威指南》查阅学习。

    1)请求行:方法名、路径名和版本号组成

    HTTP/1.1中有八种方法,下面一一介绍方法的使用情况:

    GET:用来请求访问已被标示的资源,资源是文本,直接返回;资源是程序,返回执行的结果

    POST : 用来传输实体主体,与GET类似,但是主要目的并不是为获取响应的主体内容

    PUT : 用来传输文件,因自身不具备验证机制,存在安全问题,通常不使用

    DELETE : 用来删除文件,与PUT方法相反,同样因自身不具备验证机制,通常不使用

    HEADER: 与GET方法相同,只是不返回报文实体数据,主要用于确认URL的有效性及资源的 日期时间等

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

    TRACE: 用来确认连接过程中发生的一系列操作,因容易产生跨站追踪攻击,通常不使用

    CONNECT:基于SSL和TLS实现通信内容加密传输,主要在HTTPS中使用,下文介绍

    而上面的八种方法中,通常是GET和POST方法,介绍一下二者的不同,如图4和图5所示:

    图4 : GET方法
    图5 : POST方法

    a)GET参数包含在URL中,以?与路径区分,多个参数用&连接;POST参数包含在请求报文的实体数据中

    b)URL的数据有长度限制,所以GET方式有限制;通常POST方式没有长度限制

    c)GET的数据在URL中,使用明文传送,容易被获取;POST数据也是基于明文传送,安全性比GET好一些

    2)响应行:版本号、状态码

    状态码由表示状态的数字和原因短语组成,状态码分类如下图6:

    图6 :  状态码分类

    状态码种类繁多,有60多种,具体参考状态码查询,常见的有12种,介绍如下:

    200 OK : 表示浏览器发来的请求在服务器端被正常处理了

    204 No Content : 表示浏览器发来的请求被服务器正常处理了,但是返回的响应报文中不包含实体数据,及浏览器的页面不更新

    206 Partial Content : 服务器仅返回指定范文中的数据,即上文中的部分内容范围传输方式

    301 Moved Peramanently : 永久性重定向,即该请求资源被重新分配了URI

    302 Found : 暂时性重定向,即该请求的资源被被分配新的URI,希望本次使用新的URI

    304 Not Found : 浏览器发送带有附带条件的请求,但因发生条件不满足的情况,服务器端不返回

    400 Bad Request : 表示请求报文中存在语法错误

    401 Unauthorized : 第一次请求,表示需要通过HTTP认证;若经过第一次请求,仍然出现表示认证失败

    403 Forbidden : 表示请求的资源被服务器拒绝了

    404 Not Found : 表示服务器无法找到相应的资源,也可以表示服务端拒绝请求且不想说明原因

    500 Internal Server Error : 表示服务器在执行请求时发生错误

    503 Service Unavailable : 表示服务器暂时处于超负载或正在进行停机维护


    事务具有两面性,HTTP的简单也带来了相应的问题,其是一种无状态的不安全的协议,针对这两种劣势,小采风和大家一起继续往下看:

    三、Cookie与Session

    HTTP是一种无状态协议,不能管理之前的请求和响应间的状态。为解决此问题,引入Cookie机制,通过在请求和响应报文中增加Cookie信息来管理状态,cookie字段就是上文报文结构中的其他项里,如下图7所示:

    图7 : Cookie机制工作原理

    Session是服务器为浏览器请求建立的程序。服务器根据请求报文中sid来标示该访问的Session,如果没有,则重新生成,并在响应报文中重新添加sid,cookie与session的区别如下:

    a)cookie在浏览器端,session在服务器端

    b)cookie不安全,容易被利用进行cookie欺骗

    c)session可以设置超时时间,一旦超时,重新建立

    关于其具体的工作机制,参考cookie和session的区别详解 

    四、HTTPS(通常在浏览器端看到有加锁符号)

    HTTP存在的不足有:

    a)浏览器和服务器互相不认证,可能遭遇伪装

    b)通信的传输数据使用明文传输,容易被截获修改

    c)数据的完整性无法保证,中途被人篡改也不知道

        HTTPS是如何弥补HTTP在安全方面的不足呢?HTTPS不是应用层新的协议,而是通过SSL和TSL代替HTTP的通信协议接口。通常,HTTP直接与TCP进行通信,而HTTPS中,HTTP先与SSL进行通信,后与TCP进行通信。SSL是目前应用最广泛的网络安全技术。

        在介绍SSL解决HTTP安全性问题之前,我们先来了解一下加密方法。

        通常,加密算法是大家都知道的,但是加密和解密的密钥是不知道的。一旦加密和解密密钥泄露,存在安全性问题。共享密钥加密方式,也称为对称密钥加密方式,浏览器和服务器加密和解密使用相同的密钥。可是,密钥该如何传输呢?传输中间被攻击,则安全性没有保证。

        人类似乎天生就是来解决问题的。公开密钥加密方式,也称为非对称加密方式。服务器,拥有一对存在一定关系的公开密钥和私有密钥。服务器将公开密钥传送给浏览器,浏览器使用收到的公开密钥进行加密,即使中间收到攻击,也因为没有解密密钥,即私有密钥,无法解密。服务器收到加密数据后,使用私有密钥成功解密。

        公开密钥加密方式,处理速度相比于共享密钥加密方式比较慢。

        HTTPS中,SSL充分结合两者优势,利用公开密钥加密方式传输后面使用的共享密钥加密解密的密钥,然后浏览器和服务器使用共享密钥进行加密解密处理,如图8所示:

    图8 : HTTPS中的混合密钥加密方式

            HTTPS相比于HTTP,处理速度要慢2到200倍。主要速度影响在,

    a)通信处理:HTTP与TCP之间加上SSL之后,通信量会增加很多

    b)加密解密:消耗服务器和浏览器端硬件资源,造成较大负载

        所以,并不是所有的均使用HTTPS,敏感信息使用HTTPS,非敏感信息使用HTTP。

    近日来,小采风沉迷在协议的迷乱中不能自拔,未来,会近一步推出协议类系列文章,欢迎各位看官关注哦!

    相关文章

      网友评论

      本文标题:关于HTTP 你不能不知道的

      本文链接:https://www.haomeiwen.com/subject/lnyhzttx.html