2

关于上一个问题,我仍然面临一个问题,即 Content-Type 似乎没有发送到预检请求,在服务器上启用了 OPTIONS,并且数据被填充为 json 对象。我一直在 HAL JSON 语法和常规 JSON 之间来回切换,结果相同。

常规json:

return $http({
    url: 'http://ait.local/entity/node?_format=json',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    data: task
});

哈尔 json:

return $http({
    url: 'http://ait.local/entity/node?_format=hal_json',
    method: 'POST',
    headers: {
        'Content-Type': 'application/hal+json'
    },
    data: task
});

检查 Chrome 和 FF 中的标头不会在请求标头中显示 Content-Type。这是回应:

XMLHttpRequest 无法加载http://ait.local/entity/node?_format=json。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问源“ http://localhost:8080 ”。

我已经确保在服务器上启用了 CORS,在 .htaccess 中:

<IfModule mod_headers.c>
  # Disable content sniffing, since it's an attack vector.
  Header always set X-Content-Type-Options nosniff

  Header set Access-Control-Allow-Origin "http://localhost:8080"
  Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, PATCH, DELETE"
  Header set Access-Control-Allow-Headers "Origin, Authorization, Accept, Content-Type, X-Requested-With"

  RewriteCond %{REQUEST_METHOD} OPTIONS
  RewriteRule .* / [R=200,L]
</IfModule>

此外,如果我在 Postman 中对此进行测试,HAL JSON 会有 201 Created 响应并创建实体。这让我相信问题出在 Angular 的某个地方。但是,即使使用 jQuery 执行相同的请求也会导致完全相同的错误。如果我控制台记录任务数据,它确实是一个 JSON 对象。

有没有人有这方面工作的经验?

4

0 回答 0