关于previous question,我仍然面临一个问题,即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
});
Hal 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对象。
有没有人有这方面的经验?