加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax跨域访问的问题解决

发布时间:2020-12-16 01:41:04 所属栏目:百科 来源:网络整理
导读:在web项目中经常用到在ajax中进行跨域访问,比如在a域中访问b域中的服务,却实现不了。原因是: 浏览器为了保证服务器数据的安全,对于这种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服务器明确地告知它允许跨域调用。所以问题的解

在web项目中经常用到在ajax中进行跨域访问,比如在a域中访问b域中的服务,却实现不了。原因是:浏览器为了保证服务器数据的安全,对于这种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服务器明确地告知它允许跨域调用。所以问题的解决需要在服务器端完成。

解决的方法为采用jsonp的形式,而很多时候,服务器端并没有按jsonp的信息进行编写。所以需要在服务器但处理代码允许跨域访问。


PHP中需要在Server.php中添加如下代码:

指定某域名(http://client.a.com)跨域访问,则只需在http://server.a.com/server.php文件头部添加如下代码:

header('Access-Control-Allow-Origin:http://client.a.com');

如果指定多个域名,需要在服务器端server.php的头部添加如下代码:

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';  
  
$allow_origin = array(  
    'http://client1.runoob.com','http://client2.runoob.com'  
);  
  
if(in_array($origin,$allow_origin)){  
    header('Access-Control-Allow-Origin:'.$origin);       
} 

在asp.net中, 针对ASP.NET MVC和ASP.NET Web API两种项目类型,我做了一些研究,确定下面的方案是可行的。

针对ASP.NET MVC,只需要在web.config中添加如下的内容即可

<system.webServer>

<httpProtocol>

<customHeaders>

<add name="Access-Control-Allow-Origin" value="*" />

<add name="Access-Control-Allow-Headers" value="Content-Type" />

<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />

</customHeaders>

</httpProtocol>

<handlers>

<remove name="ExtensionlessUrlHandler-Integrated-4.0" />

<remove name="OPTIONSVerbHandler" />

<remove name="TRACEVerbHandler" />

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

</system.webServer>

针对ASP.NET Web API,除了上面这样的设置,还需要添加一个特殊的设计,就是为每个APIController添加一个OPTIONS的方法,但无需返回任何东西。

public string Options()

{

return null; // HTTP 200 response with empty body

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读