{ title: "GoAhead FAQ", crumbs: [ { 'Getting Started': '../start/' }, ], }

# GoAhead™ FAQ

If you don't find the answers you need here, please consult the Project Resources and perhaps submit an issue/bug request on the GitHub repository.

### General Questions

- Why is Embedthis Software supporting and distributing the GoAhead WebServer?
- How does the GoAhead WebServer compare with Appweb?
- Can I disable features to minimize memory footprint at run-time?
- How can I upload large files?

### Building Questions

- When I build the source, can I disable features at compile time?

### Diagnostic Questions

- How can I trouble-shoot with trace?

### Embedded Questions

- How small can I make GoAhead?
- How can I cross compile?

## Answers

Why is Embedthis Software supporting and distributing the GoAhead WebServer?

The GoAhead WebServer was originally written by Michael O'Brien, CEO of Embedthis and it remains a very popular to this day. With the acquisition of GoAhead by Oracle, Oracle asked Embedthis to support existing GoAhead WebServer customers and to offer commercial licenses for the GoAhead WebServer.

How does the GoAhead WebServer compare with Appweb?

The GoAhead WebServer is a simple, compact web server that has been widely ported to many embedded operating systems. Appweb is faster and more powerful — but requires more memory. If you need a very simple, low end web server and have little memory available, the GoAhead WebServer is ideal. If you need higher performance and extended security, then Appweb is the right choice.

Can I disable features to minimize memory footprint at run-time?

Yes. GoAhead has build-time configuration settings to select required features and minimize memory footprint. See Building from Source for details of the configuration options.

How can I upload large files?

You need to increase the LimitRequestBody limit in the goahead.conf file. This imposes a maximum upload file size. Some samples have a MAX_FILE_SIZE input field in the HTML form. This however, is just a hint to the browser, and is only processed by some browsers.

When I build from the source, can I disable features at compile time?

Yes. When GoAhead is built from source, a single bld.h header controls exactly what features and modules are built into the server. For example, if you don't require SSL support, and you wish to minimize memory footprint, you can run:

`./configure --without ssl`

How can I trouble-shoot with trace?

Run goahead or winGoAhead with the logging switch "-l". The logging switch takes the following parameters:

`goahead -l logName[:logLevel][.maxSize]`

Where logLevel is a number between 0 and 9. Zero is the least verbose. To debug HTTP requests, a level of 6 provides the detail of all the request / response exchanges. MaxSize is the maximum size of the log file in MB. When the maximum size is exceeded, the log file will be rotated to logName.old and a new log file will be started.

How small can I make GoAhead?

GoAhead 3 has about 115K of code. For a minimal footprint on GoAhead, use:

`./configure --without all --set cgi=false --set javascript=false`

This will disable most features including CGI and Javascript but still provide a running web server.

Things to consider when building small:

- Disable all possible features. In particular, disable the CGI and Javascript handlers
- Don't build DEBUG. Use: ./configure -release
- Use a small C-Library such as uClibc on embedded Linux systems

How can I cross compile?

The GoAhead configure command has switches to specify the build system and the target system that will host GoAhead. For example:

`./configure --platform vxworks-arm`

When cross compiling, you also need to tell configure about your cross-compilation tool chain. This means the names of your compiler, library archiver, and other utilities and flags. The configure program listens to the settings of the AR, CC, NM, RANLIB, STRIP, CFLAGS, IFLAGS and LDFLAGS environment variables and will pass their values into the build system. These will be used to define the cross-compilation tool chain. You can also specify an alternate build tool chain by using the same variables but with a BUILD_ prefix. For example:

`DIR=/path/to/cross-tools ; \ AR=$DIR/bin/ar.exe \ CC=$DIR/bin/cc.exe \ LD=$DIR/bin/cc.exe \ NM=$DIR/nm.exe \ RANLIB=$DIR/ranlib.exe \ STRIP=$DIR/strip.exe \ CFLAGS="-I$DIR/include \ ./configure --debug --platform linux-arm`

For more details, please read: Cross-Compiling in the MakeMe online documentation.

## Need more help?

If you have any further questions, please consult the Project Resources and perhaps submit an issue/bug request on the GitHub repository.