Javascript 带Django和Angular的CORS飞行前请求
我正在尝试向RESTAPI发出请求。这是CORS的请求。 我的前端:Angular 1.5(本地主机:3000) 我的后端:Django(*****.ddns.net) 因此,我使用的是一项服务(由不想共享代码的人提供):(),即在实际请求(飞行前)之前执行选项请求。准确地说,调用是通过UI路由器状态定义的resolve选项进行的。 Django允许使用CORS* 这是我在google chrome中遇到的错误:Javascript 带Django和Angular的CORS飞行前请求,javascript,angularjs,django,cors,preflight,Javascript,Angularjs,Django,Cors,Preflight,我正在尝试向RESTAPI发出请求。这是CORS的请求。 我的前端:Angular 1.5(本地主机:3000) 我的后端:Django(*****.ddns.net) 因此,我使用的是一项服务(由不想共享代码的人提供):(),即在实际请求(飞行前)之前执行选项请求。准确地说,调用是通过UI路由器状态定义的resolve选项进行的。 Django允许使用CORS* 这是我在google chrome中遇到的错误: XMLHttpRequest cannot load https://****.n
XMLHttpRequest cannot load https://****.net/api/myprofile. The request was redirected to 'https://*****.net/punchclock/api/myprofile/', which is disallowed for cross-origin requests that require preflight.
如果我在一个控制器中执行一个经典的$http请求,它就正常工作了
这是我的django收到的请求:
+6655:5740d0f9:10|
OPTIONS /punchclock/api//myprofile HTTP/1.0|
Host:*****.net|
Connection:close|
Pragma:no-cache|
Cache-Control:no-cache|
Access-Control-Request-Method:GET|
Origin:http%3a//localhost%3a3000|
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36|
Access-Control-Request-Headers:accept, authorization|
Accept:*/*|
Referer:http%3a//localhost%3a3000/dashboard|
Accept-Encoding:gzip, deflate, sdch|
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2
-6655:5740d0f9:10
这是我和邮递员一起做时得到的回应(当我做一个选项请求时,它与邮递员一起工作)
我认为这是Django方面的问题,我不知道。如果你有任何想法…(我需要了解很多关于CORS的知识…)这可能是因为您发送的某些头是不允许的。为了确保这一点,只需转到google chrome调试器,复制请求头并使用postman发送它们。如果失败,请删除头,直到找到不允许发送的头 有一种方法可能会有所帮助,特别是 根据,如果提交的任何标头与允许的标头不匹配,飞行前必须拒绝请求
请确保您的目标URL构造正确,并且在您调用的路由的末尾有一个尾随斜杠。如前所述。因此,请不要这样做
'http://localhost:5000/auth'
你会称之为
'http://localhost:5000/auth/'
希望这有帮助。我按照你说的做了。首先,我检查了chrome调试器,我得到的是:
第一个请求,选项一返回一个200请求方法:选项状态代码:200 OK远程地址:**********************************。
但是第二个:请求URL:https://****.ddns.net/api/myprofile请求方法:获取状态代码:301永久移动了远程地址:*************************
此外,我还尝试使用postman(+拦截器插件)添加所有标题它还返回一个200。那么你的问题不是CORS,如果你从选项中得到200,我想真正请求的301是一个重定向,所以服务器端的家伙应该能够在那里帮助你。或者在你得到重定向时向新的url发出第二个请求。我尝试使用所有的头并模拟从邮递员那里得到的,这是一个200…i a我很困惑。我也试着直接在被重定向的url上做选择和获取,我也有同样的问题。更新:我发现了一个关于重定向的问题,如果我直接通过angular应用程序调用api,它现在正在工作,所以问题是当请求中存在重定向时。根据另一个问题,这个问题可能与此有关预测。我会调查的。谢谢@inkalimeva'http://localhost:5000/auth/'