zoukankan      html  css  js  c++  java
  • HTTP包体的传输方式

    HTTP包体:承载的消息内容

    请求和响应都可以携带包体

    • HTTP-message = start-line *( header-field ) CRLF [ message-body ]
    • message - body = *OCTET:二进制字节流

    以下消息不能含有包体

    • HEAD 方法请求的响应
    • 1XX、204、304对应的响应
    • CONNECT 方法对应的 2xx 响应

    传输HTTP包体有几种方式?

    一、发送HTTP消息时已能够确定包体的全部长度

    使用Content-Length 头部明确指明包体长度

    • Content-Length = 1*DIGIT
    • 用10进制(不是16进制)表示包体的字节个数,且必须与实际传递的包体长度一致

    优点:接收端处理更简单(接收端只读取指定的字节数)

    服务端响应中如下:Content-Length 显示6,而实际的字节数为10

    但是我们的浏览器中只显示6个字节,但是实际抓到的包中有10个字节,只解析了6个。如下图:

     如果我们的 Content-Length 中的长度超出了实际的长度的话,浏览器时解析不了内容的。

    二、发送HTTP消息时不能够确定包体的全部长度

    • 使用Transfer-Encoding头部指明使用的Chunk传输方式
        • 含Transfer-Encoding头部后Content-Length头部应被忽略

    优点:

    • 基于长连接持续推送动态内容
    • 压缩体积较大的包体时,不必完全压缩完(计算出头部)再发送,可以边发送边压缩
    • 传递必须在包体传输完才能计算出的 Trailer 头部

    抓到的包

    MIME( Multipurpose Internet Mail Extendsions )

    content := " Content-Type " ":" type "/" subtype *(";" parameter)

    • type := discrete-type / composite-type 
        • discrete-type :="text" / "image" / "audio" / "video" / "application" / extention-token
        • composite-type := "message" / "multipart" / extension-token 
        • extension-token :=ietf-token / x-token
    • subtype :=extension-token / iana-token
    • parameter := attribute "=" value

    大小写不敏感,但通常小写

    例如:Content-Type: text/html; charset=UTF-8

    https://www.iana.org/assignments/media-types/media-types.xhtml

    Content-Disposition 头部(RFC6266)

    disposition-type = "inline" | "attachment" | "disp-ext-type" 

    • inline :指定包体是以内联的方式,作为页面的一部分展示
    • attachment:指定浏览器将包体以附件的方式下载

    例如:Content-Disposition:attachment

       Content-Disposition:attachment;filename="filename.jpg"

    • 在mutilpart/form-data类型应答中,可以用于子消息体的一部分

    例如:Content-Disposition:form-data;name="fieldname"

    可忽略:

    https://www.cnblogs.com/fengxiaoyuan/p/11842743.html

  • 相关阅读:
    A:hover,A:visited 和A:active的区别
    什么是UrlEncode
    ERP系统BOM详细解析(一)
    ERP术语 [转]
    ERP理论的形成
    MRP的計算步驟
    ERP系统模块完全解析──物料编码分章(一)
    Transact SQL 常用语句以及函数
    SQL 2000中的触发器使用
    修改docker0默认IP地址
  • 原文地址:https://www.cnblogs.com/fengxiaoyuan/p/10971012.html
Copyright © 2011-2022 走看看