haproxy BADREQ errorsMysterious HAProxy request errorsHAProxy: Display a “BADREQ” | BADREQ's by the thousandsHAProxy tuning - can't support > 50 concurrent usersserver timeout and retry in HAProxy 502HaProxy giving - 503 Service UnavailableHAProxy performance issuesIntermittent 504 errors with HAProxyHAProxy - Error 408 - randomlyHAProxy backend requests time out with high waiting time for the serverReceiving BADREQ 400 errors on HaProxy?
How to learn Linux system internals
Is this a bug in plotting step functions?
Is it expected that a reader will skip parts of what you write?
Why can my keyboard only digest 6 keypresses at a time?
Did Apple bundle a specific monitor with the Apple II+ for schools?
AMPScript SMS InsertDE() function not working in SMS
Can the removal of a duty-free sales trolley result in a measurable reduction in emissions?
Teaching a class likely meant to inflate the GPA of student athletes
What is the color of artificial intelligence?
How to trick the reader into thinking they're following a redshirt instead of the protagonist?
Is using 'echo' to display attacker-controlled data on the terminal dangerous?
Can all groups be thought of as the symmetries of a geometrical object?
Ability To Change Root User Password (Vulnerability?)
Sci-fi novel: ark ship from Earth is sent into space to another planet, one man woken early from cryosleep paints a giant mural
What is the logic behind taxing money for property?
New bike, tubeless tire will not inflate
I've been given a project I can't complete, what should I do?
Are inverted question and exclamation mark supposed to be symmetrical to the "normal" counter-parts?
Solve Riddle With Algebra
Increase speed altering column on large table to NON NULL
How can I remove material from this wood beam?
Is it safe to change the harddrive power feature so that it never turns off?
Separate SPI data
First sign that you should look for another job?
haproxy BADREQ errors
Mysterious HAProxy request errorsHAProxy: Display a “BADREQ” | BADREQ's by the thousandsHAProxy tuning - can't support > 50 concurrent usersserver timeout and retry in HAProxy 502HaProxy giving - 503 Service UnavailableHAProxy performance issuesIntermittent 504 errors with HAProxyHAProxy - Error 408 - randomlyHAProxy backend requests time out with high waiting time for the serverReceiving BADREQ 400 errors on HaProxy?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I am seeing errors similar to the following in my haproxy logs:
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51940 [18/Jul/2011:17:05:24.339] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6001 408 212 - - cR-- 100/89/0/0/0 0/0 "<BADREQ>"
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51943 [18/Jul/2011:17:05:24.341] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6000 408 212 - - cR-- 99/88/0/0/0 0/0 "<BADREQ>"
etc...
So far I have tried to increase the client timeout (to 6 seconds from 3), and increase the http request buffer from 16k to 32k. The errors still appear.
Can anyone give me guidance on what to look for here?
haproxy
add a comment |
I am seeing errors similar to the following in my haproxy logs:
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51940 [18/Jul/2011:17:05:24.339] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6001 408 212 - - cR-- 100/89/0/0/0 0/0 "<BADREQ>"
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51943 [18/Jul/2011:17:05:24.341] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6000 408 212 - - cR-- 99/88/0/0/0 0/0 "<BADREQ>"
etc...
So far I have tried to increase the client timeout (to 6 seconds from 3), and increase the http request buffer from 16k to 32k. The errors still appear.
Can anyone give me guidance on what to look for here?
haproxy
add a comment |
I am seeing errors similar to the following in my haproxy logs:
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51940 [18/Jul/2011:17:05:24.339] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6001 408 212 - - cR-- 100/89/0/0/0 0/0 "<BADREQ>"
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51943 [18/Jul/2011:17:05:24.341] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6000 408 212 - - cR-- 99/88/0/0/0 0/0 "<BADREQ>"
etc...
So far I have tried to increase the client timeout (to 6 seconds from 3), and increase the http request buffer from 16k to 32k. The errors still appear.
Can anyone give me guidance on what to look for here?
haproxy
I am seeing errors similar to the following in my haproxy logs:
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51940 [18/Jul/2011:17:05:24.339] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6001 408 212 - - cR-- 100/89/0/0/0 0/0 "<BADREQ>"
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51943 [18/Jul/2011:17:05:24.341] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6000 408 212 - - cR-- 99/88/0/0/0 0/0 "<BADREQ>"
etc...
So far I have tried to increase the client timeout (to 6 seconds from 3), and increase the http request buffer from 16k to 32k. The errors still appear.
Can anyone give me guidance on what to look for here?
haproxy
haproxy
asked Jul 18 '11 at 15:08
electric_alelectric_al
16113
16113
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
A Preconnect from a browser could lead to BADREQ
too if the browser is not using all connections. For example when a user is downloading only one file per browser.
That means there are two possible causes for BADREQ
with cR--
or CR--
(verified with HAProxy v1.5-dev24):
- Unused connection: That means for HTTP(S) a client connected per TCP but no HTTP request header was sent until from
timeout http-request
(CR--
) or the client was closing the connection again (cR--
). Cause: Unused connection from a preconnect of a normal client or loadbalancer or from a scan. - Bad Request. A client was sending a bad request. These errors should be visible per stats socket (see previous answer from womble).
Most modern browsers like Firefox or Chrome are doing a preconnect. I was seeing that Firefox or Chrome were opening always at least 2 connections even if the browser is doing only one request like downloading a file (for example only downloading http://cdn.sstatic.net/serverfault/img/favicon.ico
)
Increasing the value of timeout http-request
in your HAProxy configuration can help to reduce such log entries for unused connections just because a higher value means a higher chance that the connection will be used from a client, but you are also risking that your server cannot handle all open (idle) connections anymore.
If you are using another loadbalancer like Amazon ELB in front of HAProxy, check that this timeout in HAProxy is matching with the loadbalancer, because they could use preconnect too.
For unused connections you can use option dontlognull
in HAProxy to disable this log entries. Quote from HAProxy Docu for this option:
It is generally recommended not to use this option in uncontrolled
environments (eg: internet), otherwise scans and other malicious activities
would not be logged.
add a comment |
=> The client never completed its request, which was aborted by the
time-out ("c---") after 5s, while the proxy was waiting for the request
headers ("-R--"). Nothing was sent to any server, but the proxy could
send a 408 return code to the client.
Solution: change "timeout http-request" to 20s ore more instead your 5s.
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
add a comment |
Just wasted a day on this issue. We found out that some request headers were too large. 8k is the default max size in HAProxy (all headers combined) and our company loves cookies. In our case, about 8% of the request headers were too large and therefore truncated after the 8092th byte.
From the docs:
If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
than this size, haproxy will return HTTP 502 (Bad Gateway).
We updated the haproxy.cfg
file with the following values:
global
# request limit is (bufsize - maxrewrite), our desired limit is 16k (8k is default)
tune.maxrewrite 16384
tune.bufsize 32768
Hope it helps!
add a comment |
BADREQ just means that the client sent a bad request; in HTTP mode, it could mean that the client stuffed up, and there's nothing you can do about it. To see what the exact error was, connect to the stats socket (using socat) and run show errors
. Chances are it's someone trying to run an exploit on some other webserver, so you can ignore it.
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "2"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f291467%2fhaproxy-badreq-errors%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
A Preconnect from a browser could lead to BADREQ
too if the browser is not using all connections. For example when a user is downloading only one file per browser.
That means there are two possible causes for BADREQ
with cR--
or CR--
(verified with HAProxy v1.5-dev24):
- Unused connection: That means for HTTP(S) a client connected per TCP but no HTTP request header was sent until from
timeout http-request
(CR--
) or the client was closing the connection again (cR--
). Cause: Unused connection from a preconnect of a normal client or loadbalancer or from a scan. - Bad Request. A client was sending a bad request. These errors should be visible per stats socket (see previous answer from womble).
Most modern browsers like Firefox or Chrome are doing a preconnect. I was seeing that Firefox or Chrome were opening always at least 2 connections even if the browser is doing only one request like downloading a file (for example only downloading http://cdn.sstatic.net/serverfault/img/favicon.ico
)
Increasing the value of timeout http-request
in your HAProxy configuration can help to reduce such log entries for unused connections just because a higher value means a higher chance that the connection will be used from a client, but you are also risking that your server cannot handle all open (idle) connections anymore.
If you are using another loadbalancer like Amazon ELB in front of HAProxy, check that this timeout in HAProxy is matching with the loadbalancer, because they could use preconnect too.
For unused connections you can use option dontlognull
in HAProxy to disable this log entries. Quote from HAProxy Docu for this option:
It is generally recommended not to use this option in uncontrolled
environments (eg: internet), otherwise scans and other malicious activities
would not be logged.
add a comment |
A Preconnect from a browser could lead to BADREQ
too if the browser is not using all connections. For example when a user is downloading only one file per browser.
That means there are two possible causes for BADREQ
with cR--
or CR--
(verified with HAProxy v1.5-dev24):
- Unused connection: That means for HTTP(S) a client connected per TCP but no HTTP request header was sent until from
timeout http-request
(CR--
) or the client was closing the connection again (cR--
). Cause: Unused connection from a preconnect of a normal client or loadbalancer or from a scan. - Bad Request. A client was sending a bad request. These errors should be visible per stats socket (see previous answer from womble).
Most modern browsers like Firefox or Chrome are doing a preconnect. I was seeing that Firefox or Chrome were opening always at least 2 connections even if the browser is doing only one request like downloading a file (for example only downloading http://cdn.sstatic.net/serverfault/img/favicon.ico
)
Increasing the value of timeout http-request
in your HAProxy configuration can help to reduce such log entries for unused connections just because a higher value means a higher chance that the connection will be used from a client, but you are also risking that your server cannot handle all open (idle) connections anymore.
If you are using another loadbalancer like Amazon ELB in front of HAProxy, check that this timeout in HAProxy is matching with the loadbalancer, because they could use preconnect too.
For unused connections you can use option dontlognull
in HAProxy to disable this log entries. Quote from HAProxy Docu for this option:
It is generally recommended not to use this option in uncontrolled
environments (eg: internet), otherwise scans and other malicious activities
would not be logged.
add a comment |
A Preconnect from a browser could lead to BADREQ
too if the browser is not using all connections. For example when a user is downloading only one file per browser.
That means there are two possible causes for BADREQ
with cR--
or CR--
(verified with HAProxy v1.5-dev24):
- Unused connection: That means for HTTP(S) a client connected per TCP but no HTTP request header was sent until from
timeout http-request
(CR--
) or the client was closing the connection again (cR--
). Cause: Unused connection from a preconnect of a normal client or loadbalancer or from a scan. - Bad Request. A client was sending a bad request. These errors should be visible per stats socket (see previous answer from womble).
Most modern browsers like Firefox or Chrome are doing a preconnect. I was seeing that Firefox or Chrome were opening always at least 2 connections even if the browser is doing only one request like downloading a file (for example only downloading http://cdn.sstatic.net/serverfault/img/favicon.ico
)
Increasing the value of timeout http-request
in your HAProxy configuration can help to reduce such log entries for unused connections just because a higher value means a higher chance that the connection will be used from a client, but you are also risking that your server cannot handle all open (idle) connections anymore.
If you are using another loadbalancer like Amazon ELB in front of HAProxy, check that this timeout in HAProxy is matching with the loadbalancer, because they could use preconnect too.
For unused connections you can use option dontlognull
in HAProxy to disable this log entries. Quote from HAProxy Docu for this option:
It is generally recommended not to use this option in uncontrolled
environments (eg: internet), otherwise scans and other malicious activities
would not be logged.
A Preconnect from a browser could lead to BADREQ
too if the browser is not using all connections. For example when a user is downloading only one file per browser.
That means there are two possible causes for BADREQ
with cR--
or CR--
(verified with HAProxy v1.5-dev24):
- Unused connection: That means for HTTP(S) a client connected per TCP but no HTTP request header was sent until from
timeout http-request
(CR--
) or the client was closing the connection again (cR--
). Cause: Unused connection from a preconnect of a normal client or loadbalancer or from a scan. - Bad Request. A client was sending a bad request. These errors should be visible per stats socket (see previous answer from womble).
Most modern browsers like Firefox or Chrome are doing a preconnect. I was seeing that Firefox or Chrome were opening always at least 2 connections even if the browser is doing only one request like downloading a file (for example only downloading http://cdn.sstatic.net/serverfault/img/favicon.ico
)
Increasing the value of timeout http-request
in your HAProxy configuration can help to reduce such log entries for unused connections just because a higher value means a higher chance that the connection will be used from a client, but you are also risking that your server cannot handle all open (idle) connections anymore.
If you are using another loadbalancer like Amazon ELB in front of HAProxy, check that this timeout in HAProxy is matching with the loadbalancer, because they could use preconnect too.
For unused connections you can use option dontlognull
in HAProxy to disable this log entries. Quote from HAProxy Docu for this option:
It is generally recommended not to use this option in uncontrolled
environments (eg: internet), otherwise scans and other malicious activities
would not be logged.
answered May 1 '14 at 19:16
Markus GriederMarkus Grieder
6111
6111
add a comment |
add a comment |
=> The client never completed its request, which was aborted by the
time-out ("c---") after 5s, while the proxy was waiting for the request
headers ("-R--"). Nothing was sent to any server, but the proxy could
send a 408 return code to the client.
Solution: change "timeout http-request" to 20s ore more instead your 5s.
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
add a comment |
=> The client never completed its request, which was aborted by the
time-out ("c---") after 5s, while the proxy was waiting for the request
headers ("-R--"). Nothing was sent to any server, but the proxy could
send a 408 return code to the client.
Solution: change "timeout http-request" to 20s ore more instead your 5s.
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
add a comment |
=> The client never completed its request, which was aborted by the
time-out ("c---") after 5s, while the proxy was waiting for the request
headers ("-R--"). Nothing was sent to any server, but the proxy could
send a 408 return code to the client.
Solution: change "timeout http-request" to 20s ore more instead your 5s.
=> The client never completed its request, which was aborted by the
time-out ("c---") after 5s, while the proxy was waiting for the request
headers ("-R--"). Nothing was sent to any server, but the proxy could
send a 408 return code to the client.
Solution: change "timeout http-request" to 20s ore more instead your 5s.
answered Aug 14 '11 at 15:31
stamnikstamnik
411
411
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
add a comment |
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
The problem is that the requests a simple GET requests, so I cant see why a client would not be able to complete the request in 5 seconds.
– electric_al
Aug 15 '11 at 9:19
add a comment |
Just wasted a day on this issue. We found out that some request headers were too large. 8k is the default max size in HAProxy (all headers combined) and our company loves cookies. In our case, about 8% of the request headers were too large and therefore truncated after the 8092th byte.
From the docs:
If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
than this size, haproxy will return HTTP 502 (Bad Gateway).
We updated the haproxy.cfg
file with the following values:
global
# request limit is (bufsize - maxrewrite), our desired limit is 16k (8k is default)
tune.maxrewrite 16384
tune.bufsize 32768
Hope it helps!
add a comment |
Just wasted a day on this issue. We found out that some request headers were too large. 8k is the default max size in HAProxy (all headers combined) and our company loves cookies. In our case, about 8% of the request headers were too large and therefore truncated after the 8092th byte.
From the docs:
If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
than this size, haproxy will return HTTP 502 (Bad Gateway).
We updated the haproxy.cfg
file with the following values:
global
# request limit is (bufsize - maxrewrite), our desired limit is 16k (8k is default)
tune.maxrewrite 16384
tune.bufsize 32768
Hope it helps!
add a comment |
Just wasted a day on this issue. We found out that some request headers were too large. 8k is the default max size in HAProxy (all headers combined) and our company loves cookies. In our case, about 8% of the request headers were too large and therefore truncated after the 8092th byte.
From the docs:
If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
than this size, haproxy will return HTTP 502 (Bad Gateway).
We updated the haproxy.cfg
file with the following values:
global
# request limit is (bufsize - maxrewrite), our desired limit is 16k (8k is default)
tune.maxrewrite 16384
tune.bufsize 32768
Hope it helps!
Just wasted a day on this issue. We found out that some request headers were too large. 8k is the default max size in HAProxy (all headers combined) and our company loves cookies. In our case, about 8% of the request headers were too large and therefore truncated after the 8092th byte.
From the docs:
If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
than this size, haproxy will return HTTP 502 (Bad Gateway).
We updated the haproxy.cfg
file with the following values:
global
# request limit is (bufsize - maxrewrite), our desired limit is 16k (8k is default)
tune.maxrewrite 16384
tune.bufsize 32768
Hope it helps!
edited May 24 at 20:47
answered Apr 3 '17 at 20:54
PedroPedro
186116
186116
add a comment |
add a comment |
BADREQ just means that the client sent a bad request; in HTTP mode, it could mean that the client stuffed up, and there's nothing you can do about it. To see what the exact error was, connect to the stats socket (using socat) and run show errors
. Chances are it's someone trying to run an exploit on some other webserver, so you can ignore it.
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
add a comment |
BADREQ just means that the client sent a bad request; in HTTP mode, it could mean that the client stuffed up, and there's nothing you can do about it. To see what the exact error was, connect to the stats socket (using socat) and run show errors
. Chances are it's someone trying to run an exploit on some other webserver, so you can ignore it.
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
add a comment |
BADREQ just means that the client sent a bad request; in HTTP mode, it could mean that the client stuffed up, and there's nothing you can do about it. To see what the exact error was, connect to the stats socket (using socat) and run show errors
. Chances are it's someone trying to run an exploit on some other webserver, so you can ignore it.
BADREQ just means that the client sent a bad request; in HTTP mode, it could mean that the client stuffed up, and there's nothing you can do about it. To see what the exact error was, connect to the stats socket (using socat) and run show errors
. Chances are it's someone trying to run an exploit on some other webserver, so you can ignore it.
answered Jul 18 '11 at 15:24
womble♦womble
86.4k18148207
86.4k18148207
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
add a comment |
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
Thanks womble. However I think its more severe than that. Today I have seen a couple of 408 errors myself in normal browsing (but not repeatable to catch the error).
– electric_al
Jul 20 '11 at 9:22
add a comment |
Thanks for contributing an answer to Server Fault!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f291467%2fhaproxy-badreq-errors%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown