识别一个表示
当一个完整或部分的表示在一个消息体重转移时,发送者通常希望提供或接收者希望决定一个资源对应的表示的标识符。
对于一个请求消息:
- 如果请求有Content-Location头字段,那么发送者断言负载提是由Content-Location的字段值指定的资源的附载体。然而,这样的断言不能被信任,除非它可以被通过其他含义(不在本规范定义)确定。这个信息科恩那个对于校订历史链接有帮助。
- 否则,负载提是未确认的。
对于一个响应消息,下列的规则被按顺序应用直到找到一个匹配的:
- 如果请求方法是GET或者HEAD并且响应状态码是200(成功),204(无内容),206(部分内容),或304(未修改),负载体是由有效的请求URI(RFC7230,5.5节)指示的资源的表示。
- 如果请求方法是GET或者HEAD并且响应状态码是203(非权威信息),负载是一个由中介提供的可能被修改或增强的目标资源的表示。
- 如果响应有Content-Location头字段,并且它的字段值是一个与有效请求URI相同的URI引用,负载体是由有效请求URI指示的资源的表示。
- 如果响应有Content-Location头字段并且它的字段值是一个与有效请求URI不同的URI的引用,那么发送者断言负载体是由Content-Location字段值指示的资源的表示。然而,这个断言不能被信任除非它可以被其他含义(未在本规范定义)确认。
- 否则,负载体是未确认的。
Content-Location
“Content-Location”头字段引用一个可以在这个消息的负载体重用作一个特定资源对应的表示的标识符URI。换句话说,如果在这个消息生成的时候在这个URI上执行一个GET请求,那么一个200(OK)响应将包含在这个消息中作为有效载荷包含的相同表示。
Content-Location = absolute-URI / partial-URI
Content-Location值不是有效请求URI(RFC7230,5.5)的代替品。它是表示元数据。它和为MIME的实体部分定义(RFC2557,第4节)的同名头字段有相同的语法和语义。但是它在HTTP消息中的出现对HTTP接收者有一些特殊的启示。
如果Content-Location包括在一个2xx(成功的)响应消息中,并且它的值(转换成据对形式后)指向一个与有效请求URI相同的URI,那么接收者可能考虑负载是那个资源在由消息创建时刻的表示。对于一个GET(4.3.1节)或HEAD(4.3.2节)的请求,这与服务器不提供Content-Location时的默认语义相同。对于一个状态改变请求如PUT(4.3.4节)或POST(4.3.3节),它暗示服务器的响应包含了资源的新的表示,从而区别于可能只报告行为的表述(例如,“它生效了!”)。这允许创作应用程序更新他们的本地副本,而不需要后续的GET请求。
如果Content-Location包括在一个2xx(成功的)响应消息中,并且它的值(转换成据对形式后)指向一个与有效请求URI不同的URI,那么源服务器声称该URI是与封闭表示对应的不同资源的标识符。这种声明只有在标识符功效相同的资源所有者时可以被信任,这不能通过HTTP进行编程确定。
- 对一个GET或HEAD请求的响应,这表示有效的请求URI是指经受内容协商的资源,并且Content-Location字段值是所选表示的更具体的标识符。
- 对于一个状态改变方法的201(创建)响应,与Location字段值相同的Content-Location字段值指示这个负载体是新创建资源的当前表示。
- 否则,这样的Content-Location表示这个有效载荷是报告所请求的动作的状态的表示,并且在给定的URI下相同的报告可用(用于将来的GET访问)。例如,一个通过POST请求生成的购买交易可能包括一个收据文档作为200(成功)响应的负载实体;Content-Location字段值提供一个用于在未来检索相同收据的副本的标识符。
在请求消息中发送Content-Location的用户代理说明它的值指向用户代理最初获得封闭表示的内容(在该用户代理进行任何修改之前)。换句话说,用户代理提供了一个原始表示的资源的反向链接。
在请求消息中接收到Content-Location字段的源服务器必须将消息视为短暂的请求上下文而不是作为表示的一部分的元数据逐字保存。源服务器可能使用那个上下文来知道处理请求或者为其他用途而保存它,例如在源链接或版本元数据中。但是,源服务器不得使用这个上下文信息来改变请求语义。
例如,如果客户端对协商资源发出PUT请求,并且源服务器接受该PUT(不重定向),则该资源的新状态预期与该PUT中提供的一个表示一致; Content-Location不能用作反向内容选择标识符的形式来仅更新协商表示中的一个。如果用户代理想要后者的语义,它会直接将PUT应用到Content-Location URI。