You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by "Kopel, Yakov" <yk...@websense.com> on 2012/06/27 17:39:06 UTC
CONNECT to parent proxy has URL with a trailing slash
I want to redirect a CONNECT request to parent proxy.
I'm doing it with the TSHttpTxnParentProxySet API.
The problem is that the URL that the TS is setting is invalid:
CONNECT www.google.com:443/ HTTP/1.1
Host: www.google.com:443
The TS adding to every URL a trailing slash in the end of the URL, but here it makes the URL invalid (look at http://www.ietf.org/rfc/rfc2817.txt in section 5.2).
Solution:
I'm suggesting a patch for the URL.cc file that doesn't add a trailing slash when not needed (when there is only hostname).
This is valid action as is written in the RFC (http://tools.ietf.org/html/rfc3986 in section 3) :
"When authority is present, the path must either be empty -or- begin with a slash ("/") character"
While" authority" is the hostaname.
The patch:
diff --git a/proxy/hdrs/URL.cc b/proxy/hdrs/URL.cc
index 33416b5..f18ad0f 100644
--- a/proxy/hdrs/URL.cc
+++ b/proxy/hdrs/URL.cc
@@ -778,7 +778,7 @@ url_length_get(URLImpl * url)
if (url->m_ptr_path)
length += url->m_len_path + 1; // +1 for /
- else
+ else if (!url->m_ptr_host) // we put '/' only when there is no host name
length += 1; // +1 for /
if (url->m_ptr_params)
@@ -1551,8 +1551,12 @@ url_print(URLImpl * url, char *buf_start, int buf_length, int *buf_index_inout,
buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout));
}
}
-
- TRY(mime_mem_print("/", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout));
+
+ // Put the trailing slash only if there is another content in the url (path)
+ // or that there is no host name
+ if (url->m_ptr_path || !url->m_ptr_host) {
+ TRY(mime_mem_print("/", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout));
+ }
if (url->m_ptr_path) {
TRY(mime_mem_print(url->m_ptr_path, url->m_len_path, buf_start,
Protected by Websense Hosted Email Security -- www.websense.com
Re: CONNECT to parent proxy has URL with a trailing slash
Posted by Leif Hedstrom <zw...@apache.org>.
On 6/27/12 8:39 AM, Kopel, Yakov wrote:
> I want to redirect a CONNECT request to parent proxy.
> I'm doing it with the TSHttpTxnParentProxySet API.
Can you go to Jira and see if there's a bug filed for this already?
Maybe it was you who filed it? :). I remember seeing something about
that trailing slash in a Jira ticket.
If not, just open a new ticket and attach the patch to it.
Cheers,
-- Leif
>
> The problem is that the URL that the TS is setting is invalid:
>
> CONNECT www.google.com:443/ HTTP/1.1
> Host: www.google.com:443
>
> The TS adding to every URL a trailing slash in the end of the URL, but here it makes the URL invalid (look at http://www.ietf.org/rfc/rfc2817.txt in section 5.2).
>
> Solution:
> I'm suggesting a patch for the URL.cc file that doesn't add a trailing slash when not needed (when there is only hostname).
> This is valid action as is written in the RFC (http://tools.ietf.org/html/rfc3986 in section 3) :
> "When authority is present, the path must either be empty -or- begin with a slash ("/") character"
> While" authority" is the hostaname.
>
> The patch:
>
> diff --git a/proxy/hdrs/URL.cc b/proxy/hdrs/URL.cc
> index 33416b5..f18ad0f 100644
> --- a/proxy/hdrs/URL.cc
> +++ b/proxy/hdrs/URL.cc
> @@ -778,7 +778,7 @@ url_length_get(URLImpl * url)
>
> if (url->m_ptr_path)
> length += url->m_len_path + 1; // +1 for /
> - else
> + else if (!url->m_ptr_host) // we put '/' only when there is no host name
> length += 1; // +1 for /
>
> if (url->m_ptr_params)
> @@ -1551,8 +1551,12 @@ url_print(URLImpl * url, char *buf_start, int buf_length, int *buf_index_inout,
> buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout));
> }
> }
> -
> - TRY(mime_mem_print("/", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout));
> +
> + // Put the trailing slash only if there is another content in the url (path)
> + // or that there is no host name
> + if (url->m_ptr_path || !url->m_ptr_host) {
> + TRY(mime_mem_print("/", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout));
> + }
>
> if (url->m_ptr_path) {
> TRY(mime_mem_print(url->m_ptr_path, url->m_len_path, buf_start,
>
>
>
> Protected by Websense Hosted Email Security -- www.websense.com