mirror of
https://github.com/swisspol/GCDWebServer.git
synced 2026-04-05 00:04:17 +08:00
Update README.md
This commit is contained in:
12
README.md
12
README.md
@@ -7,7 +7,7 @@ GCDWebServer is a lightweight GCD based HTTP 1.1 server for Mac & iOS apps writt
|
||||
* Minimal number of source files and no dependencies on third-party source code
|
||||
* Support for streaming large HTTP bodies for requests and responses to minimize memory usage
|
||||
* Built-in parser for web forms submitted using "application/x-www-form-urlencoded" or "multipart/form-data"
|
||||
* Available under a friendly New BSD License
|
||||
* Available under a friendly [New BSD License](../master/LICENSE)
|
||||
|
||||
What's not supported (yet?):
|
||||
* Keep-alive connections
|
||||
@@ -81,10 +81,14 @@ Then you add one or more "handlers" to the server: each handler gets a chance to
|
||||
|
||||
Finally you start the server on a given port. Note that even if built on GCD, GCDWebServer still requires a runloop to be around (by default the main thread runloop is used). This is because there is no CGD API at this point to handle listening sockets, so it must be done using CFSocket which requires a runloop. However, the runloop is only used to accept the connection: immediately afterwards, the connection handling is dispatched to GCD queues.
|
||||
|
||||
Understanding Requests and Responses
|
||||
====================================
|
||||
Implementing Handlers
|
||||
=====================
|
||||
|
||||
TBD
|
||||
GCDWebServer relies on "handlers" to process incoming web requests and generating responses. Handlers are implemented with GCD blocks which makes it very easy to provide your owns. However, they are executed on arbitrary threads within GCD so special attention must be paid to thread-safety.
|
||||
|
||||
Handlers require 2 GCD blocks:
|
||||
* The 'GCDWebServerMatchBlock' is called on every handler added to the 'GCDWebServer' instance whenever a web request has started (i.e. HTTP headers have been received). It is passed the basic info for the web request (HTTP method, URL, headers...) and must decide if it wants to handle it or not. If yes, it must return a 'GCDWebServerRequest' instance which will be used to read (and optionally parse) the web request HTTP body. Otherwise, it simply returns nil. GCDWebServer provides several subclasses of 'GCDWebServerRequest' to handle common cases like storing the body in memory or to a file on disk. See [GCDWebServerRequest.h](../master/CGDWebServer/GCDWebServerRequest.h) for the full list.
|
||||
* The 'GCDWebServerProcessBlock' is called after the web request has been fully received and is passed the 'GCDWebServerRequest' instance created at the previous step. It must return a 'GCDWebServerResponse' instance which will be used to send the reponse HTTP headers and body. GCDWebServer provides several subclasses of 'GCDWebServerResponse' to handle common cases like HTML text in memory or streaming a file from disk. See [GCDWebServerResponse.h](../master/CGDWebServer/GCDWebServerResponse.h) for the full list.
|
||||
|
||||
Advanced Example 1: Implementing HTTP Redirects
|
||||
===============================================
|
||||
|
||||
Reference in New Issue
Block a user