-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce HttpHeaders interface #2045
Comments
This comment was originally written by @seaneagan Also, HttpHeaders#toString should return the headers formatted as they would be in an http message, and it might be useful to have a constructor which takes a string of all headers as formatted in an http message as well for creating the headers object on the receiving end: HttpRequestHeaders.fromString(String headerString); |
Also, HttpHeaders should be a Map, or at least support enumeration of headers. dartbug.com/2785 |
Issue #2785 has been merged into this issue. |
The HttpHeaders interface was introduced in https://code.google.com/p/dart/source/detail?r=6567. |
This comment was originally written by @seaneagan I noticed header enumeration was added in: https://code.google.com/p/dart/source/detail?r=7377 via: void forEach(void f(String name, List<String> values)); I agree with comment 3 that it would be better to just extend Map. HttpHeaders is missing many useful methods of Maps, such as "containsKey". So one would have to do: bool hasHeader = false; instead of just: bool hasHeader = headers.containsKey(header); or to use composition instead of inheritance, HttpHeaders could have a "raw" getter: Map<String, List<String>> get raw(); As far as the case-insensitive issue, just do the same thing you are doing already of converting all header name inputs to lower case. Dealing with individual header values is not perfect when using a Map<String, List<String>>, as it should really be a MultiMap<String, String>, but I think on balance it is still better than the current solution, and hopefully MultiMap will be added to dart:core with the upcoming collections refresh. |
The containsKey could just be headers[name.toLowerCase()] != null I agree that there are useful methods on Map which will also be useful on HttpHeaders. We will consider making HttpHeaders extend Map<String, List<String>> and implement the missing methods. I would rather not add the "raw" getter as the HttpHeaders instance would loose control of its content. I think that we still need to add special handling of headers which are single valued (e.g. Date) so that for them set and add will be the same - and using operator []= with a list of more than one element will throw an exception. |
This comment was originally written by [email protected] Why isn't there a case insensitive map? |
Proposed content type handling in https://chromiumcodereview.appspot.com/10407002. |
Added this to the M1 milestone. |
Removed Area-IO label. |
New in this update: ``` git log --oneline --no-decorate 9f00679ef47bc79cadc18e143720ade6c06c0100..980fc947db32bca6ae7d07fbb4ad0fcdba0050ec 980fc947 Add support for global activating package from a custom pub URL (#2041) 605cafb1 "features" is not a completely implemented or documented – hide flags (#2045) 73b66cd3 Merge pull request #2035 from sigurdm/logout_command 2b03587d dartfmt again ea805dfb Fix help-expectation 6f759c1f gitfmt 90079421 deps: move package_resolver to a dev dependency 297f017a enable and fix a number of lints f70ee39b Update to latest dependencies, require dart 2.1, fix lints 3446fb0d Add logout command 283471e7 Merge pull request #2016 from RedBrogdon/changelog 4c00f413 Update/add www.dartlang.org URLs (#2021) f7b147f9 Correcting nerfed changelog test. b9308223 Edited warning messages, addressed review issues. 9e9c8ed7 Fixed race conditions in test case. (#2020) ec972168 Removed references to gitsubmodules (#2019) ac8ad792 Copyright dates. f9d35d34 Formatted via dartfmt. a3351369 Adding ChangelogValidator to the list of validators. a826b121 Adds changelog validator and its tests. 2233e3d5 Update the required pkg:http (#1996) 75d8453a Update all of the obvious dependencies d07dafa5 Fix unnecessary `this` lints 43a91d12 Update to latest build_runner (#1966) b3a2cfb7 Add check for a scheme on PUB_HOSTED_URL (#1972) 6626bda3 Update tests for SDK constraint validation (#1968) ``` Change-Id: Ib7c5ec86e5a6d67094b8e70a32ff41efe571c074 Reviewed-on: https://dart-review.googlesource.com/c/94380 Commit-Queue: Sigurd Meldgaard <[email protected]> Reviewed-by: Jonas Jensen <[email protected]>
…s, markdown, matcher, mockito, path, pool, source_map_stack_trace, sse, stream_channel, string_scanner, test, test_reflective_loader, tools, typed_data, webdev Revisions updated by `dart tools/rev_sdk_deps.dart`. cli_util (https://github.com/dart-lang/cli_util/compare/91747f7..6c318c2): 6c318c2 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#81) df83fb5 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#80) collection (https://github.com/dart-lang/collection/compare/0d0e184..30fd0f8): 30fd0f8 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#277) dartdoc (https://github.com/dart-lang/dartdoc/compare/0746cda..9be04e0): 9be04e0c 2023-03-28 Jonas Finnemann Jensen Allow ID attributes on headings when running with --sanitize-html (#3358) 8785dd24 2023-03-27 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#3377) 0944fa32 2023-03-27 dependabot[bot] Bump github/codeql-action from 2.2.6 to 2.2.9 (#3379) e318d34f 2023-03-27 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#3378) ffi (https://github.com/dart-lang/ffi/compare/32f5eef..04fa38a): 04fa38a 2023-04-03 Daco Harkes test zero termination of Utf8 string (#147) eb93bbb 2023-04-03 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#188) 2a6b643 2023-04-03 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#189) intl (https://github.com/dart-lang/intl/compare/fca552f..a958db0): a958db0 2023-03-29 Googler Internal change json_rpc_2 (https://github.com/dart-lang/json_rpc_2/compare/0280ac6..aea3bea): aea3bea 2023-03-28 Kevin Moore Fix analysis, bump min SDK to 2.19 (#93) lints (https://github.com/dart-lang/lints/compare/dfded5e..f09399a): f09399a 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#110) 9581bab 2023-03-25 Parker Lougheed Fix 'recommended' spelling in README (#109) c92e1ca 2023-03-23 Michael Thomsen Update README.md (#108) 7134608 2023-02-01 dependabot[bot] Bump actions/checkout from 3.2.0 to 3.3.0 (#98) markdown (https://github.com/dart-lang/markdown/compare/ecbffa9..d437c85): d437c85 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#529) 3550fe6 2023-04-01 dependabot[bot] Bump subosito/flutter-action from 2.8.0 to 2.10.0 (#528) d1b7907 2023-04-01 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#527) 0daf231 2023-03-31 le.chang Footnote support (#441) b96bc08 2023-03-30 Jonas Finnemann Jensen Prepare a release of 7.0.2 (#526) matcher (https://github.com/dart-lang/matcher/compare/dc310d9..61f4347): 61f4347 2023-03-21 Nate Bosch Prepare to publish (#214) mockito (https://github.com/dart-lang/mockito/compare/ed5bd84..28e8eda): 28e8eda 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 ccb9abf 2023-04-01 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 65ee0c4 2023-03-23 Nate Bosch Expand pub constraint on test_api (#615) e6ea7ad 2023-03-23 Nate Bosch GitHub Sync (#614) path (https://github.com/dart-lang/path/compare/24b58a2..cd37179): cd37179 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#139) pool (https://github.com/dart-lang/pool/compare/694cfd8..338bfb4): 338bfb4 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#67) source_map_stack_trace (https://github.com/dart-lang/source_map_stack_trace/compare/45ea368..08a81a8): 08a81a8 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#37) 4cbe06e 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#36) sse (https://github.com/dart-lang/sse/compare/8c03b73..8c3efdc): 8c3efdc 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#80) e35336a 2023-04-02 dependabot[bot] Bump nanasess/setup-chromedriver from 1.1.0 to 2.0.0 (#81) stream_channel (https://github.com/dart-lang/stream_channel/compare/a20ccd4..fe0f5e4): fe0f5e4 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#89) string_scanner (https://github.com/dart-lang/string_scanner/compare/29e471e..f7a656f): f7a656f 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#56) fe8c301 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#55) test (https://github.com/dart-lang/test/compare/cc0598b..a01b185): a01b185e 2023-03-30 Nate Bosch More smoothly handle missing compiler info (#1980) b24b4668 2023-03-27 Daco Harkes Support native assets (#1975) c3828267 2023-03-23 Nate Bosch Prepare to publish (#1974) 9035bba8 2023-03-21 Parker Lougheed Use deps.dev for OpenSSF scorecard results link (#1976) test_reflective_loader (https://github.com/dart-lang/test_reflective_loader/compare/c4c2d5c..a85a930): a85a930 2023-04-01 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#46) 27bc418 2023-04-01 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#47) tools (https://github.com/dart-lang/tools/compare/fb2dada..d40ca93): d40ca93 2023-04-03 dependabot[bot] Bump actions/labeler from 4.0.2 to 4.0.3 (#66) 4185d6d 2023-04-03 dependabot[bot] Bump coverallsapp/github-action from 1.2.4 to 2.0.0 (#65) b14d5be 2023-04-03 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#64) typed_data (https://github.com/dart-lang/typed_data/compare/f858046..d85363d): d85363d 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#62) 0f57d9b 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#63) webdev (https://github.com/dart-lang/webdev/compare/c2c8b17..b139649): b139649e 2023-03-31 Elliott Brooks Don't show non-instantiated variables (#2061) 8437f60a 2023-03-31 Elliott Brooks Move project-specific getters to `TestProject` instead of `TestContext` (#2052) 652e040c 2023-03-30 Elliott Brooks Provide an app entrypoint to DWDS (#2047) 0afc9eb4 2023-03-30 Elliott Brooks Add Dart Code Metrics (#2055) 5fcbb803 2023-03-29 Elliott Brooks Apply `trailing-comma` lint (#2054) 5bd21384 2023-03-28 Elliott Brooks Skip failing webdev integration_test cases (#2051) 2d8e9c23 2023-03-24 Elliott Brooks (she/her) Adds a script for the release steps of `dwds` and `webdev` (#2049) afee8c74 2023-03-23 Elliott Brooks (she/her) Reset `webdev`, `dwds`, `test_common` after publishing (#2048) 4122b234 2023-03-22 Devon Carew update to the latest mono_repo generated CI (#2044) 2b6e9182 2023-03-22 Elliott Brooks (she/her) Prepare Webdev for `3.0.3` release (#2046) c3cbd89b 2023-03-22 Elliott Brooks (she/her) Prepare DWDS for 18.0.2 release (#2045) bb22b3a0 2023-03-22 Anna Gringauze Make debugger skip same locations in dart during stepping. (#2043) b9499819 2023-03-20 Anna Gringauze Prepare for variable names changes due to patterns support in DDC (#2042) Change-Id: I5b8d591d1b906338564cf008f935b17f85ed2813 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292922 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Devon Carew <[email protected]>
…uf, test Revisions updated by `dart tools/rev_sdk_deps.dart`. dartdoc (https://github.com/dart-lang/dartdoc/compare/e04a6b3..c2ed703): c2ed703c 2023-06-26 dependabot[bot] Bump ossf/scorecard-action from 2.1.3 to 2.2.0 (#3454) ecosystem (https://github.com/dart-lang/ecosystem/compare/b1056e6..19fa443): 19fa443 2023-06-29 Lasse R.H. Nielsen Clean-up and tweaks of the firehose project. (#117) 9ef5948 2023-06-27 Moritz Excise health from firehose (#118) 36c662e 2023-06-27 Moritz Introduce a health checking workflow (#115) http (https://github.com/dart-lang/http/compare/ff1fcfe..d68081f): d68081f 2023-06-26 Nate Bosch Prepare to publish package:http (#973) 067bff3 2023-06-26 Alex James Create java http package (#971) lints (https://github.com/dart-lang/lints/compare/79581ff..89f9519): 89f9519 2023-06-28 Parker Lougheed Fix typo in 3.0.0-wip changelog entry (#137) markdown (https://github.com/dart-lang/markdown/compare/bd6ae8d..4674d09): 4674d09 2023-06-27 Zhiguang Chen Fix HtmlBlockSyntax (#548) mockito (https://github.com/dart-lang/mockito/compare/1d6064a..974226e): 974226e 2023-06-27 Googler Internal change protobuf (https://github.com/dart-lang/protobuf/compare/e76bd74..7bebbc6): 7bebbc6 2023-06-29 Ömer Sinan Ağacan Update protoc_plugin Makefile: (#858) acc0462 2023-06-29 Ömer Sinan Ağacan Ignore non-items in message sets (#857) 0eb3796 2023-06-29 Ömer Sinan Ağacan Ignore unknown tags in message set items (#856) 2996e1d 2023-06-27 Ömer Sinan Ağacan Implement message set wire format (#836) test (https://github.com/dart-lang/test/compare/cdc8178..021667a): 021667a4 2023-06-28 Jacob MacDonald prep to release (#2048) 3d44fcae 2023-06-28 Yaroslav Vorobev feat(test): add MOZ_AUTOMATION=1 to ff test runner (#2049) 6e675f80 2023-06-28 Parker Lougheed Replace broken link to observatory with DevTools mention (#2047) 2904779b 2023-06-28 Yaroslav Vorobev feat(runner): add env overrides for safari and ff (#2042) 54350282 2023-06-28 Parker Lougheed Update link from old linter site to dart.dev (#2046) 8c4b15d1 2023-06-28 Jacob MacDonald allow the latest analyzer (6.x.x) (#2045) Change-Id: I86901fb2211adf81288f0940a355d6c33ddd8a7d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/311927 Auto-Submit: Devon Carew <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
This issue was originally filed by @seaneagan
Currently the Http[Client]{Request,Response} interfaces all have:
Map get headers();
int get contentLength();
bool get keepAlive();
There is a bunch of other header-specific functionality which would be useful to add as well:
* more dedicated fields for specific headers, especially those which represent Dates, Durations, ints, Cookies, MimeTypes, Links, etc.
Thus it seems to deserve its own dedicated interface, which might look something like...
interface HttpHeaders extends MultiMap<String, String> {
// helper methods for converting to and from http dates
static String fromDate(Date date);
static Date toDate(String headerValue);
bool keepAlive; // Keep-Alive
int contentLength; // Content-Length
// additional useful header fields
MimeType contentType; // Content-Type
bool noCache; // Cache-Control : no-cache / Pragma: no-cache
Date date; // Date
List<Cookie>cookies; // Cookie / Set-Cookie
}
Many headers though, are request-specific or response-specific, so there probably should be dedicated interfaces for each...
interface HttpResponseHeaders extends HttpHeaders {
// valid request header names
static final String AGE/* = 'Age'/;
//...
static final String CONTENT_LENGTH/ = 'Content-Length'*/;
//...
Duration age; // Age
Duration maxAge; // Max-Age
Duration retryAfter; // Retry-After
Date lastModified; // Last-Modified
Date expires; // Expires
String fileName; // Content-Disposition: attachment; filename= ...
List<Link> links; // Link
}
interface HttpRequestHeaders {
// valid request header names
static final String ACCEPT/* = 'Accept'/;
//...
static final String CONTENT_LENGTH/ = 'Content-Length'*/;
//...
Date ifModifiedSince; // If-Modified-Since
int maxForwards; // Max-Forwards
List<MimeType> accept; // Accept
}
These could then be surfaced as follows...
interface HttpRequest {
//...
final HttpRequestHeaders headers;
}
interface HttpClientRequest {
//...
HttpRequestHeaders headers;
}
interface HttpResponse {
//...
final HttpResponseHeaders headers;
}
interface HttpClientResponse {
//...
HttpResponseHeaders headers;
}
The text was updated successfully, but these errors were encountered: