Commit Graph

1184 Commits

Author SHA1 Message Date
Joakim Erdfelt a52a182369 484349 - Promote WebSocket PathMappings / PathSpec to Jetty Http
+ Moving PathMappings from jetty-websocket to jetty-http
 + Renaming WebSocketPathSpec to UriTemplatePathSpec
 + Improving implementation with knowledge gained from PathMap
   and PathMapTest cases.
2015-12-15 13:57:01 -07:00
Joakim Erdfelt 5e3fbbccd0 Backporting GzipHandler's IncludeExclude configs 2015-12-08 15:51:25 -07:00
Greg Wilkins 3527c6a71b StringUtil.csvSplit(String)
Conflicts:
	jetty-maven-plugin/src/main/java/org/eclipse/jetty/maven/plugin/AbstractJettyMojo.java
	jetty-security/src/main/java/org/eclipse/jetty/security/PropertyUserStore.java
	jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
	jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java
	jetty-util/src/main/java/org/eclipse/jetty/util/StringUtil.java
	jetty-xml/src/main/java/org/eclipse/jetty/xml/XmlConfiguration.java
2015-12-08 14:54:33 -07:00
Greg Wilkins 45350b62c1 483344 - text/csv Mime Type For CSV in mime properties File 2015-12-02 11:11:39 +11:00
Greg Wilkins ee9c57e3ea 482670 - HttpURI wrongly parser URI paths starting with /@ 2015-11-26 11:39:55 +11:00
Greg Wilkins a2c057892e 483039 - HTTP2 Upgrade case sensitivity on Connection header 2015-11-26 07:06:38 +11:00
Greg Wilkins 204591ce82 482855 - Content-Length omitted for POST requests with empty body
Removed HTTP 0.9 support
A few code simplifications
Fixed clients relying on Content-Length headers being ignored
2015-11-25 20:50:59 +11:00
Greg Wilkins ab93529f6d 482855 - Content-Length omitted for POST requests with empty body
fixed merge
2015-11-25 20:50:59 +11:00
Greg Wilkins e78fcb59a4 482855 - Content-Length omitted for POST requests with empty body
An ineligant fix. Will improve in 9.3.x/9.4.x without HTTP 0.9 support.
2015-11-25 20:50:59 +11:00
Greg Wilkins aa85d85510 482855 - Content-Length omitted for POST requests with empty body
An ineligant fix. Will improve in 9.3.x/9.4.x without HTTP 0.9 support.
2015-11-25 14:15:14 +11:00
Joakim Erdfelt edf686fe0a Updating to version 9.3.7-SNAPSHOT 2015-11-06 12:13:00 -07:00
Joakim Erdfelt d737e1c638 Updating to version 9.3.6.v20151106 2015-11-06 11:09:32 -07:00
Joakim Erdfelt ec8f8d3e4f Updating to version 9.2.15-SNAPSHOT 2015-11-06 11:06:48 -07:00
Joakim Erdfelt ecba378f5c Updating to version 9.2.14.v20151106 2015-11-06 10:32:14 -07:00
Greg Wilkins c156f6593c 480162 - Continuations behavior differences due to HttpURI behavior
reverted 3e460dd219
added test clarifications
2015-10-21 15:18:12 +11:00
Joakim Erdfelt dde32787c4 Updating to version 9.3.6-SNAPSHOT 2015-10-12 15:47:37 -07:00
Joakim Erdfelt 29722bd880 Updating to version 9.3.5.v20151012 2015-10-12 15:10:39 -07:00
Joakim Erdfelt 2cce7510e1 Updating to 9.3.5-SNAPSHOT 2015-10-08 17:49:09 -07:00
Joakim Erdfelt 37296bec3c Updating to version 9.3.4.v20151007 2015-10-07 14:58:38 -07:00
Simone Bordet 3201d0acd2 477878 - HttpClient over HTTP/2 doesn't close upload stream.
Clarified the difference between last and consumed in HttpContent.
Fixed HTTP/2 transport to behave correctly in case of last content.
2015-09-25 19:31:40 +02:00
Simone Bordet 8c21871cf0 478021 - Client sending Connection: close does not shutdown output.
Fixed behavior of HttpGenerator to change its persistent also for
requests.

