aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_http.erl
AgeCommit message (Collapse)Author
2017-01-02Remaining Dialyzer fixesLoïc Hoguin
2017-01-02Numerous Dialyzer fixesLoïc Hoguin
2016-08-11Use cow_http_hd:parse_host directlyLoïc Hoguin
Removes some duplicate code from cowboy_http.
2016-08-11Use integer_to_binary when possibleLoïc Hoguin
2016-08-10Use binary_to_integer instead of to list and backLoïc Hoguin
2016-08-10Make reply functions return ReqLoïc Hoguin
2016-08-10Add a lot of todosLoïc Hoguin
2016-08-10Add tests for responses and request body readingLoïc Hoguin
This is a large commit. The cowboy_req interface has largely changed, and will change a little more. It's possible that some examples or tests have not been converted to the new interface yet. The documentation has not yet been updated. All of this will be fixed in smaller subsequent commits. Gotta start somewhere...
2016-06-20Fix cowboy_req:peer/1Loïc Hoguin
2016-06-06HTTP/1.1: Don't send 500 errors twiceLoïc Hoguin
The stream handler is responsible for sending errors. The protocol should only send errors when no responses were sent (this might not work yet).
2016-03-13Fix more HTTP/2 handshake test casesLoïc Hoguin
2016-03-12Add initial HTTP/1.1 Upgrade to HTTP/2Loïc Hoguin
The same edge cases that fail with other handshake methods also fail here (mostly bad preface/timeouts stuff). In addition, the HTTP2-Settings header contents are currently not checked and so the related edge case tests also fail.
2016-03-10Add the beginning of the rfc7540 test suiteLoïc Hoguin
Currently only testing handshake. Tests that pass currently involve no request/response. ALPN and prior knowledge support have some edge cases left to fix. HTTP/1.1 Upgrade has not been implemented yet.
2016-03-06Fix warningsLoïc Hoguin
2016-03-05Initial commit with connection/streamsLoïc Hoguin
Breaking changes with previous commit. This is a very large change, and I am giving up on making a single commit that fixes everything. More commits will follow slowly adding back features, introducing new tests and fixing the documentation. This change contains most of the work toward unifying the interface for handling both HTTP/1.1 and HTTP/2. HTTP/1.1 connections are now no longer 1 process per connection; instead by default 1 process per request is also created. This has a number of pros and cons. Because it has cons, we also allow users to use a lower-level API that acts on "streams" (requests/responses) directly at the connection process-level. If performance is a concern, one can always write a stream handler. The performance in this case will be even greater than with Cowboy 1, although all the special handlers are unavailable. When switching to Websocket, after the handler returns from init/2, Cowboy stops the stream and the Websocket protocol takes over the connection process. Websocket then calls websocket_init/2 for any additional initialization such as timers, because the process is different in init/2 and websocket_*/* functions. This however would allow us to use websocket_init/2 for sending messages on connect, instead of sending ourselves a message and be subject to races. Note that websocket_init/2 is optional. This is all a big change and while most of the tests pass, some functionality currently doesn't. SPDY is broken and will be removed soon in favor of HTTP/2. Automatic compression is currently disabled. The cowboy_req interface probably still have a few functions that need to be updated. The docs and examples do not refer the current functionality anymore. Everything will be fixed over time. Feedback is more than welcome. Open a ticket!
2015-02-04Use cowlib for parsing headers; remove cowboy_httpLoïc Hoguin
2014-09-23Breaking update of the cowboy_req interfaceLoïc Hoguin
Simplify the interface for most cowboy_req functions. They all return a single value except the four body reading functions. The reply functions now only return a Req value. Access functions do not return a Req anymore. Functions that used to cache results do not have a cache anymore. The interface for accessing query string and cookies has therefore been changed. There are now three query string functions: qs/1 provides access to the raw query string value; parse_qs/1 returns the query string as a list of key/values; match_qs/2 returns a map containing the values requested in the second argument, after applying constraints and default value. Similarly, there are two cookie functions: parse_cookies/1 and match_cookies/2. More match functions will be added in future commits. None of the functions return an error tuple anymore. It either works or crashes. Cowboy will attempt to provide an appropriate status code in the response of crashed handlers. As a result, the content decode function has its return value changed to a simple binary, and the body reading functions only return on success.
2014-04-26Merge branch 'language-range-header' of git://github.com/NineFX/cowboyLoïc Hoguin
2014-04-17Merge branch 'fix/basic-auth-empty-password' of git://github.com/soundrop/cowboyLoïc Hoguin
2014-03-26Remove outdated comments, all edoc, plus a few minor tweaksLoïc Hoguin
2014-03-24Use the new chunked and identity transfer decoding code from cowlibLoïc Hoguin
2014-03-10Remove cowboy_http:urldecode/1 and urlencode/1Loïc Hoguin
Use cow_qs:urldecode/1 and cow_qs:urlencode/1 instead
2014-02-09Allow empty passwords when parsing Basic authorization headerAli Sabil
2014-02-06Update copyright yearsLoïc Hoguin
2014-01-24Allows language_range/2 to parse RFC5646 language codes.Drew
2013-11-26Fix tohexu/1 and tohexl/1Matthias Endler
tohexu(16) or tohexl(16) will now crash, instead of evaluating to $G or $g.
2013-11-08Optimize query string parsingLoïc Hoguin
* Parsing code was moved to cowlib: cowboy_qs:parse_qs/1 * A function was added to build query strings: cowboy_qs:qs/1 * Also added cowboy_qs:urlencode/1 and cowboy_qsurldecode/1
2013-10-23Move cookie parsing/building code to cowlibLoïc Hoguin
The code for parsing has also been rewritten to be more efficient and to be able to handle cookie values with space inside them properly. Update cowlib to 0.2.0.
2013-07-05Fix decoding of chunked body.James Fish
Previously cowboy_http:te_chunked/2 would enter an incorrect state if it tried to parse an incomplete chunk when the length was known from the partial chunk. Previosuly cowboy_http:te_chunked/2 expected the trailing "\r\n" to always be present if chunk body was present in the buffer. This is not guaranteed and so this commit accommodates that situation.
2013-06-20Add support for the webkit deflate frame extensionAli Sabil
2013-05-31In content-types, the charset parameter is converted to lowercaseLoïc Hoguin
We know this specific parameter is case insensitive so we automatically lowercase it to make things simpler to the developer.
2013-05-16Move cowboy_http:status() to cowboy:http_status()Loïc Hoguin
2013-05-16Move cowboy_http:headers() to cowboy:http_headers()Loïc Hoguin
2013-05-16Move cowboy_http:version() to cowboy:http_version()Loïc Hoguin
2013-05-16Make the HTTP version type more practicalLoïc Hoguin
Now instead of {1, 1} we have 'HTTP/1.1', and instead of {1, 0} we have 'HTTP/1.0'. This is more efficient, easier to read in crash logs, and clearer in the code.
2013-05-15Change some module calls to local function callsLoïc Hoguin
2013-04-26Merge branch 'range_header' of git://github.com/Egobrain/cowboyLoïc Hoguin
2013-04-26Added range header parserEgobrain
2013-04-26Removed asserts from unit testsEgobrain
2013-04-25Cookie names are case sensitiveLoïc Hoguin
This should be more in line with what browsers are doing, and will prevent errors due to failed expectations.
2013-03-05Make streamed chunk size configurableLoïc Hoguin
Defaults to a maximum of 1000000 bytes. Also standardize the te_identity and te_chunked decoding functions. Now they both try to read as much as possible (up to the limit), making body reading much faster when not using chunked encoding.
2013-02-12Make cowboy_http.erl compile with +nativeAdam Cammack
Worked until 27da092
2013-02-06Strip whitespaces when authorization type is unknownLoïc Hoguin
2013-01-29Merge branch 'feature_basic_auth' of https://github.com/ivlis/cowboyLoïc Hoguin
2013-01-30Implement authorization header parsingIvan Lisenkov
Basic HTTP authorization according to RFC 2617 is implemented. Added an example of its usage with REST handler.
2013-01-29Fix chunked streaming of request body and improve speedLoïc Hoguin
2013-01-04Hello 2013Loïc Hoguin
2012-12-20We accept iodata() when setting cookies; fix thatLoïc Hoguin
2012-12-20Fix parsing of the Cookie headerLoïc Hoguin
This should be equivalent to what we do in Set-Cookie. Real-world testing is needed to confirm it works as intended.
2012-12-17Fix cowboy_http:cookie_to_iodata/3Loïc Hoguin
No more trying to quote, this is still completely broken everywhere.