【发布时间】:2018-05-19 12:08:49
【问题描述】:
上周我一直在为后端和前端的一个错误而苦苦挣扎。
我制作了一个 REST API (php/symfony) 来管理书籍和作者。我在 DELETE 上的跨域请求上遇到了问题,此后该问题已得到修复。现在我在 PUT(POST)上有一个问题,这仅在 Chrome(v62.0.3202.94)上。在邮递员上尝试了我的 API,它工作得很好,也在 Edge 和 Firefox 上进行了测试。 我尝试使用 Chrome 的 Allow-Control-Allow-Origin: * 插件,但也没有用。 每次我遇到同样的错误:
Request URL:http://127.0.0.1/whereIsMyBook-symfony/web/app_dev.php/updateAuthor/7
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Remote Address:127.0.0.1:80
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Access-Control-Allow-Origin:*
Allow:PUT
Cache-Control:no-cache, private
Connection:Keep-Alive
Content-Type:text/html; charset=UTF-8
Date:Tue, 05 Dec 2017 18:05:06 GMT
Keep-Alive:timeout=5, max=99
Server:Apache/2.4.27 (Win64) PHP/5.6.31
Transfer-Encoding:chunked
X-Debug-Token:e8abc7
X-Debug-Token-Link:http://127.0.0.1/whereIsMyBook-symfony/web/app_dev.php/_profiler/e8abc7
X-Powered-By:PHP/5.6.31
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Access-Control-Request-Headers:access-control-allow-origin,content-type
Access-Control-Request-Method:OPTIONS
Connection:keep-alive
Host:127.0.0.1
Origin:http://localhost:8000
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
我的后端抛出异常:
angular.js:12265 OPTIONS http://127.0.0.1/whereIsMyBook-symfony/web/app_dev.php/updateAuthor/7 net::ERR_ABORTED
我尝试修改我的 app.config.js 并添加以下行:
['$httpProvider', function ($httpProvider) {
delete $httpProvider.defaults.headers.common['X-Requested-With'];
$httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript';
$httpProvider.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
$httpProvider.defaults.useXDomain = true;
}]
我认为我对飞行前请求有疑问,但似乎无法正确摆脱它们。我浏览了很多页面,仍然找不到它不起作用的原因。正如 Leia 曾经说过的:“你是我最后的希望”。
这是我的方法(在服务中):
this.editAuthor= function(formData, index){
return $http({
method : 'PUT',
url : baseUrl + '/updateAuthor/' + index,
data : formData,
headers: {
'Access-Control-Allow-Origin' : '*',
'Content-Type': 'application/json'
}
})
}
我的 API 托管在 localhost 上的 wamp 上,并激活了 apache headers_module。
感谢您的热心帮助
【问题讨论】:
-
您需要在 API 上添加 CORS 标头,因为 API 和前端运行在不同的端口上。这个包应该允许你这样做:github.com/nelmio/NelmioCorsBundle 如果你已经在使用这个包,那么检查
allow_methods: ['POST','GET','DELETE','PUT']配置设置 -
好的,它可以工作 :-) 非常感谢您抽出宝贵的时间!!!!
-
嗨贾斯汀,你能接受我的回答吗?这是我帮助你的奖励:)
标签: javascript php angularjs symfony google-chrome