HTTP部分:

目录:

基础概念
    Web基础
    URL
    请求和响应报文
HTTP 方法
    GET:获取资源
    POST:传输实体主体
    HEAD:获取报文首部
    PUT:上传文件
    DELETE:删除文件
    OPTIONS:查询支持的方法
    RACE:追踪路径
    CONNECT:要求用隧道协议连接代理
HTTP 状态码
    2XX 成功
    3XX 重定向
    4XX 客户端错误
    5XX 服务器错误
HTTP首部
    通用首部字段
    请求首部字段
    响应首部字段
    实体首部字段
具体应用
    Cookie
    缓存
    持久连接
    编码
    分块传输
    多部分对象集合
    范围请求
    内容协商
    虚拟主机
    通信数据转发
HTTPs
    加密
    认证
    完整性
各个 HTTP 版本的对比
    HTTP/1.0 与 HTTP/1.1 的区别
    HTTP/1.1 与 HTTP/2.0 的区别

正文

基础概念:
    web基础:
        http:超文本传输协议;
        www的三种技术:html、http、url。
        rfc:互联网的设计文档。

    url:
        url统一资源定位符,

        格式:
        http://user:pass@www.example.ip:80/dir/index.htm?uid=1#ch1
        协议方案名+登录信息认证+服务器地址+服务器端口号+带层次的文件路径+查询字符串+片段标识


    请求和响应报文
        请求报文:
            方法+url+协议版本+请求首部字段+内容实体。

        响应报文:
        协议版本+状态码+状态码的原因短语+响应首部字段+主体。



HTTP方法:
    客户端发送的请求报文第一行为请求行,包含了方法字段。

    get:获取资源;
    post:传输实体主体。

    post主要目的不是获取资源,而是传输实体主体数据。

    get和post的请求都能使用额外的参数,
    但是get的参数是以查询字符串出现在url中,
    而post的参数存储在实体主体部分。


    get的传参方式相比于post安全性较差,
    因为get传的参数在url是可见的。
    可能会泄漏私密信息。
    并且get只支持ASCII字符,
    如果参数为中文则可能会出现乱码,
    而post支持标准字符集。


    head:获取报文首部。
        和get方法一样,但是不返回报文实体主体部分。
        主要用于确认url的有效性
        以及资源更新的日期时间等。

    put:上传文件
        由于自身不带验证机制,
        任何人都可以上传文件,
        因此存在安全性问题,
        一般web网站不使用该方法。

    delete:删除文件
        与put功能相反,同样不带验证机制。

    options:查询支持的方法
        查询指定的url能够支持的方法。
        会返回allow。

    trace:追踪路径
        服务器会将通信路径返回给客户端。
        一般不会使用。

    connect:要求用隧道协议连接代理。
        用隧道协议进行tcp通信。
        通常使用ssl安全套接字
        和tls传输层安全协议
        把通信内容加密后经网络隧道传输。

http状态码:
    服务器返回的响应报文中第一行为状态行,
    包含了状态码以及原因短语,
    来告知客户端请求的结果。

    2XX:成功
    3XX:重定向
    4XX:客户端错误
    5XX:服务器错误


http首部:
    http报文包含了首部和主体两部分。
    有4中类型的首部字段:
    通用首部字段、
    请求首部字段、
    实体首部字段、
    响应首部字段。



具体应用
    cookie
    http协议是无状态的,
    主要是为了让http协议尽可能简单,
    使他能够处理大量事务。
    引入cookie来保存状态信息。
    cookie状态信息保存在客户端浏览器中,
    不是服务器上。


    session和cookie的区别:
    session是服务器用来跟踪用户的一种手段,
    每个session都有一个唯一标识:
    session ID。
    当服务器创建了一个session时,
    给客户端发送的响应报文里就包含了
    set-cookie字段,
    其中有一个名为sid的键值对,
    这个键值对就是session id,
    客户端收到后就把cookie保存在浏览器中,
    并且之后发送的请求报文都包含session ID。
    http就是session和cookie这两种方式一起合作来
    实现跟踪用户状态的,
    而session用于服务器端,
    cookie用于客户端。

    浏览器禁用cookie的情况
    会使用url重写技术,在url后面加上sid=xxx

    使用cookie实现用户名和密码的自动填写。
    网站脚本会自动从cookie中读取用户名和密码,
    从而实现自动填写。


    缓存
    有两种缓存方法:让代理服务器进行缓
    和让客户端浏览器进行缓存。


持久连接:
    当浏览器访问一个包含多张图片的
    html页面时,除了请求访问html页面资源,
    还会请求图片资源,
    如果每进行一次http通信就要断开一次
    tcp连接,连接建立和断开的开销会很大。
    持久连接只需要进行一次tcp连接
    就能进行多次http通信。


    持久连接需要使用connection首部字段进行管理。

编码:
    编码主要是为了对实体进行压缩。

分块传输:
    分块传输可以把数据分割成多块,
    让浏览器逐步显示页面。

范围请求:
    如果网络出现中断,
    服务器只发送了一部分数据,
    范围请求使得客户端能够只请求未发送的那部分数据,
    从而避免服务器端重新发送所有数据。 


内容协商:
    通过内容协商返回最合适的内容,
    例如根据浏览器的默认语言返回中文界面
    还是英文界面。


虚拟主机:
    使用虚拟主机技术,使得一台服务器拥有多个域名,
    并且在逻辑上可以看成多个服务器。



通信数据转发:

    代理:
    代理服务器接收客户端的请求,并且转发给其他服务器。
    代理服务器一般是透明的,
    不会改变url。
    使用代理的主要目的是:
    缓存、网络访问控制以及记录访问日志。


    网关:
    与代理服务器不同的是,
    网关服务器会将http转化为
    其他协议进行通信,
    从而其他非http服务器的服务。

    隧道:
    使用ssl等加密手段,
    为客户端和服务器端之间建立一提哦啊安全的通信线路。





https:

    http有以下安全性问题:
    1.通信使用明文,内容可能会被窃听;
    2.不验证通信方的身份,因此可能遭遇伪装;
    3.无法证明报文的完整性,所以有可能已遭篡改。


https并不是新协议,
而是http先和ssl通信,
再由ssl和tcp进行通信。
通过使用ssl,https提供了加密、认证
和完整性保护。

加密:
有两种加密方式:对称密钥加密和公开密钥加密。对称密钥加密的加密和解密使用同一密钥,而公开密钥加密使用一对密钥用于加密和解密,分别为公开密钥和私有密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
对称密钥加密的缺点:无法安全传输密钥;公开密钥加密的缺点:相对来说更耗时。
HTTPs 采用 混合的加密机制,使用公开密钥加密用于传输对称密钥,之后使用对称密钥加密进行通信。(下图***享密钥即对称密钥)


认证:
通过使用 证书 来对通信方进行认证。证书中有公开密钥数据,如果可以验证公开密钥的确属于通信方的,那么就可以确定通信方是可靠的。
数字证书认证机构(CA,Certificate Authority)颁发的公开密钥证书,可以通过 CA 对其进行验证。
进行 HTTPs 通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后,就可以开始加密过程。
使用 OpenSSL 这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。浏览器在访问该服务器时,会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告消息。
客户端证书需要用户自行安装,只有在业务需要非常高安全性时才使用客户端证书,例如网上银行。


完整性:
ssl提供摘要功能来验证完整性。