Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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 JQuery飞行前请求CORS_Javascript_Python_Jquery_Cors - Fatal编程技术网

Javascript JQuery飞行前请求CORS

Javascript JQuery飞行前请求CORS,javascript,python,jquery,cors,Javascript,Python,Jquery,Cors,我正在编写一个web映射,并尝试从我有凭据的web资源获取JSON。这在通过JuPyteR笔记本运行的Python中非常有效: import requests header = { "Accept": "application/json, text/plain, */*", "Accept-Language": "de-DE", "Content-Type": "application/json", "Pragma": "no-cache",

我正在编写一个web映射,并尝试从我有凭据的web资源获取JSON。这在通过JuPyteR笔记本运行的Python中非常有效:

import requests
header = {  "Accept": "application/json, text/plain, */*",
        "Accept-Language": "de-DE",
        "Content-Type": "application/json",
        "Pragma": "no-cache",
        "Cache-Control": "no-cache",
        "Origin": "https://myCoolServer.azurewebsites.net"}
}
dataJSON = json.dumps({ "username": "XXX",
    "password": "XXX"}).encode('utf8')
url = "URL/v1/token"
r = requests.post(url, data=dataJSON, headers=header)
来自python的请求提供以下标题:

'User-Agent': 'python-requests/2.19.1', 
'Accept-Encoding': 'gzip, deflate', 
'Accept': 'application/json, text/plain, */*', 
'Connection': 'keep-alive', 
'Accept-Language': 'de-DE', 
'Content-Type': 'application/json', 
'Pragma': 'no-cache', 
'Cache-Control': 'no-cache', 
'Content-Length': '67',
'Origin': 'https://myCoolServer.azurewebsites.net'
现在,我正在尝试用JavaScript重新创建此文件,以便在我的网络地图中获取数据:

$.ajax ({
          method: 'POST',
          data: JSON.stringify({ "username": name,
    "password": pass}),
    headers:  {
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "de-DE",
        "Content-Type": "application/json",
        "Pragma": "no-cache",
        "Cache-Control": "no-cache"
      },
          dataType:'json',
          url:'URL/v1/token',
          error: function() {
            alert("Login failed. Check username/password!");
          },
          success: function(resp) {

            token=resp.token;
          }
控制台显示飞行前选项调用的以下标题:

Host: "cool API"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-DE
Accept-Encoding: gzip, deflate, br
Access-Control-Request-Method: POST
Access-Control-Request-Headers: cache-control,content-type,pragma
Origin: https://myCoolServer.azurewebsites.net
DNT: 1
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
来自服务器的飞行前选项响应已成功,响应为200。但是我没有完成这篇文章,因为FF和Chrome中的控制台给了我:

Origin https://myCoolServer.azurewebsites.net not found in Access-Control-Allow-Origin header.
HTTP/1.1 200 OK
Date: Mon, 19 Nov 2018 08:07:30 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: no-cache, private
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, PUT, GET, DELETE, OPTIONS
Access-Control-Allow-Headers: cache-control,content-type,pragma
Access-Control-Max-Age: 3600
Access-Control-Allow-Origin: null
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
来自服务器的响应标头为我提供:

Origin https://myCoolServer.azurewebsites.net not found in Access-Control-Allow-Origin header.
HTTP/1.1 200 OK
Date: Mon, 19 Nov 2018 08:07:30 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: no-cache, private
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, PUT, GET, DELETE, OPTIONS
Access-Control-Allow-Headers: cache-control,content-type,pragma
Access-Control-Max-Age: 3600
Access-Control-Allow-Origin: null
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
由于整个想法在Python中起作用,我希望我也能“模仿”Javascript/Jquery中的行为。因此,我期待您的评论/提示


注意:当使用CORS插件在Chrome上运行时,整个过程在JS中运行…

Python不会检查CORS,浏览器会检查CORS以避免XSS之类的安全问题

您需要使服务器使用端点所调用的域(“?”)响应标题“Access Control Allow Origin”

如果希望服务器允许为任何域使用调用:

“访问控制允许源:*”

(当前为“访问控制允许来源:空”)


这是必需的,因为浏览器需要知道是否希望从该域调用该服务器。

Python不检查CORS,浏览器会检查CORS以避免XSS之类的安全问题

您需要使服务器使用端点所调用的域(“?”)响应标题“Access Control Allow Origin”

如果希望服务器允许为任何域使用调用:

“访问控制允许源:*”

(当前为“访问控制允许来源:空”)


这是必需的,因为浏览器需要知道是否希望从该域调用该服务器。

CORS规则主要由客户端而不是服务器强制执行。python脚本没有实现这些规则,因此请求成功,但浏览器实现了这些规则并阻止了请求

现在,服务器应该向客户端提供关于是否允许CORS请求的信息。飞行前请求只是为了获取这些信息(因为您的请求不是“简单请求”,cf)。在您的情况下,显然服务器配置不好:

Access-Control-Allow-Origin: null

您应该使用“*”而不是null,或者至少“.”

CORS规则主要由客户端而不是服务器强制执行。python脚本没有实现这些规则,因此请求成功,但浏览器实现了这些规则并阻止了请求

现在,服务器应该向客户端提供关于是否允许CORS请求的信息。飞行前请求只是为了获取这些信息(因为您的请求不是“简单请求”,cf)。在您的情况下,显然服务器配置不好:

Access-Control-Allow-Origin: null

您应该使用“*”而不是null,或者至少“.”显示您的服务器CORS配置-看起来好像有问题(在
访问控制允许源代码:null中),那么它在我的本地计算机上也不应该在python中工作,是吗?这取决于。。。来自python的请求的来源是什么?为了清晰起见,区别必须有所改变。您显示了ajax响应头,但显示了ajax请求头(chrome>控制台>网络>您的请求)显示了服务器CORS配置-看起来有问题(在
访问控制允许来源:null
)那么它在我本地的python中也不应该工作,是吗?这取决于。。。来自python的请求的来源是什么?为了清晰起见,必须改变区别。您显示ajax响应头,但显示ajax请求头(chrome>console>networks>您的请求)