当前位置: 首页 > 知识库问答 >
问题:

我可以在跨域json请求中设置标题吗?

梁马鲁
2023-03-14

我在网上做了一些研究,但我没有设法得到关于这个主题的完整画面。有人能帮助解决这个问题吗?

这是我目前发现的:

  • 可以使用jsonp进行跨域调用。在jsonp调用中不允许更改头
  • 如果服务器允许,可以使用json进行跨域调用。

这就是我想做的:

$.ajax({
    type: "GET",
    crossDomain: true,
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + ($("#accesstoken").val()));
    },
    contentType: "application/json; charset=utf-8",
    url: myJSonServer + encodeURI(operation),
    dataType: 'json',
    cache: false,
    success: callback,
    error: function (jqXhr, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); }
});

这就是正在发生的事情:

  • 当myJSonServer在同一个域上时,完全没有问题
  • 当myJSonServer在另一个域上时,请求被发送,但是没有承载头

这个承载头是oAuth2标准的一部分。

我意识到这样一个事实,也许这不是最好的解决方案,在浏览器中设置访问令牌。我知道我可以用代理来解决这种情况。

我只是好奇,是否有可能或将有可能设置跨域json请求的头<谢谢

我使用的是MVC4,并在web中添加了crossDomainScriptAccessEnabled=“true”。配置。我以为这就足够了,但阿普西勒的回答解决了我的问题。我现在已经在我的网站上添加了这个。配置:

 <system.webServer>
     <httpProtocol>
         <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Authorization" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>

共有3个答案

花稳
2023-03-14

如果您使用JSONP进行跨源请求,那么答案是否定的,您不能在此类请求上设置HTTP头。如果您使用CORS进行跨源请求,那么答案是肯定的,因为您使用的是普通XHR进行请求:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing.

吕高寒
2023-03-14

因为“jsonp”通过创建一个脚本标记并使用属性src=从另一个域加载资源来工作。所以我认为没有办法修改请求头。

柯梓
2023-03-14

对于JSONP,设置自定义头是不可能的。

对于CORS,服务器必须发送Access Control Allow Headers头以允许来自客户端的异常请求头。从HTML5 Rocks CORS页面:

访问控制允许标题…-受支持的请求头的逗号分隔列表。

因此,您的服务器必须发送一个访问控制允许头:授权让浏览器知道它是允许发送授权到服务器的请求。如果没有这个断头,浏览器只会发送几个带有请求的公共头,而忽略其余的。

 类似资料:
  • 问题内容: 我已经在互联网上进行了一些研究,但没有设法获得有关该主题的完整图片。任何人都可以暂时解决这个问题吗? 这是我到目前为止发现的: 可以使用jsonp进行跨域调用。禁止在jsonp调用中更改标头 如果服务器允许,则可以使用json进行跨域调用。 这就是我想要做的: 这是正在发生的事情: 当myJSonServer在同一域上时,完全没有问题 当myJSonServer在另一个域上时,将发送请

  • 问题内容: 题: 我正在尝试使用JSON跨域,但是我发现的只是JSON解析器,我不需要… 我已经读到可以使用JSON进行跨域请求,但是到目前为止,我所看到的是使用XMLHttpRequest的实现…- 这意味着您不能使用跨域请求,至少不能在IE 8之外使用… 我去过http://www.json.org/,但是我发现了所有这些是解析器还是没用。 到目前为止,我在google上发现的最好的是 htt

  • 问题内容: 由于您无法在JSONP调用上应用自定义标头,因此如何发出跨域请求并使用jQuery应用自定义标头? 我基本上是想使用jQuery访问google文档,并且需要传递身份验证令牌: 注意:这样做的目的是 完全 绕开应用程序层。使用ruby连接到Google Data API很简单,但是在服务器端始终解析提要会占用大量资源。 问题答案: 您可以使用Google的JavaScript客户端库来

  • 在浏览器的沙箱环境下,默认只允许js代码请求其所属域的数据,不同域名/ip/协议,都默认禁止. 跨域所需要的是,是响应浏览器发起的OPTIONS,及真正的GET/POST, 共2个请求哦. 所需要的逻辑CrossOriginFilter已经封装好了 如何解决 nutz给出的方案非常简单,仅需要在入口方法上添加CrossOriginFilter即可 @Filters(@By(type=CrossO

  • 跨域请求 如果某个路由或者分组需要支持跨域请求,可以使用 Route::get('new/:id', 'News/read') ->ext('html') ->allowCrossDomain(); 跨域请求一般会发送一条OPTIONS的请求,一旦设置了跨域请求的话,不需要自己定义OPTIONS请求的路由,系统会自动加上。 跨域请求系统会默认带上一些Header,包括: Acces

  • 问题内容: 这似乎不起作用: 我本以为会。如果我将这些过滤器专门添加到我的AJAX调用中,那么它们将起作用。我想在全球范围内针对所有AJAX调用执行此操作。 问题答案: 我进行了一些其他测试,并且您发布的代码完美运行。如果您对如何设置参数有疑问,可以随时进行调用beforeSend并自行修改xml请求。