Sudheer Vinukonda created TS-3328:
-------------------------------------
Summary: TS API for setting HTTP Version for a given origin
Key: TS-3328
URL: https://issues.apache.org/jira/browse/TS-3328
Project: Traffic Server
Issue Type: Improvement
Components: Core, Plugins
Reporter: Sudheer Vinukonda
The existing TS API {{TSHttpHdrVersionSet}} allows to set http version of an
outgoing http request. However, this does only that (just update the version
field in the request). It doesn't necessarily use the updated version to build
the http request accordingly (for instance, if the http version of a 1.1
request is modified to 0.9 using this API, the request will still contain the
Host header. It doesn't remove the Host header, based on the version). It would
be desirable to have a TS API that can set the origin version and influence the
building of the request accordingly.
Below is an example of such API:
{code}
diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc
index 1abdcbf..07809b2 100644
--- a/proxy/InkAPI.cc
+++ b/proxy/InkAPI.cc
@@ -5270,6 +5270,20 @@ TSHttpTxnServerAddrSet(TSHttpTxn txnp, struct sockaddr
const* addr)
}
}
+TSReturnCode
+TSHttpTxnServerHttpVersionSet(TSHttpTxn txnp, int ver)
+{
+ sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS);
+
+ HttpSM *sm = reinterpret_cast<HttpSM *>(txnp);
+ HTTPVersion version(ver);
+ if (version != HTTPVersion(0, 0)) {
+ sm->t_state.server_info.http_version = version;
+ return TS_SUCCESS;
+ }
+ return TS_ERROR;
+}
+
void
TSHttpTxnClientIncomingPortSet(TSHttpTxn txnp, int port)
{
diff --git a/proxy/api/ts/ts.h b/proxy/api/ts/ts.h
index 4783b97..9a0e80c 100644
--- a/proxy/api/ts/ts.h
+++ b/proxy/api/ts/ts.h
@@ -1329,6 +1329,15 @@ extern "C"
tsapi TSReturnCode TSHttpTxnServerAddrSet(TSHttpTxn txnp,
struct sockaddr const* addr /**<
Address for origin server. */
);
+ /** Set the outgoing server http version.
+
+ This must be invoked before the server request is sent.
+
+ @return @c TS_SUCCESS if the outgoing server http version is valid, @c
TS_ERROR otherwise.
+ */
+ tsapi TSReturnCode TSHttpTxnServerHttpVersionSet(TSHttpTxn txnp,
+ int ver /**< http version for
outgoing server request. */
+ );
/** Get the next hop address.
*
{code}
However, discussing this API on the IRC, [~zwoop] pointed out the
inconsistency/confusion this new API might bring in with the existing TS API
{{TSHttpHdrVersionSet}}. Specifically, the resultant behavior of a plugin using
both API is unpredictable depending on the hooks used. But, the need for such
an API is still there, so opening this jira to track that requirement. The
final solution may involve coming up with a single API that can do both what
the existing API does and the requirement to build the Http request accordingly.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)