mirror of
https://github.com/apache/httpd.git
synced 2025-07-25 17:01:22 +00:00
Add logic to read the Upgrade header and use it in the response.
Use we you are proxying to a server that has multiple upgrade on the same IP/Port. PR 61142 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801594 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -55,7 +55,9 @@ ProxyPass "/wss2/" "wss://echo.websocket.org/"
|
||||
<p>In fact the module can be used to upgrade to other protocols, you can set the <code>upgrade</code>
|
||||
parameter in the <directive type="ProxyPass" module="mod_proxy">ProxyPass</directive>
|
||||
directive to allow the module to accept other protocol.
|
||||
NONE means you bypass the check for the header but still upgrade to WebSocket.</p>
|
||||
NONE means you bypass the check for the header but still upgrade to WebSocket.
|
||||
ANY means that <code>Upgrade</code> will read in the request headers and use
|
||||
in the response <code>Upgrade</code></p>
|
||||
</summary>
|
||||
|
||||
<seealso><module>mod_proxy</module></seealso>
|
||||
|
@ -329,6 +329,10 @@ static int proxy_wstunnel_request(apr_pool_t *p, request_rec *r,
|
||||
|
||||
if (ap_cstr_casecmp(upgrade_method, "NONE") == 0) {
|
||||
buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);
|
||||
} else if (ap_cstr_casecmp(upgrade_method, "ANY") == 0) {
|
||||
const char *upgrade;
|
||||
upgrade = apr_table_get(r->headers_in, "Upgrade");
|
||||
buf = apr_pstrcat(p, "Upgrade: ", upgrade, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
|
||||
} else {
|
||||
buf = apr_pstrcat(p, "Upgrade: ", upgrade_method, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
|
||||
}
|
||||
@ -473,7 +477,8 @@ static int proxy_wstunnel_handler(request_rec *r, proxy_worker *worker,
|
||||
if (ap_cstr_casecmp(upgrade_method, "NONE") != 0) {
|
||||
const char *upgrade;
|
||||
upgrade = apr_table_get(r->headers_in, "Upgrade");
|
||||
if (!upgrade || ap_cstr_casecmp(upgrade, upgrade_method) != 0) {
|
||||
if (!upgrade || (ap_cstr_casecmp(upgrade, upgrade_method) != 0 &&
|
||||
ap_cstr_casecmp(upgrade_method, "ANY") !=0)) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02900)
|
||||
"declining URL %s (not %s, Upgrade: header is %s)",
|
||||
url, upgrade_method, upgrade ? upgrade : "missing");
|
||||
|
Reference in New Issue
Block a user