javascript - 为什么在我的 Angular 2 应用程序中发送的是 OPTIONS 请求而不是 PUT?

标签 javascript api angular cors

<分区>

我正在尝试执行模型的更新功能,尝试通过 PUT 调用 API 中的 Update 方法。

这是我的服务客户:

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, RequestMethod, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';

[...]

    updateClients(client_id, data){
        let headers = new Headers({ 'Content-Type': 'application/json' });

              let body = JSON.stringify(data);

              return this.http.put(`${this.baseUrl}/client/`+client_id, body, headers)
                .toPromise()
                .then(response => response.json().data)
                .then(items => items.map((item, idx)  => {
                  return{
                    id: item.id
                  };
                }));
    }

但它不起作用,因为该方法通过 OPTIONS 而不是 PUT。在我的浏览器控制台中出现:XMLHttpRequest can not load http://ip/api/client/5 。飞行前响应中的 Access-Control-Allow-Methods 不允许方法 PUT。

但是,在 API (Laravel 5.3) 中启用了 PUT 方法。我已经用 POSTMAN 试过了,它很管用。在我的响应标题中:

Access-Control-Allow-Origin: *
Allow: GET, HEAD, PUT, PATCH, DELETE
Cache-Control: no-cache
Connection: keep-alive

为什么它来自期权请求而不是放置? POST 方法适用于 Angular 2。

最佳答案

OPTIONS 是浏览器在某些 CORS 情况下自动发送的预检请求。如果服务器没有响应预期的 CORS header (Access-Control-Allow-Origin 和其他),浏览器根本不会发出 PUT 请求。

您需要配置服务器以使用预期的 header 进行响应,以便能够直接从 Angular(或一般的 JS)使用此服务器

关于javascript - 为什么在我的 Angular 2 应用程序中发送的是 OPTIONS 请求而不是 PUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446507/

相关文章:

html - PrimeNG Accordion 展开全部/折叠全部

javascript - 有什么方法可以使用拖放以 Angular 上传 .ply、.STL、.obj 文件吗?

angular - 定期检查 service worker 更新

javascript - 找到开始字符串的制表符数量的最佳/最快方法是什么?

javascript - 如何从当前页面获取div的内容并谷歌它?

php - 尝试使用 magento 2 api 为用户保存送货信息时出错

php - Gmail API 丢失邮件

javascript - React Navigation 在导航时转到初始路线

javascript - 解析云代码-在 "normal"函数中查询用户问题

java - Java SE 7 何时发布?