Reworked HttpSenderOverHTTP to send headers via IteratingCallback, so
that multiple generation steps can be made to produce SHUTDOWN_OUT.
2015-09-23 22:23:37 +02:00
Greg Wilkins 99f4ed7352 477737 Improve handling of etags with dynamic and static gzip 2015-09-18 12:30:02 +10:00
Greg Wilkins 2d88fdf386 477278 Refactored DefaultServlet for cached Gzip & Etags
Refactored the DefaultServlet to better handle static gzipped files with etags in the cache.
Required a simplification of always having a HttpContent rather than the prior situation of
having either a Resource or a HttpContent.  So introduced a HttpContent.Factory, of which
the ResourceCache is the normal implementation, but there is also now a ResourceContentFactory
that creates content when there is no cache.

The Gzip resource is now associated with the normal resource, so less lookups are needed.
This also give scope for caching dynamic gzipping in the future.

The GzipHttpContent class has been introduced to send content with the headers of the
uncompress, but content of the compressed resource.
2015-09-17 18:19:58 +10:00
Jesse McConnell 20ffd0dd0b Merge branch 'release-9.3.3' 2015-08-31 13:41:21 -05:00
Joakim Erdfelt 5312f2c0d7 Merge branch 'jetty-9.2.x'
Conflicts:
	jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java
	jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketSession.java
2015-08-27 15:34:45 -07:00
Jesse McConnell 6409366499 [maven-release-plugin] prepare for next development iteration 2015-08-27 10:11:29 -05:00
Jesse McConnell 3086adc965 [maven-release-plugin] prepare release jetty-9.3.3.v20150827 2015-08-27 10:11:21 -05:00
Jesse McConnell f8734f23ce [maven-release-plugin] prepare for next development iteration 2015-08-25 14:10:01 -05:00
Jesse McConnell e9edf4c24b [maven-release-plugin] prepare release jetty-9.3.3.v20150825 2015-08-25 14:09:54 -05:00
Joakim Erdfelt 29c223cd8f Adding testcase for reported 400 Bad request error in jetty-user mailing list 2015-08-13 14:46:10 -07:00
Joakim Erdfelt a3684f7fb8 [maven-release-plugin] prepare for next development iteration 2015-07-30 09:47:57 -07:00
Joakim Erdfelt 798fc8118b [maven-release-plugin] prepare release jetty-9.2.13.v20150730 2015-07-30 09:47:48 -07:00
Joakim Erdfelt 4b3879845d [maven-release-plugin] prepare for next development iteration 2015-07-30 07:02:10 -07:00
Joakim Erdfelt 6b7e9ac4b0 [maven-release-plugin] prepare release jetty-9.3.2.v20150730 2015-07-30 07:02:02 -07:00
Jesse McConnell 4b8a6e584f Merge branch 'release-9.3.1' 2015-07-17 12:10:49 -05:00
Greg Wilkins edc8bae556 472781 - GzipHandler isMimeTypeGzipable() bad logic
Added utility classes:

  IncludeExclude  - handles standard include exclude set
  RegexSet        - A set of regular expressions that have a combined compiled pattern
  PathMap.PathSet - A set of standard path mappings
2015-07-17 16:28:48 +10:00
Greg Wilkins de39bf5227 472781, 472782 Improve GzipHandler Include/Exclude handling
Made a common utility class for include/exclude handling
Use path exclusion rather than mime exclusion for svg
2015-07-17 08:11:11 +10:00
Jesse McConnell 9b790c38ce [maven-release-plugin] prepare for next development iteration 2015-07-14 11:42:34 -05:00
Jesse McConnell b35d32f2b8 [maven-release-plugin] prepare release jetty-9.3.1.v20150714 2015-07-14 11:42:28 -05:00
Simone Bordet 9549001d8c 472422 - Custom status codes result in a NumberFormatException while using http2.
Fixed constructor that was passing the name as the value.
Also other cleanups.
2015-07-11 16:30:05 +02:00
Jesse McConnell 7204707902 [maven-release-plugin] prepare for next development iteration 2015-07-09 12:14:38 -05:00
Jesse McConnell 3b1533673e [maven-release-plugin] prepare release jetty-9.2.12.v20150709 2015-07-09 12:14:30 -05:00
Greg Wilkins 4e3b400550 464741 - HttpFields declares IllegalArgumentException as checked exception 2015-07-08 17:48:39 +10:00
Greg Wilkins 7fbf512b17 471985 NPE in HttpFields.putField
The problem had several aspects:
 * HttpField.add should not let a null entry be added to the fields
 * The putHeaders methods should have checked for a null field before trying to add it
 * But the fundamental problem was the JarFileResource.close was leaving exist==true, so a new entry was never created.
