Hi all,

I'd like to propose these two changes below:
- Remove TSUrlHttpParamsGet/Set
- Remove special treatment for the "params" segment  (not query parameters,
see below)
- Change TSUrlPathGet to include the "params" segment (as the result of the
removal of special treatment above)

RFC 1808 defined URL syntax as follows and it had "params".
<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

The syntax was updated on RFC 3986, and now semicolons do not have special
meanings in URL syntax. RFC 3986 says:

   "Aside from dot-segments in hierarchical paths, a path segment is
   considered opaque by the generic syntax.  URI producing applications
   often use the reserved characters allowed in a segment to delimit
   scheme-specific or dereference-handler-specific subcomponents.  For
   example, the semicolon (";") and equals ("=") reserved characters are
   often used to delimit parameters and parameter values applicable to
   that segment."

Since the path segment is opaque, only applications can understand the
structure. In fact, there are applications that use semicolons not only in
between "path" and "query" but also at random places in the "path" segment.
For example, "/abc;p1=x/def;p2=y/ghi". Some people call this  Matrix
Parameters. Although there seems to be common sense in the way of embedding
parameters into the "path" segment, it's not really standardized (please
let me know if there is a specification, but not blog posts). It is
impossible to support all the variations of Matrix Parameters syntaxes.

ATS has TSUrlHttpParamsGet which is supposed to return the "params" segment
defined on RFC 1808, but the implementation is incomplete (there are
patterns that can not be parsed correctly). And needless to say, it does
not support Matrix Parameters.

I think ATS should drop the support for the "params" segment because it's
no longer defined on RFCs and TSUrlHttpParamsGet does not satisfy anyone's
expectations properly. Moreover, the existence of TSUrlHttpParamsGet is
error prone because some people don't expect there is such a segment.

The changes I proposed above would be made in 2 steps.

Step 1 (ATS 10):
- Mark TSUrlHttpParamsGet as deprecated
- Make TSUrlHttpParamsGet return empty string
- Remove code for the "params" segment (i.e. the code that searches a
semicolon, etc)
- Make TSUrlPathGet include the "params" segment which is currently
returned by TSUrlHttpParamsGet

Step 2 (ATS 11 or later):
- Remove TSUrlHttpParamsGet

In step 1, there should be no negative impact to existing plugins. Existing
code should work without any code changes. Some plugins that use
TSUrlPathGet might work a bit differently because the API would include the
string between a semicolon and a question mark, but such plugins might have
been working incorrectly because of the incomplete implementation of the
URL parser.

Thoughts?

Thanks,
Masakazu

Reply via email to