jQuery 和跨域 POST 请求

     2023-03-04     176

关键词:

【中文标题】jQuery 和跨域 POST 请求【英文标题】:jQuery and Cross Domain POST Requests 【发布时间】:2011-08-19 23:23:22 【问题描述】:

我正在开发一个 jQuery 插件,它将成为一些 REST API 的连接器。 实施是直截了当的,但同源政策绝对是痛苦的。 我主要需要执行 POST 请求。

我也试过实现OPTIONS方法并返回(是python,但意思应该清楚)

def options(self):
  self.response.headers['Access-Control-Allow-Origin'] = self.request.host_url
  self.response.headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
  self.response.headers['Access-Control-Allow-Headers'] = 'x-requested-with'
  self.response.headers['Access-Control-Max-Age'] = '1728000'

还是不行……有什么办法吗?

PS:我看到有其他类似主题的问题,但我需要一个针对 POST 方法的特定解决方案(使用 iframe 可以轻松实现 GET)

Javascript 示例:

$.ajax(
    url: options.protocol+'://'+options.host+':'+options.port+'/'+method,
    data: rawData,
    async:false,
    dataType: "json",
    type:"POST",
    success:function(data)
    
        alert('asd');
        result.data = data;
        alert(data);
    ,
    error:function(lol)
        alert('omggg !!!!'+lol);
    

);

编辑:添加 javascript 代码示例

【问题讨论】:

你需要支持的浏览器是否支持跨域header? 您是否仅尝试使用Access-Control-Allow-Origin 并将其设置为*?这一直对我有用。 好吧,我刚刚发现一篇文章解释了这些标题的作用。对于测试,我使用的是 firefox,实际上我得到了返回正文(thx httpfox),但我无法获得名为(jQuery.ajax)的成功方法 【参考方案1】:

有时候有点乱,一些想法:

CORS 仅受相当现代的浏览器支持,因此您需要确保使用其中一种。 IE 仅通过 XDomainRequest 对象支持 CORS,而不是标准的 XMLHttpRequest 对象,但 jQuery 并没有专门满足这一点(然而;我不得不承认我有点惊讶,预计它会太长了),所以你必须添加特殊处理才能使其在 IE 上工作(然后只有 IE8 及更高版本)。 编辑:令人震惊的是,jQuery 团队显然已经收到了该请求并拒绝:ticket #8283 这使得 没有感觉。 您确定Access-Control-Allow-Origin 的值吗? 看起来它只允许从它所在的服务器进行访问。该标头旨在指定服务器将允许请求来自的来源。 (并且* 是允许的,意思是“任何地方”。) 我似乎从我对 Firefox 的实验中回忆起,在响应它没有请求的 OPTIONS 请求时,我的允许方法很挑剔。 仔细检查您是否允许所有请求发送的标头;在您的示例中,您似乎只允许一个标头 (x-requested-with),但我敢打赌,实际请求中还会有其他标头。

FWIW(我不是 Python 人),这是我的 JSP 代码,它可以工作,也许它会很有用——我认为对象名称足够清晰,即使你不使用 Java 也可以阅读(谁知道呢? ,也许你会这样做):

String corsOrigin, corsMethod, corsHeaders;

// Find out what the request is asking for
corsOrigin = request.getHeader("Origin");
corsMethod = request.getHeader("Access-Control-Request-Method");
corsHeaders = request.getHeader("Access-Control-Request-Headers");
if (corsOrigin == null || corsOrigin.equals("null")) 
    // Requests from a `file://` path seem to come through without an
    // origin or with "null" (literally) as the origin.
    // In my case, for testing, I wanted to allow those and so I output
    // "*", but you may want to go another way.
    corsOrigin = "*";


// Add headers allowing specifically what was requested
response.addHeader("Access-Control-Allow-Origin", corsOrigin);
response.addHeader("Access-Control-Allow-Methods", corsMethod);
response.addHeader("Access-Control-Allow-Headers", corsHeaders);
if (request.getMethod().equals("OPTIONS"))

    // Done, no body in response to OPTIONS
    return;

// Processing the GET or POST here; output the body of the response

请注意,我对 GETPOSTOPTIONS 使用完全相同的逻辑,除了在 OPTIONS 的情况下,我不输出响应正文。

【讨论】:

jquery.form 和跨域请求

】jquery.form和跨域请求【英文标题】:jquery.formandcross-domainrequests【发布时间】:2011-07-0106:34:54【问题描述】:我很难通过跨域请求创建jquery.form。我在使用Firefox和Chrome时遇到问题(甚至还没有尝试过IE)。解释:我的整个网站都... 查看详情

SignalR 核心和跨域请求的问题

】SignalR核心和跨域请求的问题【英文标题】:IssuewithSignalRcoreandcrossdomainrequests【发布时间】:2018-07-3109:02:35【问题描述】:我们将SignalR核心与CORS跨域请求一起使用。客户端无法连接到服务器。401UnauthorizedNoAccess-Control-Allow-Origin\... 查看详情

AngularJS和跨域请求被阻止[关闭]

】AngularJS和跨域请求被阻止[关闭]【英文标题】:AngularJS&Cross-OriginRequestBlocked[closed]【发布时间】:2014-11-1006:53:43【问题描述】:有什么帮助吗?当我尝试从服务器获取数据时显示此错误。我的Angular应用程序在我的本地计算机... 查看详情

