关于上一个问题,我仍然面临一个问题,即 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 对象。
有没有人有这方面工作的经验?