diff --git a/libweave/libweave.gyp b/libweave/libweave.gyp
index ba7e026..527c246 100644
--- a/libweave/libweave.gyp
+++ b/libweave/libweave.gyp
@@ -34,6 +34,7 @@
         'src/commands/user_role.cc',
         'src/device_manager.cc',
         'src/device_registration_info.cc',
+        'src/http_constants.cc',
         'src/notification/notification_parser.cc',
         'src/notification/pull_channel.cc',
         'src/notification/xml_node.cc',
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index bcebaba..229ba91 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -19,7 +19,6 @@
 #include <chromeos/data_encoding.h>
 #include <chromeos/errors/error_codes.h>
 #include <chromeos/key_value_store.h>
-#include <chromeos/mime_utils.h>
 #include <chromeos/strings/string_utils.h>
 #include <chromeos/url_utils.h>
 #include <weave/http_client.h>
@@ -29,6 +28,7 @@
 #include "libweave/src/commands/command_definition.h"
 #include "libweave/src/commands/command_manager.h"
 #include "libweave/src/commands/schema_constants.h"
+#include "libweave/src/http_constants.h"
 #include "libweave/src/notification/xmpp_channel.h"
 #include "libweave/src/states/state_manager.h"
 #include "libweave/src/utils.h"
@@ -41,17 +41,6 @@
 
 namespace {
 
-const int kHttpStatusContinue = 100;
-const int kHttpStatusBadRequest = 400;
-const int kHttpStatusDenied = 401;
-const int kHttpStatusForbidden = 403;
-const int kHttpStatusInternalServerError = 500;
-
-const char kGet[] = "GET";
-const char kPatch[] = "PATCH";
-const char kPost[] = "POST";
-const char kPut[] = "PUT";
-
 std::pair<std::string, std::string> BuildAuthHeader(
     const std::string& access_token_type,
     const std::string& access_token) {
@@ -148,15 +137,13 @@
   void SetFormData(
       const std::vector<std::pair<std::string, std::string>>& data) {
     data_ = chromeos::data_encoding::WebParamsEncode(data);
-    mime_type_ = chromeos::mime::application::kWwwFormUrlEncoded;
+    mime_type_ = http::kWwwFormUrlEncoded;
   }
 
   void SetJsonData(const base::Value& json) {
     std::string data;
     CHECK(base::JSONWriter::Write(json, &data_));
-    mime_type_ = chromeos::mime::AppendParameter(
-        chromeos::mime::application::kJson,
-        chromeos::mime::parameters::kCharset, "utf-8");
+    mime_type_ = http::kJsonUtf8;
   }
 
  private:
@@ -176,9 +163,10 @@
   // Make sure we have a correct content type. Do not try to parse
   // binary files, or HTML output. Limit to application/json and text/plain.
   auto content_type =
-      chromeos::mime::RemoveParameters(response.GetContentType());
-  if (content_type != chromeos::mime::application::kJson &&
-      content_type != chromeos::mime::text::kPlain) {
+      chromeos::string_utils::SplitAtFirst(response.GetContentType(), ";")
+          .first;
+
+  if (content_type != http::kJson && content_type != http::kPlain) {
     chromeos::Error::AddTo(error, FROM_HERE, chromeos::errors::json::kDomain,
                            "non_json_content_type",
                            "Unexpected response content type: " + content_type);
@@ -213,7 +201,7 @@
 
 bool IsSuccessful(const HttpClient::Response& response) {
   int code = response.GetStatusCode();
-  return code >= kHttpStatusContinue && code < kHttpStatusBadRequest;
+  return code >= http::kContinue && code < http::kBadRequest;
 }
 
 }  // anonymous namespace
@@ -322,7 +310,7 @@
                                            chromeos::ErrorPtr* error) {
   int code = response.GetStatusCode();
   auto resp = ParseJsonResponse(response, error);
-  if (resp && code >= kHttpStatusBadRequest) {
+  if (resp && code >= http::kBadRequest) {
     std::string error_code, error_message;
     if (!resp->GetString("error", &error_code)) {
       error_code = "unexpected_response";
@@ -373,7 +361,7 @@
   auto shared_error_callback =
       std::make_shared<CloudRequestErrorCallback>(error_callback);
 
-  RequestSender sender{kPost, GetOAuthURL("token"), http_client_};
+  RequestSender sender{http::kPost, GetOAuthURL("token"), http_client_};
   sender.SetFormData({
       {"refresh_token", config_->refresh_token()},
       {"client_id", config_->client_id()},
@@ -535,7 +523,7 @@
 void DeviceRegistrationInfo::GetDeviceInfo(
     const CloudRequestCallback& success_callback,
     const CloudRequestErrorCallback& error_callback) {
-  DoCloudRequest(weave::kGet, GetDeviceURL(), nullptr, success_callback,
+  DoCloudRequest(http::kGet, GetDeviceURL(), nullptr, success_callback,
                  error_callback);
 }
 
@@ -554,7 +542,7 @@
   auto url = GetServiceURL("registrationTickets/" + ticket_id,
                            {{"key", config_->api_key()}});
 
-  RequestSender sender{kPatch, url, http_client_};
+  RequestSender sender{http::kPatch, url, http_client_};
   sender.SetJsonData(req_json);
   auto response = sender.SendAndBlock(error);
 
@@ -570,7 +558,7 @@
 
   url = GetServiceURL("registrationTickets/" + ticket_id + "/finalize",
                       {{"key", config_->api_key()}});
-  response = RequestSender{kPost, url, http_client_}.SendAndBlock(error);
+  response = RequestSender{http::kPost, url, http_client_}.SendAndBlock(error);
   if (!response)
     return std::string();
   json_resp = ParseJsonResponse(*response, error);
@@ -598,7 +586,7 @@
   UpdateDeviceInfoTimestamp(*device_draft_response);
 
   // Now get access_token and refresh_token
-  RequestSender sender2{kPost, GetOAuthURL("token"), http_client_};
+  RequestSender sender2{http::kPost, GetOAuthURL("token"), http_client_};
   sender2.SetFormData(
       {{"code", auth_code},
        {"client_id", config_->client_id()},
@@ -686,13 +674,8 @@
     return;
   }
 
-  using chromeos::mime::application::kJson;
-  using chromeos::mime::parameters::kCharset;
-  const std::string mime_type =
-      chromeos::mime::AppendParameter(kJson, kCharset, "utf-8");
-
   RequestSender sender{data->method, data->url, http_client_};
-  sender.SetData(data->body, mime_type);
+  sender.SetData(data->body, http::kJsonUtf8);
   sender.AddAuthHeader(access_token_);
   int request_id =
       sender.Send(base::Bind(&DeviceRegistrationInfo::OnCloudRequestSuccess,
@@ -709,7 +692,7 @@
   int status_code = response.GetStatusCode();
   VLOG(1) << "Response for cloud request with ID " << request_id
           << " received with status code " << status_code;
-  if (status_code == kHttpStatusDenied) {
+  if (status_code == http::kDenied) {
     cloud_backoff_entry_->InformOfRequest(true);
     RefreshAccessToken(
         base::Bind(&DeviceRegistrationInfo::OnAccessTokenRefreshed, AsWeakPtr(),
@@ -719,7 +702,7 @@
     return;
   }
 
-  if (status_code >= kHttpStatusInternalServerError) {
+  if (status_code >= http::kInternalServerError) {
     // Request was valid, but server failed, retry.
     // TODO(antonm): Reconsider status codes, maybe only some require
     // retry.
@@ -738,7 +721,7 @@
 
   if (!IsSuccessful(response)) {
     ParseGCDError(json_resp.get(), &error);
-    if (status_code == kHttpStatusForbidden &&
+    if (status_code == http::kForbidden &&
         error->HasError(kErrorDomainGCDServer, "rateLimitExceeded")) {
       // If we exceeded server quota, retry the request later.
       RetryCloudRequest(data);
@@ -885,7 +868,7 @@
     const base::DictionaryValue& command_patch,
     const base::Closure& on_success,
     const base::Closure& on_error) {
-  DoCloudRequest(weave::kPatch, GetServiceURL("commands/" + command_id),
+  DoCloudRequest(http::kPatch, GetServiceURL("commands/" + command_id),
                  &command_patch,
                  base::Bind(&IgnoreCloudResultWithCallback, on_success),
                  base::Bind(&IgnoreCloudErrorWithCallback, on_error));
@@ -962,7 +945,7 @@
       {}, {{"lastUpdateTimeMs", last_device_resource_updated_timestamp_}});
 
   DoCloudRequest(
-      weave::kPut, url, device_resource.get(),
+      http::kPut, url, device_resource.get(),
       base::Bind(&DeviceRegistrationInfo::OnUpdateDeviceResourceSuccess,
                  AsWeakPtr()),
       base::Bind(&DeviceRegistrationInfo::OnUpdateDeviceResourceError,
@@ -1043,7 +1026,7 @@
     const base::Callback<void(const base::ListValue&)>& on_success,
     const CloudRequestErrorCallback& on_failure) {
   DoCloudRequest(
-      weave::kGet,
+      http::kGet,
       GetServiceURL("commands/queue", {{"deviceId", config_->device_id()}}),
       nullptr, base::Bind(&HandleFetchCommandsResult, on_success), on_failure);
 }
@@ -1079,7 +1062,7 @@
       std::unique_ptr<base::DictionaryValue> cmd_copy{command_dict->DeepCopy()};
       cmd_copy->SetString("state", "aborted");
       // TODO(wiley) We could consider handling this error case more gracefully.
-      DoCloudRequest(weave::kPut, GetServiceURL("commands/" + command_id),
+      DoCloudRequest(http::kPut, GetServiceURL("commands/" + command_id),
                      cmd_copy.get(), base::Bind(&IgnoreCloudResult),
                      base::Bind(&IgnoreCloudError));
     } else {
@@ -1171,7 +1154,7 @@
 
   device_state_update_pending_ = true;
   DoCloudRequest(
-      weave::kPost, GetDeviceURL("patchState"), &body,
+      http::kPost, GetDeviceURL("patchState"), &body,
       base::Bind(&DeviceRegistrationInfo::OnPublishStateSuccess, AsWeakPtr(),
                  update_id),
       base::Bind(&DeviceRegistrationInfo::OnPublishStateError, AsWeakPtr()));
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index d76d9eb..72db07e 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -11,7 +11,6 @@
 #include <base/values.h>
 #include <chromeos/bind_lambda.h>
 #include <chromeos/key_value_store.h>
-#include <chromeos/mime_utils.h>
 #include <gtest/gtest.h>
 #include <weave/mock_http_client.h>
 
diff --git a/libweave/src/http_constants.cc b/libweave/src/http_constants.cc
new file mode 100644
index 0000000..c409c1a
--- /dev/null
+++ b/libweave/src/http_constants.cc
@@ -0,0 +1,24 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "libweave/src/http_constants.h"
+
+namespace weave {
+namespace http {
+
+const char kGet[] = "GET";
+const char kPatch[] = "PATCH";
+const char kPost[] = "POST";
+const char kPut[] = "PUT";
+
+const char kAuthorization[] = "Authorization";
+const char kContentType[] = "Content-Type";
+
+const char kJson[] = "application/json";
+const char kJsonUtf8[] = "application/json; charset=utf-8";
+const char kPlain[] = "text/plain";
+const char kWwwFormUrlEncoded[] = "application/x-www-form-urlencoded";
+
+}  // namespace http
+}  // namespace weave
diff --git a/libweave/src/http_constants.h b/libweave/src/http_constants.h
new file mode 100644
index 0000000..f219a3c
--- /dev/null
+++ b/libweave/src/http_constants.h
@@ -0,0 +1,37 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBWEAVE_SRC_HTTP_CONSTANTS_H_
+#define LIBWEAVE_SRC_HTTP_CONSTANTS_H_
+
+namespace weave {
+namespace http {
+
+const int kContinue = 100;
+const int kOk = 200;
+const int kBadRequest = 400;
+const int kDenied = 401;
+const int kForbidden = 403;
+const int kNotFound = 404;
+const int kInternalServerError = 500;
+const int kServiceUnavailable = 503;
+const int kNotSupported = 501;
+
+extern const char kGet[];
+extern const char kPatch[];
+extern const char kPost[];
+extern const char kPut[];
+
+extern const char kAuthorization[];
+extern const char kContentType[];
+
+extern const char kJson[];
+extern const char kJsonUtf8[];
+extern const char kPlain[];
+extern const char kWwwFormUrlEncoded[];
+
+}  // namespace http
+}  // namespace weave
+
+#endif  // LIBWEAVE_SRC_HTTP_CONSTANTS_H_
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 25f8008..04fc8d2 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -15,10 +15,10 @@
 #include <base/strings/string_number_conversions.h>
 #include <base/strings/stringprintf.h>
 #include <base/values.h>
-#include <chromeos/http/http_request.h>
 #include <chromeos/strings/string_utils.h>
 #include <weave/enum_to_string.h>
 
+#include "libweave/src/http_constants.h"
 #include "libweave/src/privet/cloud_delegate.h"
 #include "libweave/src/privet/constants.h"
 #include "libweave/src/privet/device_delegate.h"
@@ -126,25 +126,24 @@
   const char* const reason;
   int code;
 } kReasonToCode[] = {
-    {errors::kInvalidClientCommitment, chromeos::http::status_code::Forbidden},
-    {errors::kInvalidFormat, chromeos::http::status_code::BadRequest},
-    {errors::kMissingAuthorization, chromeos::http::status_code::Denied},
-    {errors::kInvalidAuthorization, chromeos::http::status_code::Denied},
-    {errors::kInvalidAuthorizationScope,
-     chromeos::http::status_code::Forbidden},
-    {errors::kAuthorizationExpired, chromeos::http::status_code::Forbidden},
-    {errors::kCommitmentMismatch, chromeos::http::status_code::Forbidden},
-    {errors::kUnknownSession, chromeos::http::status_code::NotFound},
-    {errors::kInvalidAuthCode, chromeos::http::status_code::Forbidden},
-    {errors::kInvalidAuthMode, chromeos::http::status_code::BadRequest},
-    {errors::kInvalidRequestedScope, chromeos::http::status_code::BadRequest},
-    {errors::kAccessDenied, chromeos::http::status_code::Forbidden},
-    {errors::kInvalidParams, chromeos::http::status_code::BadRequest},
-    {errors::kSetupUnavailable, chromeos::http::status_code::BadRequest},
-    {errors::kDeviceBusy, chromeos::http::status_code::ServiceUnavailable},
-    {errors::kInvalidState, chromeos::http::status_code::InternalServerError},
-    {errors::kNotFound, chromeos::http::status_code::NotFound},
-    {errors::kNotImplemented, chromeos::http::status_code::NotSupported},
+    {errors::kInvalidClientCommitment, http::kForbidden},
+    {errors::kInvalidFormat, http::kBadRequest},
+    {errors::kMissingAuthorization, http::kDenied},
+    {errors::kInvalidAuthorization, http::kDenied},
+    {errors::kInvalidAuthorizationScope, http::kForbidden},
+    {errors::kAuthorizationExpired, http::kForbidden},
+    {errors::kCommitmentMismatch, http::kForbidden},
+    {errors::kUnknownSession, http::kNotFound},
+    {errors::kInvalidAuthCode, http::kForbidden},
+    {errors::kInvalidAuthMode, http::kBadRequest},
+    {errors::kInvalidRequestedScope, http::kBadRequest},
+    {errors::kAccessDenied, http::kForbidden},
+    {errors::kInvalidParams, http::kBadRequest},
+    {errors::kSetupUnavailable, http::kBadRequest},
+    {errors::kDeviceBusy, http::kServiceUnavailable},
+    {errors::kInvalidState, http::kInternalServerError},
+    {errors::kNotFound, http::kNotFound},
+    {errors::kNotImplemented, http::kNotSupported},
 };
 
 AuthScope AuthScopeFromString(const std::string& scope, AuthScope auto_scope) {
@@ -202,7 +201,7 @@
 
 void ReturnError(const chromeos::Error& error,
                  const PrivetHandler::RequestCallback& callback) {
-  int code = chromeos::http::status_code::InternalServerError;
+  int code = http::kInternalServerError;
   for (const auto& it : kReasonToCode) {
     if (error.HasError(errors::kDomain, it.reason)) {
       code = it.code;
@@ -216,7 +215,7 @@
 
 void OnCommandRequestSucceeded(const PrivetHandler::RequestCallback& callback,
                                const base::DictionaryValue& output) {
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void OnCommandRequestFailed(const PrivetHandler::RequestCallback& callback,
@@ -523,7 +522,7 @@
 
   output.SetInteger(kInfoUptimeKey, device_->GetUptime().InSeconds());
 
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandlePairingStart(const base::DictionaryValue& input,
@@ -563,7 +562,7 @@
   base::DictionaryValue output;
   output.SetString(kPairingSessionIdKey, id);
   output.SetString(kPairingDeviceCommitmentKey, commitment);
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandlePairingConfirm(const base::DictionaryValue& input,
@@ -586,7 +585,7 @@
   base::DictionaryValue output;
   output.SetString(kPairingFingerprintKey, fingerprint);
   output.SetString(kPairingSignatureKey, signature);
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandlePairingCancel(const base::DictionaryValue& input,
@@ -600,7 +599,7 @@
     return ReturnError(*error, callback);
 
   base::DictionaryValue output;
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandleAuth(const base::DictionaryValue& input,
@@ -661,7 +660,7 @@
   output.SetString(kAuthTokenTypeKey, kAuthorizationHeaderPrefix);
   output.SetInteger(kAuthExpiresInKey, kAccessTokenExpirationSeconds);
   output.SetString(kAuthScopeKey, EnumToString(requested_auth_scope));
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandleSetupStart(const base::DictionaryValue& input,
@@ -768,7 +767,7 @@
     }
   }
 
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandleState(const base::DictionaryValue& input,
@@ -779,7 +778,7 @@
   output.Set(kStateKey, defs);
   output.SetString(kFingerprintKey, base::IntToString(state_fingerprint_));
 
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandleCommandDefs(const base::DictionaryValue& input,
@@ -791,7 +790,7 @@
   output.SetString(kFingerprintKey,
                    base::IntToString(command_defs_fingerprint_));
 
-  callback.Run(chromeos::http::status_code::Ok, output);
+  callback.Run(http::kOk, output);
 }
 
 void PrivetHandler::HandleCommandsExecute(const base::DictionaryValue& input,
diff --git a/libweave/src/privet/privet_handler_unittest.cc b/libweave/src/privet/privet_handler_unittest.cc
index 5ce3caf..d9877a1 100644
--- a/libweave/src/privet/privet_handler_unittest.cc
+++ b/libweave/src/privet/privet_handler_unittest.cc
@@ -14,7 +14,6 @@
 #include <base/run_loop.h>
 #include <base/strings/string_util.h>
 #include <base/values.h>
-#include <chromeos/http/http_request.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -182,15 +181,15 @@
   void HandlerCallback(int status, const base::DictionaryValue& output) {
     output_.MergeDictionary(&output);
     if (!output_.HasKey("error")) {
-      EXPECT_EQ(chromeos::http::status_code::Ok, status);
+      EXPECT_EQ(200, status);
       return;
     }
-    EXPECT_NE(chromeos::http::status_code::Ok, status);
+    EXPECT_NE(200, status);
     output_.SetInteger("error.http_status", status);
   }
 
   static void HandlerNoFound(int status, const base::DictionaryValue&) {
-    EXPECT_EQ(status, 404);
+    EXPECT_EQ(404, status);
   }
 
   base::MessageLoop message_loop_;
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 2f35fd9..c5b2fb8 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -17,14 +17,13 @@
 #include <base/strings/string_number_conversions.h>
 #include <base/values.h>
 #include <chromeos/flag_helper.h>
-#include <chromeos/http/http_request.h>
 #include <chromeos/key_value_store.h>
-#include <chromeos/mime_utils.h>
 #include <chromeos/strings/string_utils.h>
 #include <chromeos/syslog_logging.h>
 #include <weave/network.h>
 
 #include "libweave/src/device_registration_info.h"
+#include "libweave/src/http_constants.h"
 #include "libweave/src/privet/cloud_delegate.h"
 #include "libweave/src/privet/constants.h"
 #include "libweave/src/privet/device_delegate.h"
@@ -112,8 +111,7 @@
 void Manager::PrivetRequestHandler(
     const HttpServer::Request& request,
     const HttpServer::OnReplyCallback& callback) {
-  std::string auth_header =
-      request.GetFirstHeader(chromeos::http::request_header::kAuthorization);
+  std::string auth_header = request.GetFirstHeader(http::kAuthorization);
   if (auth_header.empty() && disable_security_)
     auth_header = "Privet anonymous";
   std::string data(request.GetData().begin(), request.GetData().end());
@@ -123,9 +121,11 @@
   std::unique_ptr<base::Value> value;
   const base::DictionaryValue* dictionary = &empty;
 
-  std::string content_type = chromeos::mime::RemoveParameters(
-      request.GetFirstHeader(chromeos::http::request_header::kContentType));
-  if (content_type == chromeos::mime::application::kJson) {
+  std::string content_type =
+      chromeos::string_utils::SplitAtFirst(
+          request.GetFirstHeader(http::kContentType), ";")
+          .first;
+  if (content_type == http::kJson) {
     value.reset(base::JSONReader::Read(data).release());
     if (value)
       value->GetAsDictionary(&dictionary);
@@ -144,13 +144,12 @@
   std::string data;
   base::JSONWriter::WriteWithOptions(
       output, base::JSONWriter::OPTIONS_PRETTY_PRINT, &data);
-  callback.Run(status, data, chromeos::mime::application::kJson);
+  callback.Run(status, data, http::kJson);
 }
 
 void Manager::HelloWorldHandler(const HttpServer::Request& request,
                                 const HttpServer::OnReplyCallback& callback) {
-  callback.Run(chromeos::http::status_code::Ok, "Hello, world!",
-               chromeos::mime::text::kPlain);
+  callback.Run(http::kOk, "Hello, world!", http::kPlain);
 }
 
 void Manager::OnChanged() {
