Re: If-ID and Unless-ID Preconditions

Roy T. Fielding:
>[...]
>In summary, the proposal now looks like:
>
>      200 == OK
>      206 == Partial Content
>      304 == Use Local Copy [includes the Content-ID of the copy chosen]
>      412 == Precondition False
>
>   GET unless we would be given one of the variants already cached:
>
>     Request:   GET + Unless-ID
>     Response:  304 if Content-ID  is in Unless-ID
>                200 if Content-ID not in Unless-ID
>
>   Cache validation:
>
>     Request:   GET + IMS + Unless-ID
>     Response:  304 if Content-ID  is in Unless-ID
>                200 if Content-ID not in Unless-ID

Make that:

     Response:  304 if Content-ID  is in Unless-ID and not modified since
                200 if Content-ID not in Unless-ID or modified since

>   Partial GET (w/OK response if changed):
>
>     Request:   GET + Range + If-ID
>     Response:  206 if Content-ID  is in If-ID
>                200 if Content-ID not in If-ID
>
>   Partial GET (w/bad response if changed):
>
>     Request:   GET + Range + If-ID + [some indicator in Range]
>     Response:  206 if Content-ID  is in If-ID
>                412 if Content-ID not in If-ID
>
>   Precondition for all other methods:
>
>     Request:   method + If-ID
>     Response:  2xx if Content-ID  is in If-ID
>                412 if Content-ID not in If-ID
>
>     Request:   method + Unless-ID
>     Response:  412 if Content-ID  is in Unless-ID
>                2xx if Content-ID not in Unless-ID
>
>
>I think that is a reasonable and simple design.

I agree. 

Now we can argue about the syntax of the Content-ID.  You write

               Content-ID  =  "Content-ID" ":" cid
               cid  =  <a content-id as defined in RFC 1521>

I believe this means 

               cid = local-part "@" domain

Do we really want the domain?  I think it would not hurt to make the
whole thing an opaque string.  I don't think that a plaintext domain
string has enough value to justify the bandwidth.  Because of spoofing
issues, you can never use a cid without knowing its resource URI
anyway.

A quick calculation: to uniquely identify a version of a normal
resource on a UNIX based server, you would need:

  - server ip number:     32 bits
  - server port number:   16 bits (?)
  - file inode:           32 bits (?)
  - file ctime:           32 bits
                         --------- + 
                         112 bits

in base 64, this would be 19 characters.  Small enough.

> ...Roy T. Fielding

Koen.

Received on Sunday, 3 March 1996 15:45:35 UTC