javascript - 当我应该昏倒时传递选项

标签 javascript angularjs http-headers angular-resource http-method

我有以下配置。

.config(config);

config.$inject = ["$httpProvider"];

function config($httpProvider) {
  $httpProvider.defaults.useXDomain = true;
  delete $httpProvider.defaults.headers.common["X-Requested-With"];


  //Reset headers to avoid OPTIONS request (aka preflight)
  $httpProvider.defaults.headers.common = {};
  $httpProvider.defaults.headers.post = {};
  $httpProvider.defaults.headers.put = {};
  $httpProvider.defaults.headers.patch = {};
}

至于我的$resource

.factory('Order', order)

order.$inject = ['$resource', "ApiEndpoint", "UserRecord"];

function order($resource, ApiEndpoint, UserRecord) {
  var id = null;

  UserRecord.retrieve().then(function (user) {
    id = user.user_id;
  })

  return $resource(ApiEndpoint.url + 'orders.json', {}, {
    update: {method: 'PUT', url: ApiEndpoint.url + 'orders.json'}
  });
}

现在当我像这样调用更新时

var params = { name: "new name" };

Order.update(params, {}, function (resp) {
  console.log(resp);
})

我的控制台呈现请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“http://localhost:8100”。响应的 HTTP 状态代码为 401。 作为 OPTIONS 请求。如果我运行 POST 请求,一切都会按预期正常工作。

当我访问服务器日志时,它会验证我正在运行 OPTIONS 请求。如何修复此问题以运行 PUT 请求?

最佳答案

您正在尝试发出 CORS(跨源资源共享)请求,这意味着您尝试连接到不是您的源的服务器。您的源是为您的应用程序提供服务的服务器。

由于浏览器安全策略,除 GET 之外的每个请求都需要预检握手(选项),其中非源服务器描述他允许来自源 X 的某人使用哪些 header 和方法。

因此,跳过预检的唯一方法是将您正在访问的资源放在为应用程序提供服务的同一服务器上。

关于javascript - 当我应该昏倒时传递选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31732136/

相关文章:

javascript - 在模型更新时向不同客户端发送响应

c - 如何绕过阻止直接连接的网站?

javascript - Cookie 在 Web 应用程序中的用途是什么?

javascript - Angular - 从 Controller 访问动态创建的表单元素

javascript - 如何将有关事件的信息传递给 JavaScript 函数

javascript - 手动将 dirty 设置为字段不会修改 css 类 angularJS?

Javascript 揭示模块模式 - this 和内部函数调用

javascript - Angular JS - 当一个数组中特定键中的值也显示为另一个数组中特定键中的值时进行过滤

angular - 如何解决资源被阻止,Angular 中的 MIME 类型不匹配?

c# - 如何为 WCF 服务添加跨域支持