一篇搞定vue请求和跨域

  vue本身不支持发送AJAX请求,需要使用vue-resource、axios等插件实现  axios是一个基本Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对vue-resource进行更新和维护 axios发送AJAX请求  安装axiosnpminstal... 查看详情

获取 API、自定义请求标头、CORS 和跨域重定向

】获取API、自定义请求标头、CORS和跨域重定向【英文标题】:FetchAPI,customrequestheaders,CORS,andcross-originredirects【发布时间】:2017-03-2715:04:24【问题描述】:我需要在浏览器中使用自定义请求标头发出HTTPGET请求,并在结果流入时对... 查看详情

获取 API、自定义请求标头、CORS 和跨域重定向

】获取API、自定义请求标头、CORS和跨域重定向【英文标题】:FetchAPI,customrequestheaders,CORS,andcross-originredirects【发布时间】:2017-03-2715:04:24【问题描述】:我需要在浏览器中使用自定义请求标头发出HTTPGET请求,并在结果流入时对... 查看详情

跨域 POST 请求未发送 cookie Ajax Jquery

】跨域POST请求未发送cookieAjaxJquery【英文标题】:CrossdomainPOSTrequestisnotsendingcookieAjaxJquery【发布时间】:2013-01-0521:52:45【问题描述】:似乎在***上已经讨论过类似的东西,但我找不到完全相同的东西。我正在尝试使用CORS(跨域资... 查看详情

jquery跨域发送post请求该怎么处理

参考技术A$.getJSON是对$.ajax的封装,只实现了GET,要用POST可以直接用$.ajax:$.ajax(type:"POST",url:url,data:postdata,dataType:'jsonp',success:success);本回答被提问者和网友采纳 查看详情

使用 API(带有两个 jQuery 版本和跨域的页面)

】使用API(带有两个jQuery版本和跨域的页面)【英文标题】:WorkingwithAPI(pagew/twojQueryversionsandcross-domain)【发布时间】:2012-04-2705:28:05【问题描述】:我还不是经验丰富的开发人员,所以如果我听起来太笨拙或不够清晰,请原谅我... 查看详情

CefSharp 和跨域

】CefSharp和跨域【英文标题】:CefSharpandCrossdomain【发布时间】:2013-07-3008:25:03【问题描述】:我正在尝试在.NET4.0应用程序中使用CefSharpwebbrowser。我从本地存储的html和js内容加载页面。因此网络浏览器使用file://协议打开页面。页... 查看详情

springboot自定义拦截器和跨域配置冲突

参考技术A在我们使用springboot中,难免遇到前后端分离的场景,因此也带来的问题是跨域请求,虽然springboot在配置跨域请求中非常方便,但是如果投跨域场景和自定义拦截器一起使用的话,那就没那么顺利了。二者功能会有冲突... 查看详情

Internet Explorer 中的跨域 POST 请求 ajax

】InternetExplorer中的跨域POST请求ajax【英文标题】:Cross-domainPOSTrequestajaxininternetexplorer【发布时间】:2012-05-1020:50:03【问题描述】:我正在使用jQuery1.7.2并想向另一个域发出POST请求。它必须是一个POST请求。但这在InternetExplorer中不... 查看详情

Internet Explorer 中的跨域 POST 请求 ajax

】InternetExplorer中的跨域POST请求ajax【英文标题】:Cross-domainPOSTrequestajaxininternetexplorer【发布时间】:2012-05-1020:50:03【问题描述】:我正在使用jQuery1.7.2并想向另一个域发出POST请求。它必须是一个POST请求。但这在InternetExplorer中不... 查看详情

将值从 c# 传递到 actionscript 3 和跨域问题

】将值从c#传递到actionscript3和跨域问题【英文标题】:Passingvaluesfromc#toactionscript3andcrossdomainquestions【发布时间】:2017-08-1100:55:14【问题描述】:我有一个想用于游戏服务器的C#控制台应用程序正在编写的客户端是as3。稍后我将把s... 查看详情

jquery跨域发送post请求该怎么处理

jsonp请求啊, $.ajax(                      type: 'GET',                   ... 查看详情

JQuery ajax JSONP POST跨域时改为GET

】JQueryajaxJSONPPOST跨域时改为GET【英文标题】:JQueryajaxJSONPPOSTchangedtoGETwhencrossdomain【发布时间】:2012-05-1806:20:08【问题描述】:我有一个等待POST的WCF服务。使用Fiddler我发现在跨域情况下,我的POST请求被更改为GET,导致服务器出... 查看详情

是否可以对 application/json 进行跨域 POST ajax 请求?

】是否可以对application/json进行跨域POSTajax请求?【英文标题】:IsispossibletomakeacrossdomainPOSTajaxrequestofapplication/json?【发布时间】:2012-08-2109:31:24【问题描述】:我正在测试一些csrf的东西,我想知道是否可以使用Content-Type:application/... 查看详情

thinkphp6.0路由的域名和跨域请求(代码片段)

本节课我们来学习一下路由的域名操作和跨域请求问题;一.域名路由1.要使用域名路由,首先,在本地我们需要通过hosts文件来映射;2.打开C:\\Windows\\System32\\drivers\\etc找到hosts文件;3.在末尾添加一句࿱... 查看详情