当前位置: 首页 > 面试题库 >

如何获得跨域资源共享(CORS)的后请求工作

索令
2023-03-14
问题内容

我在本地局域网(machineA)上有一台具有两个Web服务器的计算机。第一个是XBMC中的内置端口(在端口8080上),并显示我们的库。第二台服务器是我用来根据需要触发文件转换的CherryPy
python脚本(端口8081)。由XBMC服务器提供的页面上的AJAX POST请求触发文件转换。

  • 转到显示库的http:// machineA:8080
  • 显示图书馆
  • 用户点击“转换”链接,发出以下命令-

jQuery Ajax请求

$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
  • 浏览器发出带有以下标头的HTTP OPTIONS请求;

请求标头-选项

Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://machineA:8080
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
  • 服务器响应以下内容;

响应标题-选项(状态= 200 OK)

Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:40:29 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
  • 然后对话停止。理论上,浏览器应该在服务器以正确的(?)CORS标头响应时发出POST请求(Access-Control-Allow-Origin:*)

为了进行故障排除,我还从http://jquery.com发出了相同的$
.post命令。这是我在jquery.com遇到麻烦的地方,发布请求有效,OPTIONS请求由POST发送。该事务的标题在下面;

请求标头-选项

Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://jquery.com
Access-Control-Request-Method: POST

响应标题-选项(状态= 200 OK)

Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1

请求标头-POST

Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jquery.com/
Content-Length: 12
Origin: http://jquery.com
Pragma: no-cache
Cache-Control: no-cache

响应标头-POST(状态= 200 OK)

Content-Length: 32
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: application/json

我无法弄清楚为什么相同的请求会在一个站点上起作用,而在另一个站点上却不起作用。我希望有人能够指出我所缺少的。谢谢你的帮助!


问题答案:

我最终偶然发现了此链接“ CORS
POST请求可通过普通javascript运行,但为什么不使用jQuery?
”指出jQuery
1.5.1添加了

 Access-Control-Request-Headers: x-requested-with

所有CORS请求的标头。jQuery 1.5.2不会这样做。另外,根据相同的问题,设置服务器响应标头为

Access-Control-Allow-Headers: *

不允许响应继续。您需要确保响应标头专门包含必需的标头。即:

Access-Control-Allow-Headers: x-requested-with


 类似资料:
  • 跨域资源共享 (CORS) 跨域资源共享(Cross-Origin Resource Sharing)允许WEB端的应用程序访问不属于本域的资源 配置格式 CORS配置为json字符串,类似 { "rules":[ { "id":"id1" "AllowOrigin":"http://*.example.com" //指定允许发送跨源请求的源,支持使用通配符

  • 问题内容: 我对跨域JavaScript的概念有疑问。 有一个服务器(ex amazon.com),在其中只有选定的域可以使用其Web服务。所以可以肯定,如果我尝试从本地使用他们的服务,我将无法。我在控制台上得到了这个 跨域请求被阻止:“同源起源”策略禁止读取http://football20.myfantasyleague.com/2014/export?TYPE=rosters&L=52761

  • 本文向大家介绍浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法,包括了浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法的使用技巧和注意事项,需要的朋友参考一下 由于同源策略的缘故,ajax不能向不同域的网站发出请求。 比如a站localhost需要向b站请求数据,地址为:http://www.walk-sing.com/api.php 请求的代码如下: 访问该页

  • 问题内容: 我正在编写一个HTML5应用程序,该应用程序使用JSONP从几个不同的来源收集数据。我对GET所做的任何事情都可以正常工作。我现在正尝试发布数据,并且遇到了一个有趣的问题。我需要将数据从我的应用程序发布到另一个应用程序,该应用程序从本地计算机运行。我正在尝试编写具有跨平台功能的移动应用程序(请考虑使用Pulse / Flipboard),因此该代码将始终从本地源运行。我的思考过程如下:

  • 问题内容: Firefox存在一个长期存在的问题,即不加载与当前网页不同来源的字体。通常,在CDN上提供字体时会出现问题。 随着Amazon S3 CORS的推出,是否存在使用CORS解决Firefox中字体加载问题的解决方案? 编辑:非常高兴看到S3 CORS配置的示例。 edit2:我找到了一个可行的解决方案,但实际上并没有理解它的作用。如果任何人都可以提供有关配置的更详细的解释以及亚马逊解释

  • 编辑2:我已经找到了一个可行的解决方案,但没有真正理解它的作用。如果有人能提供关于配置的更详细的解释,以及在亚马逊对配置的解释中所发生的背景魔法,那将是非常感谢的,就像nzifnab提供的赏金一样。