Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Introduce HttpHeaders interface #2045

Closed
DartBot opened this issue Mar 7, 2012 · 12 comments
Closed

Introduce HttpHeaders interface #2045

DartBot opened this issue Mar 7, 2012 · 12 comments
Assignees
Labels
area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. library-io
Milestone

Comments

@DartBot
Copy link

DartBot commented Mar 7, 2012

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.

  • static constants for standard header names
  • helper functions to convert to and from http dates 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;
}

@madsager
Copy link
Contributor

madsager commented Mar 8, 2012

cc @sgjesse.
Added Area-IO, Triaged labels.

@DartBot
Copy link
Author

DartBot commented Mar 8, 2012

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);
HttpResponseHeaders.fromString(String headerString);

@jmesserly
Copy link

Also, HttpHeaders should be a Map, or at least support enumeration of headers. dartbug.com/2785

@jmesserly
Copy link

Issue #2785 has been merged into this issue.

@sgjesse
Copy link
Contributor

sgjesse commented May 1, 2012

The HttpHeaders interface was introduced in https://code.google.com/p/dart/source/detail?r=6567.


Set owner to @sgjesse.
Added Started label.

@DartBot
Copy link
Author

DartBot commented May 7, 2012

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;
  headers.forEach((String h, List<String> values) { if(h = header) hasHeader = true;});

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.

@sgjesse
Copy link
Contributor

sgjesse commented May 8, 2012

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.

@DartBot
Copy link
Author

DartBot commented May 8, 2012

This comment was originally written by er...@codesmithtools.com


Why isn't there a case insensitive map?

@sgjesse
Copy link
Contributor

sgjesse commented May 16, 2012

Proposed content type handling in https://chromiumcodereview.appspot.com/10407002.

@madsager
Copy link
Contributor

madsager commented Jun 7, 2012

Added this to the M1 milestone.

@madsager
Copy link
Contributor

madsager commented Sep 3, 2012

@kevmoo
Copy link
Member

kevmoo commented May 14, 2014

Removed Area-IO label.
Added Area-Library, Library-IO labels.

@DartBot DartBot added Type-Defect area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. library-io labels May 14, 2014
@DartBot DartBot added this to the M1 milestone May 14, 2014
dart-bot pushed a commit that referenced this issue Feb 26, 2019
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 <sigurdm@google.com>
Reviewed-by: Jonas Jensen <jonasfj@google.com>
copybara-service bot pushed a commit that referenced this issue Apr 3, 2023
…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 <scheglov@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
copybara-service bot pushed a commit that referenced this issue Jun 29, 2023
…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 <devoncarew@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This issue was closed.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. library-io
Projects
None yet
Development

No branches or pull requests

5 participants