美文网首页我爱编程
《http权威指南》阅读笔记,第三章,HTTP报文

《http权威指南》阅读笔记,第三章,HTTP报文

作者: 澄澄真可爱 | 来源:发表于2017-10-09 10:08 被阅读0次

    目录

    • 报文是如何流动的
    • HTTP报文的三个组成部分(起始行,首部,实体的主体)
    • 请求报文支持的各种方法
    • 和响应报文一起返回的各种状态码
    • 各种各样的首部是做什么的

    报文是如何流动的

    报文流(快递)

    就像是快递包裹(http报文),有个发货人(客户端),有个收货人(服务端),包裹上面贴了快递面单(起始行与首部),包裹里面有内容(报文主体),
    包裹程在转运中心(各种服务器代理)之间单向传递,送达收货人(服务器)的过程就是快递(报文流)
    当然这个过程是可以反向的,服务端想客户端发送报文.

    HTTP报文的三个组成部分(起始行,首部,实体的主体)

    报文(快递包裹)

    • 快递面单(起始行) 填写收货人,收货地址
    • 快递面单(首部) 填写是,是否到付,包裹里面的东西,是否保价......
    • 快递面单(自定义首部) 在包裹上写一个大大的电话号码,方便查看
    • 快递包裹(主体) 透明包装(字符串),黑箱子(二进制)

    报文格式

    请求报文

    < method> < request- URL> < version>
    < headers>

    < entity- body>

    响应报文

    < version> < status> < reason- phrase>
    < headers>

    < entity- body>

    概述

    • method: 方法

    • request-URL: 请求地址

    • version: 版本号 HTTP/<major>.<minor>
      **版本号1.12>1.2 因为主版本相同,次要版本12>2

    • status-code: 状态码 100-599之间的数字,给代码用的

    • reason-phrase: 原因短语,给人看的

    • headers:首部,0个或者多个

      常见的首部实例

      首部实例 描述
      Date:Tue, 3Oct 1997 02: 16: 03 GMT 服务器产生响应的日期
      Content-length:12345 实体的主体部分有12345字节的数据
      Content-type:image/gif 实体的主体部分是一张gif图片
      Accept: image/ gif, image/ jpeg, text/ html 客户端可以接收gif图片JPG图片与HTML

      首部延续行
      分行提高可读性,分行的前面需要加空格或者tab制表符

    • entity-body:主体,可有可无

    请求报文支持的各种方法

    方法 描述 是否包含主体
    get 从服务器获取一份文档
    post 向服务器发送需要处理的数据
    put 向服务器提交一份文档
    delete 从服务器删除一份文档
    options 决定服务器上可以执行哪些方法
    head 只从服务器获取文档的首部
    trace 弃用 -
    track 弃用 -
    coonect 弃用 -

    * delete不一定真的能删除,服务器可以不响应该请求

    和响应报文一起返回的各种状态码

    状态码分类

    整体范围 已定义范围 分类
    100~199 100~101 信息提示
    200~299 200~206 成功
    300~399 300~305 重定向
    400~499 400~415 客户端错误
    500~599 500~505 服务器错误

    状态码明细

    状态码 短语 解释
    100 Continue 收到了请求的初始部分,请客户端继续.
    101 Switching protocols 说明服务器正在根据客户端的制定,,将协议切换成Update首部所列的协议

    100

    客户端向服务器发很大文件,不确定服务器是否接受,可以先发一个带Expect:100 Continue的头,询问服务器是否接受,服务器返回 100响应后,发送实体结束.

    • 在实现的时候,有的服务器会乱发100, 客户端 要甄别过滤掉
    • 响应超时的话,客户端 也要把实体发出去,不能傻等服务器响应
    • 没有收到带Expect:100 Continue的请求, 服务器 绝对不应该响应100
    • 服务器 已经收到实体的情况下,就不用返回100,可以返回其他状态码跳过100
    • 代理服务器 收到100请求的时候,要进行判断
      • 下流服务器 支持不清楚 http/1.1的话,转发;
      • 下流服务器 不支持,返回100,再可以去掉这个头,再转发;
      • 下流服务器 不支持,返回417错误;

    101

    客户端 使用 Upgrade 头的时候,服务器认可就返回101。Upgrade头用于 升级协议 的,比如现在用的是http/1.1,我想用http/2.1或者我想用 websocket ,就可以在请求头里面加上Upgrade:websocket 或者 Upgrade:http/2.0

    状态码 短语 解释
    200 OK 如你所愿,已搞定
    201 Created 创建成功,主要用于put请求的返回
    202 Accepted 收到,加入待办,可以返回完成时间估计,进度
    203 Non-Authoritative-Information 非权威消息,比如客户端要个苹果,代理服务器从服务器拿个苹果(200),吃了一口再给你(203)
    204 No-Content 木有内容,form的action,a链接返回204,不会跳转,可以判断访问成功
    205 Reset-Content 用于表单提交后,重置表单而不刷新页面
    206 Particle-Content 返回部分内容,必须返回Content-Range、Date、Etag或者Content-Location首部
    状态码 短语 解释
    300 Multiple Choices 找到好多,选一个呗
    301 Moved Permanetly 没找到,看看别的呗
    302 Found 找到了,不过先看看别的
    303 See Other 看看别的,响应post请求
    304 No Modified 未修改,看你的缓存去
    305 Use Proxy 使用代理服务器(小明找老师请假,老师:出去,让你爸打电话给我)
    306 弃用
    307 Temporary Redirect 重定向的地址必须是get或者head请求,否则浏览器不自动跳转,需要用户确定
    状态码 短语 解释
    400 Bad Request 客户端请求的语法错误,服务器无法理解
    401 Unauthorized 请求要求用户的身份认证
    402 Payment Required 保留,将来使用
    403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
    404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置“您所请求的资源无法找到”的个性页面
    405 Method Not Allowed 客户端请求中的方法被禁止
    406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
    407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
    408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
    409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
    410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
    411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
    412 Precondition Failed 客户端请求信息的先决条件错误
    413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
    414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
    415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
    416 Requested range not satisfiable 客户端请求的范围无效
    417 Expectation Failed 服务器无法满足Expect的请求头信息
    状态码 短语 解释
    500 Internal Server Error 服务器内部错误,无法完成请求
    501 Not Implemented 服务器不支持请求的功能,无法完成请求
    502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
    503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
    504 Gateway Time-out 类似于408,充当网关或代理的服务器,未及时从远端服务器获取请求
    505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

    各种各样的首部是做什么的

    通用首部

    通用的信息性首部

    首部 描述
    Coonection 允许客户端服务器指定与请求/响应连接有关的选项
    Date 报文创建时间
    MIME-Version 给出发送端的MIME版本
    Trailer 如果报文采用分块传输编码就可以用这个首部列出位于报文拖挂( trailer) 部分的首部集合
    Transfer-Encoding 告知接收端,对报文采用了怎样的接收方式
    Update 给出发送端想要升级使用的新版本或协议
    Via 显示报文经过的中间节点(代理,网关)

    通用的缓存首部

    首部 描述
    Cache-Control 用于随报文传送缓存指示
    Pragma 另一种随报文传送指示的方式,但并不专用于缓存

    请求首部

    请求的信息性首部

    首部 描述
    Client_IP 客户端IP
    From 提供客户端用户的Email地址
    Host 给出接收请求的服务器地址和端口
    Referer 提供了当前请求URI的文档的URL
    UA-Color 客户端显示器颜色相关
    UA-CPU 客户端CPU的类型或制造商
    UA-Disp 客户端显示屏幕
    UA-OS 客户端系统
    UA-Pixels 客户端像素
    User_Agent 发起请求的客户端名

    Accept首部

    首部 描述
    Accept 媒体类型
    Accept-Charset 字符集
    Accept-Encoding 编码方式
    Accept-Language 语言
    TE 拓展传输编码

    条件请求首部

    首部 描述
    Expect 允许客户端列出某请求所要求的服务器行为
    If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档
    If-Modified-Since 某时间点后,资源被修改才返回
    If-None-Match 返回标记不匹配的
    If-Range 对文档的某个范围进行请求
    If-Unmodefied-Since 某时间点后,资源没有被改动,才返回
    Range 请求范围

    安全请求首部

    首部 描述
    Authorization 身份认证
    Cookie 向服务器传送一个令牌
    Cookie2 用来说明请求端支持的cookie版本

    代理请求首部

    • Max-Forward
    • Proxy-Authorization
    • Proxy-Coonection

    响应首部

    首部 描述
    Age 响应持续时间
    Public 服务器为其资源支持的请求方法列表
    Retry-After 如果资源不可用,在此日期重试
    Title 对HTML文档来说,就是源端给出的标题
    Warning 比原因短语中更详细的一些警告报文
    • 协商首部
    • 安全响应首部
    • 实体首部
    • 内容首部
    • 实体缓存首部

    参考

    http状态码详解
    http中的204和205

    书中的内容很多都老旧了,请参考 http://www.w3c.org/
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP

    相关文章

      网友评论

        本文标题:《http权威指南》阅读笔记,第三章,HTTP报文

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