我试图通过PHP后端更新/插入MySQL数据库中的数据.我正在用AngularJS构建前端,并使用$http服务与REST API通信.

我的设置如下所示:

I'm setting the header via the $httpProvider:

 $httpProvider.defaults.withCredentials = true;
 $httpProvider.defaults.headers = {'Content-Type': 'application/json;charset=utf-8'};

And the POST-Call looks like this:

   return $http({
      url: url,
      method: "POST",
      data: campaign
    });

The Dev Console in Chrome shows me this:

enter image description here

当我从POST转换为看跌期权时,我发送的是期权看涨期权,而不是看跌期权.而内容类型仅切换到content-type.

My request payload is send as an object:

enter image description here

我如何正确设置我的页眉?


EDIT:

PHP后端设置了一些标题:

   $e->getResponse()
              ->getHeaders()
              ->addHeaderLine('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

   $e->getResponse()
              ->getHeaders()
              ->addHeaderLine('Access-Control-Allow-Origin', '*');

是不是少了什么东西?

推荐答案

Ok, I've solved it.

What was the problem?
删除、PUT和POST的CORS工作流程如下:

在此处输入图像描述

它的作用是:

  1. 判断要发出的请求
  2. If it's POST, PUT or DELETE
  3. It sends first an OPTION request to check if the domain, from which the request is sent, is the same as the one from the server.
  4. If not,它希望允许访问头发送此请求

Important here: An OPTIONS request doesn't send credentials.

So my backend server disallowed the PUT request.

Solution:
将此文件放入.htaccess文件中

RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ blank.php [QSA,L]
Header set Access-Control-Allow-Origin "http://sub.domain:3000"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"

在这之后,create an empty .php file called blank.php inside the public folder.

编辑:正如一位 comments 者所指出的,您可以将这个重写规则添加到您的应用程序中,而不是创建一个空的PHP文件.htaccess文件\;

RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]

To clarify:

  1. I already sent the Access-Control-Header
  2. 它解决的是前两行,而且
  3. 访问控制允许来源于具有端口的特定子域

我能找到的最好的网站是learn more about CORS个.

Json相关问答推荐

使用SQL查询从SON中查找第n个密钥对值

无法根据vega规范中的条件设置文本 colored颜色

手动解开没有可编码的SON- Swift

在ConvertFrom-Json之后需要从PowerShell对象中获取数据

Pandas 对REST API的自定义响应

展平多个数组以保持顺序

jq: Select 何时来自另一个数组的值与此 json 中的值匹配

如何使用nifi从json文件中过滤属性

如果有 1 个元素,如何防止 ConvertFrom-Json 折叠嵌套数组

jq搜索特定字符串并输出对应的父值

使用 json 值过滤 Django 模型

如何删除 django jsonfield 中的特定项目

可以通过 POST 使用 EventSource 传递参数的服务器发送事件 (SSE)

在 Rails 中使用 JSON 创建嵌套对象

使用 ajax 将 JSON 发送到 PHP

如何安装 json gem - 无法构建 gem 原生扩展(mac 10.10)

有没有办法在 angular.json 中扩展配置?

Protocol Buffer vs Json - 何时 Select 一个而不是另一个

JSON 格式的 Amazon S3 响应?

春天:返回@ResponseBodyResponseEntity>