Wednesday, July 4, 2012

Example: HTTP LogFormat (LF) protocol option

Sometimes, when you're testing a web service stored procedure that returns an HTML page to the browser, you run into strange symptoms.

For example: Internet Explorer 8 displays an empty page, and when
you click on "View Page Source" all you see is <HTML></HTML>.
That's when you really want to see what's going on at the boundary between the SQL Anywhere and the browser; i.e., you want to look at the actual HTTP traffic.

SQL Anywhere lets you record the HTTP traffic in a text file, and it gives you four options to set it up:
The Help's pretty good at explaining what those options mean and what they look like, but not how to code them inside an actual dbsrv12.exe -xs option string.

That's what this blog post is for...

...to show an actual working example, complete with the "double quotes" around the LogFormat (lf) option the Help doesn't talk about:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"%SQLANY12%\%BIN%\dbspawn.exe"^
  -f^
  "%SQLANY12%\%BIN%\dbsrv12.exe"^
  -c 25p^
  -ch 50p^
  -cr-^
  -gk all^
  -gn 120^
  -gna 0^
  -n foxhound2^
  -o foxhound2_debug.txt^
  -oe foxhound2_debug_startup.txt^
  -on 1M^
  -qn^
  -sb 0^
  -x tcpip^
  -xd^
  -xs http(port=80;maxsize=0;to=600;kto=600;lopt=ALL,HEADERS;lf="@T - @I - @U - @R - @L - @W - @E";lsize=1M;log=foxhound2_http_log.txt)^
  foxhound2.db^
  -n f
Here's a snippet from foxhound2_http_log.txt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
07/01 15:46:47.986 - 127.0.0.1 - /foxhound - 200 OK - 594 - 0.756 -
--> Keep-Alive: 115
--> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22 (.NET CLR 3.5.30729)
--> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
--> @HttpMethod: GET
--> Host: localhost
--> Connection: keep-alive
--> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
--> Accept-Language: en-us,en;q=0.5
--> @HttpVersion: HTTP/1.1
--> Accept-Encoding: gzip,deflate
--> @HttpURI: /foxhound
<-- Date: Sun, 01 Jul 2012 19:46:47 GMT
<-- Transfer-Encoding: chunked
<-- Connection: Keep-Alive
<-- Expires: Sun, 01 Jul 2012 19:46:47 GMT
<-- Content-Type: text/html
<-- Server: SQLAnywhere/12.0.1.3298
07/01 15:46:48.062 - 127.0.0.1 - /rroad_help_frame?f=foxhound_menu - 200 OK - 18543 - 0.048 -
--> Keep-Alive: 115
--> @HttpQueryString: f=foxhound_menu
--> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22 (.NET CLR 3.5.30729)
--> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
--> @HttpMethod: GET
--> Host: localhost
--> Connection: keep-alive
--> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
--> Accept-Language: en-us,en;q=0.5
--> @HttpVersion: HTTP/1.1
--> Accept-Encoding: gzip,deflate
--> @HttpURI: /rroad_help_frame?f=foxhound_menu
<-- Date: Sun, 01 Jul 2012 19:46:48 GMT
<-- Transfer-Encoding: chunked
<-- Connection: Keep-Alive
<-- Expires: Sun, 01 Jul 2012 19:46:48 GMT
<-- Content-Type: text/html
<-- Server: SQLAnywhere/12.0.1.3298
...
In my case (not shown here) it was a METHOD="POST" request that was mistakenly sent via METHOD="GET", and the resulting giant-fat-bloated-URL was too long for Internet Explorer 8.

Not too long for Chrome or Firefox or IE9, though, which was driving me craaaaazy :)...

...without the HTTP trace I never would have figured it out; I was this close to saying "Foxhound does not support IE8."


No comments: