Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带Django和Angular的CORS飞行前请求_Javascript_Angularjs_Django_Cors_Preflight - Fatal编程技术网

Javascript 带Django和Angular的CORS飞行前请求

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

我正在尝试向RESTAPI发出请求。这是CORS的请求。 我的前端:Angular 1.5(本地主机:3000) 我的后端:Django(*****.ddns.net)

因此,我使用的是一项服务(由不想共享代码的人提供):(),即在实际请求(飞行前)之前执行选项请求。准确地说,调用是通过UI路由器状态定义的resolve选项进行的。 Django允许使用CORS*

这是我在google chrome中遇到的错误:

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/'