Motivation: - On the client, cookies should be sorted in decreasing order of path length. From RFC 6265: 5.4.2. The user agent SHOULD sort the cookie-list in the following order: * Cookies with longer paths are listed before cookies with shorter paths. * Among cookies that have equal-length path fields, cookies with earlier creation-times are listed before cookies with later creation-times. NOTE: Not all user agents sort the cookie-list in this order, but this order reflects common practice when this document was written, and, historically, there have been servers that (erroneously) depended on this order. Note that the RFC does not define the path length of cookies without a path. We sort pathless cookies before cookies with the longest path, since pathless cookies inherit the request path (and setting a path that is longer than the request path is of limited use, since it cannot be read from the context in which it is written). - On the server, if there are multiple cookies of the same name, only one of them should be encoded. RFC 6265 says: Servers SHOULD NOT include more than one Set-Cookie header field in the same response with the same cookie-name. Note that the RFC does not define which cookie should be set in the case of multiple cookies with the same name; we arbitrarily pick the last one. Modifications: - Changed the visibility of the 'strict' field to 'protected' in CookieEncoder. - Modified ClientCookieEncoder to sort cookies in decreasing order of path length when in strict mode. - Modified ServerCookieEncoder to return only the last cookie of a given name when in strict mode. - Added a fast path for both strict mode in both client and server code for cases with only one cookie, in order avoid the overhead of sorting and memory allocation. - Added unit tests for the new cases. Result: - Cookie generation on client and server is now more conformant to RFC 6265. |
||
---|---|---|
all | ||
buffer | ||
codec | ||
codec-dns | ||
codec-haproxy | ||
codec-http | ||
codec-http2 | ||
codec-memcache | ||
codec-mqtt | ||
codec-socks | ||
codec-stomp | ||
codec-xml | ||
common | ||
example | ||
handler | ||
handler-proxy | ||
license | ||
microbench | ||
resolver | ||
resolver-dns | ||
tarball | ||
testsuite | ||
testsuite-osgi | ||
transport | ||
transport-native-epoll | ||
transport-rxtx | ||
transport-sctp | ||
transport-udt | ||
.fbprefs | ||
.gitignore | ||
.travis.yml | ||
CONTRIBUTING.md | ||
LICENSE.txt | ||
NOTICE.txt | ||
pom.xml | ||
README.md | ||
run-example.sh |
Netty Project
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
Links
How to build
For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.
You require the following to build Netty:
- Latest stable Oracle JDK 7
- Latest stable Apache Maven
- If you are on Linux, you need additional development packages installed on your system, because you'll build the native transport.
Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.
Branches to look
The 'master' branch is where the development of the latest major version lives on. The development of all other versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>
. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.