2015-07-08 16:07:37 +10:00
Joakim Erdfelt e8eed798ab Fixing exception message 2015-07-06 14:27:38 -07:00
Greg Wilkins 13ce021e5e 471464 - Parsing issues with HttpURI
Fixed parsing of CONNECT URIs
2015-07-01 15:50:31 +10:00
Greg Wilkins 072d11b75c 471464 - Parsing issues with HttpURI
Some extra test cases
2015-07-01 14:06:08 +10:00
Greg Wilkins dd9e3d8ee9 471464 - Parsing issues with HttpURI
Removed pre-existing lookahead
made {} style more consistent
2015-07-01 13:36:49 +10:00
Greg Wilkins 97e5b86b26 471464 - Parsing issues with HttpURI
Removed authhostport boolean
removed lookahead in start
2015-07-01 13:10:16 +10:00
Joakim Erdfelt f299979989 Fixing javadoc on HttpURI.getPath() 2015-06-30 17:46:09 -07:00
Joakim Erdfelt e7d733bda0 471464 - Parsing issues with HttpURI
+ Updating expectations on HttpURIParseTest
+ Making results of new HttpURI(String) and new HttpURI(URI) consistent
+ Making results of HttpURI parsing consistent with java.net.URI
+ Making output of HttpURI.toString() and java.net.URI.toASCIIString()
  consistent with regards to ssp (scheme specific part) behavior
