HTTP

作者: 桃逸 | 来源:发表于2017-02-23 09:18 被阅读17次

    参考:
    HTTP协议详解
    HTTP协议处理流程

    HTTP练习沙箱:httpbin.org

    官方文档:
    IETF RFC2616 HTTP/1.1
    https://www.w3.org/Protocols/
    http://www.faqs.org/rfcs/

    书籍参考:
    《HTTP权威指南》

    基本知识点

    超文本输出协议
    快速,灵活
    请求方法:GET、HEAD、POST、PUT、DELETE
    传输类型以 Content-Type加以标记
    无连接:请求完收到响应即断开连接
    无状态:后续处理需要前面的信息就必须重传

    HTTP request:请求行,请求头,请求体;
    HTTP response:状态行,响应头,响应体;

    • http状态码 :
      302 是请求重定向,304未改变,用于浏览器缓存机制;
      500以上是服务器错误
      400以上是请求链接错误或者找不到服务器,401未授权,404未找到;
      200以上是正确
      100以上是请求接受成功

    • cookie RFC6265
      为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据,通常经过加密,可以叫做浏览器缓存;
      cookie是由web服务器创建的保存在用户浏览器上的小文本文件,它包含有关用户信息,可以加快用户访问速度,但是会导致安全问题;
      用户访问一个web服务器时,浏览器首先要检查本地的cookies,并将其样发给web服务器;
      cookies最经典的应用是判定注册用户是否已经登录网站;

    • HTTP URL请求过程
      请求DNS域名解析
      TCP/IP连接
      发送请求
      接受响应
      客户端主动关闭

    • chunked 编码
      一般情况下HTTP的header包含content-length来指明报文体长度;
      但有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时需要实时生成消息长度,服务器一般使用 chunked 编码;
      编码使用若干个Chunk组成,由一个标明长度为0的chunk结束,每个Chunk有两部分组成,第一部分是该Chunk的长度和长度单位(一般不写),第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些没有写的头部内容

    HTTP 原理
    参数字段
    • Keep-Alive:
      Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接,有一个设置时间
    • Range:
      设置断点下载/续传的位置
    Socket

    socket起源于Unix,而Unix/Linux的基本哲学之一就是“一切皆文件”;
    scoket是一套完成TCP/UDP协议的接口,本身并不是协议,而是一个调用接口;

    • 心跳
      理论上socket的TCP链接是长连接,一般不会主动断开,但是会出现异常情况导致连接断开,所以在无数据传输的时候要发送心跳消息,消息内容由开发者自定义;

    HTTPS

    HHTPS 使用 443端口, HTTP使用80端口;
    HTTP+SSL,SSL(安全套接层)是Netscape公司设计的主要用于web的安全传输协议,通过证书来确保客户端跟服务端之间的通信数据是加密安全的;
    加解密算法类型:

    • 对称加密:密钥只有一个,加密解密为同一个密码,切加解速度快
      典型的对称加密算法有DES、AES、RC5、3DES等;
    • 非对称加密:使用两个密钥,公共密钥和私有密钥
      根据公钥无法推知私钥,根据私钥也无法推知公钥,相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等;
      私有由一方保存,另一方任何人都可以获得公共密钥;
      URL导图:


      Paste_Image.png
    Paste_Image.png

    Multipart/form-data

    https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
    https://my.oschina.net/cnlw/blog/168466
    http://www.faqs.org/rfcs/
    http里没有专门用于文件上传的请求方式,文件上传请求是在post请求基础之上定义出来的一种方式;
    multipart请求头信息: Content-Type,其值必须规定为multipart/form-data,具体的头信息如下:

    Content-Type: multipart/form-data; boundary=${bound}

    ${bound}是一个占位符,代表我们规定的分隔符;
    与post请求体不同的是它的构造方式,post是简单的name=value值链接,而multipart/form-data则是添加了分割符等内容的构造体;
    **要发送一个multipart请求,其实任何支持post请求的工具或语言都可以支持,只是自己要稍微包装一下便可

    Paste_Image.png

    相关文章

      网友评论

          本文标题:HTTP

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