2015-06-30 17:37:40 -07:00
Joakim Erdfelt f3fe4331c4 471464 - Parsing issues with HttpURI
+ Adding documented and annotated tests cases showing problems
  (Note: some tests are @Ignore'd at the moment)
2015-06-30 10:49:28 -07:00
Joakim Erdfelt b522cf0bd8 471388 - StringIndexOutOfBoundsException when using <c:url> with parameters
+ Cleaning up HttpURITest
+ Creating parameterized HttpURIParseTest from various separate test
  cases in former HttpURITest
  + Currently @Ignored
  + Test Parse from String
  + Test Parse from URI
  + Test Parse result differences with java.net.URI
+ Adding more testcases to demonstrate bug
2015-06-29 17:35:34 -07:00
Greg Wilkins 3e401a62e9 StringUtil.csvSplit(String) 2015-06-19 16:48:53 +10:00
Jesse McConnell 60e45a940e [maven-release-plugin] prepare for next development iteration 2015-06-15 15:34:11 -05:00
Jesse McConnell d3dec8d513 [maven-release-plugin] prepare release jetty-9.2.12.M0 2015-06-15 15:34:03 -05:00
Joakim Erdfelt cf6c4a914e Updating version to 9.3.1-SNAPSHOT 2015-06-15 10:25:49 -07:00
Joakim Erdfelt 1a9da9f9e4 Updating versions to 9.3.0.v20150612 2015-06-12 09:34:24 -07:00
Joakim Erdfelt 496b4dfc83 [maven-release-plugin] prepare for next development iteration 2015-06-11 15:08:36 -07:00
Joakim Erdfelt f53c5d8fac [maven-release-plugin] prepare release jetty-9.3.0.v20150611 2015-06-11 15:08:29 -07:00
Jesse McConnell bfe6c2638e [maven-release-plugin] prepare for next development iteration 2015-05-29 09:06:42 -05:00
Jesse McConnell 71e0f4d8ce [maven-release-plugin] prepare release jetty-9.2.11.v20150529 2015-05-29 09:06:36 -05:00
Jesse McConnell a7087cbfbf [maven-release-plugin] prepare for next development iteration 2015-05-28 10:06:51 -05:00
Jesse McConnell 913c63e597 [maven-release-plugin] prepare release jetty-9.2.11.v20150528 2015-05-28 10:03:44 -05:00
Greg Wilkins b2e8d2cd04 minor optimisations 2015-05-22 22:53:01 +10:00
Jan Bartel e30c05cc2b Merge remote-tracking branch 'origin/jetty-9.2.x'
Conflicts:
	tests/test-integration/src/test/java/org/eclipse/jetty/test/support/TestableJettyServer.java
	tests/test-integration/src/test/resources/BIOHttp.xml
	tests/test-integration/src/test/resources/BIOHttps.xml
	tests/test-integration/src/test/resources/NIOHttp.xml
	tests/test-integration/src/test/resources/NIOHttps.xml
2015-04-30 10:44:44 +10:00
Greg Wilkins d5c95a1302 465747 - Jetty is failing to process all HTTP OPTIONS requests.
The Server handleOptions method was handling all OPTIONS * requests with a blank 200 response.
This has been fixed so that this method only checks that * URI is only applied to OPTIONS method.
2015-04-29 14:01:20 +10:00
Simone Bordet a2566bedd8 Merged branch 'jetty-9.2.x' into 'master'. 2015-04-23 09:09:48 +02:00
Greg Wilkins f061ae79f4 465181 HttpParser delay messageComplete until after chunk trailer 2015-04-22 20:56:09 +10:00
Greg Wilkins cfb9b3f19b 464744 - PathMap.match() never throws IllegalArgumentException 2015-04-21 15:18:47 +10:00
Joakim Erdfelt 3dc29f5b3a 464727 - Update Javadoc for Java 8 DocLint
+ Fixing javadoc in jetty-http
2015-04-15 14:38:35 -07:00
Greg Wilkins 1cb0449be3 Organised imports 2015-03-26 12:32:15 +11:00
Jesse McConnell da4f95f3d3 [maven-release-plugin] prepare for next development iteration 2015-03-25 09:08:27 -05:00
Jesse McConnell e92fd438fd [maven-release-plugin] prepare release jetty-9.2.11.M0 2015-03-25 09:08:21 -05:00
Greg Wilkins caacebc223 459845 - Support upgrade from http1 to http2
functioning implementation.  Not exactly the most elegant solution, but works with nghttp2 -u
2015-03-19 12:02:54 +11:00
Greg Wilkins 93a6811580 462040 reverted and deprecated getStringField methods 2015-03-13 14:51:08 +11:00
Greg Wilkins 0dd58d2efe 459845 - Support upgrade from http1 to http2
Moved the sneaky direct upgrade to its own method and added support to detect a standard upgrade.
The standard upgrade now creates the h2c connection and decodes the settings header, but it does not yet process the
settings nor send a response to the request.
2015-03-12 16:52:17 +11:00
Jesse McConnell e3fd0056cf [maven-release-plugin] prepare for next development iteration 2015-03-10 08:00:22 -05:00
Jesse McConnell 9d648f4000 [maven-release-plugin] prepare release jetty-9.2.10.v20150310 2015-03-10 08:00:14 -05:00
Greg Wilkins 48b6bec64c Merge remote-tracking branch 'origin/jetty-9.2.x'
Conflicts:
	jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
2015-03-05 20:17:20 +11:00
Greg Wilkins f4ad0dce98 461350 Update HttpParser IllegalCharacter handling to RFC7230 2015-03-05 19:54:25 +11:00
Greg Wilkins 042de2ec9f 461452 Double release of buffer by HttpReceiverOverHTTP
Updated HttpParse to always return from parseNext when messageComplete is called.  This allows it to notice reentrant state changes
and removes the need for HttpReceiverOverHTTP.methodComplete to return true, thus avoiding the race.
2015-03-05 15:26:19 +11:00
Jesse McConnell 1659d83978 [maven-release-plugin] prepare for next development iteration 2015-02-24 10:38:33 -06:00
Jesse McConnell dc0c3f4c52 [maven-release-plugin] prepare release jetty-9.2.9.v20150224 2015-02-24 10:38:28 -06:00
Joakim Erdfelt a32c9ed79c Merge branch 'jetty-9.2.x'
Conflicts:
	jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
	jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
	jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
2015-02-23 18:05:19 -07:00
Joakim Erdfelt 3e7b5f0fa9 460642 - HttpParser error 400 can expose previous buffer contents in HTTP status reason message
+ Simplifying behavior
2015-02-23 14:57:22 -07:00
Joakim Erdfelt 4df5647f6d 460642 - HttpParser error 400 can expose previous buffer contents in HTTP status reason message 2015-02-23 14:44:53 -07:00
Joakim Erdfelt 22a0cb4a28 Improving HttpField.nameHashCode 2015-02-20 10:54:28 -07:00
Joakim Erdfelt 08b4bd439e Fixing tests on http2-hpack
+ HttpField.nameHashCode() fixed to actually be US-ASCII case
  insensitive per documentation
+ Since removal of MetaData equals/hashcode, the comparison
  of the MetaData and MetaData.Response is now done entirely
  within the HpackTest
2015-02-20 10:16:03 -07:00
Simone Bordet f61cfb7016 Fixed construction of MetaData.Request and handling of HttpFields by MetaData. 2015-02-20 16:36:11 +01:00
Simone Bordet 2d932fe5c7 Removed hashCode() and equals() and fixed toString().
MetaData instances are mutable, and hashCode() and equals() were
based on those mutable fields; mutable hash codes break hash data
structures, when the object is inserted and then its hash code changes.

Fixed toString() to avoid NPE if _fields is null.
2015-02-20 16:02:54 +01:00
Greg Wilkins c22d79f673 Merge remote-tracking branch 'origin/jetty-9.2.x'
Conflicts:
	VERSION.txt
	aggregates/jetty-all/pom.xml
	apache-jsp/pom.xml
	apache-jstl/pom.xml
	examples/async-rest/async-rest-jar/pom.xml
	examples/async-rest/async-rest-webapp/pom.xml
	examples/async-rest/pom.xml
	examples/embedded/pom.xml
	examples/pom.xml
	jetty-alpn/jetty-alpn-client/pom.xml
	jetty-alpn/jetty-alpn-server/pom.xml
	jetty-alpn/pom.xml
	jetty-annotations/pom.xml
	jetty-ant/pom.xml
	jetty-cdi/pom.xml
	jetty-client/pom.xml
	jetty-continuation/pom.xml
	jetty-deploy/pom.xml
	jetty-distribution/pom.xml
	jetty-fcgi/fcgi-client/pom.xml
	jetty-fcgi/fcgi-server/pom.xml
	jetty-fcgi/pom.xml
	jetty-http-spi/pom.xml
	jetty-http/pom.xml
	jetty-io/pom.xml
	jetty-jaas/pom.xml
	jetty-jaspi/pom.xml
	jetty-jmx/pom.xml
	jetty-jndi/pom.xml
	jetty-jsp/pom.xml
	jetty-jspc-maven-plugin/pom.xml
	jetty-maven-plugin/pom.xml
	jetty-monitor/pom.xml
	jetty-nosql/pom.xml
	jetty-osgi/jetty-osgi-alpn/pom.xml
	jetty-osgi/jetty-osgi-boot-jsp/pom.xml
	jetty-osgi/jetty-osgi-boot-warurl/pom.xml
	jetty-osgi/jetty-osgi-boot/pom.xml
	jetty-osgi/jetty-osgi-httpservice/pom.xml
	jetty-osgi/jetty-osgi-npn/pom.xml
	jetty-osgi/pom.xml
	jetty-osgi/test-jetty-osgi-context/pom.xml
	jetty-osgi/test-jetty-osgi-webapp/pom.xml
	jetty-osgi/test-jetty-osgi/pom.xml
	jetty-plus/pom.xml
	jetty-proxy/pom.xml
	jetty-quickstart/pom.xml
	jetty-rewrite/pom.xml
	jetty-runner/pom.xml
	jetty-security/pom.xml
	jetty-server/pom.xml
	jetty-servlet/pom.xml
	jetty-servlets/pom.xml
	jetty-servlets/src/main/java/org/eclipse/jetty/servlets/AsyncGzipFilter.java
	jetty-spdy/pom.xml
	jetty-spdy/spdy-alpn-tests/pom.xml
	jetty-spdy/spdy-client/pom.xml
	jetty-spdy/spdy-core/pom.xml
	jetty-spdy/spdy-example-webapp/pom.xml
	jetty-spdy/spdy-http-client-transport/pom.xml
	jetty-spdy/spdy-http-common/pom.xml
	jetty-spdy/spdy-http-server/pom.xml
	jetty-spdy/spdy-npn-tests/pom.xml
	jetty-spdy/spdy-server/pom.xml
	jetty-spring/pom.xml
	jetty-start/pom.xml
	jetty-util-ajax/pom.xml
	jetty-util/pom.xml
	jetty-webapp/pom.xml
	jetty-websocket/javax-websocket-client-impl/pom.xml
	jetty-websocket/javax-websocket-server-impl/pom.xml
	jetty-websocket/pom.xml
	jetty-websocket/websocket-api/pom.xml
	jetty-websocket/websocket-client/pom.xml
	jetty-websocket/websocket-common/pom.xml
	jetty-websocket/websocket-server/pom.xml
	jetty-websocket/websocket-servlet/pom.xml
	jetty-xml/pom.xml
	pom.xml
	tests/pom.xml
	tests/test-continuation/pom.xml
	tests/test-integration/pom.xml
	tests/test-jmx/jmx-webapp-it/pom.xml
	tests/test-jmx/jmx-webapp/pom.xml
	tests/test-jmx/pom.xml
	tests/test-loginservice/pom.xml
	tests/test-quickstart/pom.xml
	tests/test-sessions/pom.xml
	tests/test-sessions/test-hash-sessions/pom.xml
	tests/test-sessions/test-jdbc-sessions/pom.xml
	tests/test-sessions/test-mongodb-sessions/pom.xml
	tests/test-sessions/test-sessions-common/pom.xml
	tests/test-webapps/pom.xml
	tests/test-webapps/test-jaas-webapp/pom.xml
	tests/test-webapps/test-jetty-webapp/pom.xml
	tests/test-webapps/test-jndi-webapp/pom.xml
	tests/test-webapps/test-mock-resources/pom.xml
	tests/test-webapps/test-proxy-webapp/pom.xml
	tests/test-webapps/test-servlet-spec/pom.xml
	tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml
	tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml
	tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml
	tests/test-webapps/test-webapp-rfc2616/pom.xml
2015-02-19 14:05:00 +11:00
Greg Wilkins 13040f300d 460291 - AsyncGzipFilter Mappings
Added test harness to confirm mapping precidence
2015-02-19 09:15:38 +11:00
Greg Wilkins b78faff1bf improved exception messages during tests 2015-02-18 17:35:43 +11:00
Jesse McConnell ce5db2ca55 [maven-release-plugin] prepare for next development iteration 2015-02-17 16:02:22 -06:00
Jesse McConnell 26b7597928 [maven-release-plugin] prepare release jetty-9.2.8.v20150217 2015-02-17 16:02:16 -06:00
Greg Wilkins c3332e7d2e 459845 - Support upgrade from http1 to http2/websocket
Added support for unofficial "upgrade" from http/1 to h2c
2015-02-13 12:16:03 +11:00
Greg Wilkins 0f7ee8d607 Merge remote-tracking branch 'origin/jetty-9.2.x'
Conflicts:
	jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
	jetty-http/src/main/java/org/eclipse/jetty/http/HttpVersion.java
	jetty-io/src/main/java/org/eclipse/jetty/io/EndPoint.java
	jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java
2015-02-13 11:45:56 +11:00
Greg Wilkins 2b2a70a93a 459845 Support upgrade
Added the concept of UpgradeFrom and UpgradeTo connections that support
transferring a buffer with content before opening new connection.
Aded EndPoint.update method as utility
2015-02-13 11:41:18 +11:00
Greg Wilkins ca8015828c 458663 Handle null header values 2015-02-11 14:30:26 +11:00