如何让服务器支持跨域
要看服务器类型,如果服务器是apache
(1)修改http服务的配置文件:C:\wamp\bin\apache\Apache244\conf\httpdconf
把LoadModule headers_module modules/mod_headersso 前面的注释删除
(2)添加Header set Access-Control-Allow-Origin
<Directory />
AllowOverride none
Require all granted
Header set Access-Control-Allow-Origin
</Directory>
(3)重启http服务
如果是tomcat,比如spring MVC项目
创建一个过滤器,代码如下:
Java代码 收藏代码
package comwebfilter;
import javaioIOException;
import javaxservletFilter;
import javaxservletFilterChain;
import javaxservletFilterConfig;
import javaxservletServletException;
import javaxservletServletRequest;
import javaxservletServletResponse;
import javaxservlethttpHttpServletResponse;
import comcommondictConstant2;
import oaserviceDictionaryParam;
public class SimpleCORSFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
responsesetHeader("Access-Control-Allow-Origin", DictionaryParamget(Constant2DICTIONARY_GROUP_GLOBAL_SETTING, "AccessControlAllowOrigin"));
responsesetHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
responsesetHeader("Access-Control-Max-Age", "3600");
responsesetHeader("Access-Control-Allow-Headers", "x-requested-with");
chaindoFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
关键代码:responsesetHeader("Access-Control-Allow-Origin", "");
<filter>
<filter-name>cors</filter-name>
<filter-class>comwebfilterSimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
这样服务器就支持ajax的跨域访问了
1、使用nginx反向代理解决跨域问题。网站前端访问nginx服务的地址,nginx设置代理地址为访问第三方api地址,当访问代理地址的时候,浏览器访问的是nginx服务的地址,实际是访问第三方api地址。
2、Nginx反向代理解决跨域:nginx通过反向代理解决跨域也是利用了服务器请求服务器不受浏览器同源策略的限制实现的。
3、使用Nginx反向代理:通过配置Nginx反向代理,来实现跨域请求。
4、nginx是一个高性能的HTTP和反向代理web服务器,nginx用来解决跨域问题的原理与前端非正统解决方式的proxy的思路是一致的。
5、nginx环境配置我这里就不详细说明了上章节有介绍,我这里就直接上正菜了,简单介绍下conf文件配置。
6、正向代理用途:访问原来无法访问的资源,如Google。可以做缓存,加速访问资源。对客户端访问授权,上网进行认证。代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
解决跨域请求的方法有:jsonp是利用页面中的脚本标记的加载来实现跨域请求的;cors是通过响应头中指定的源点与当前源点相匹配来实现跨域请求
我们经常说的跨域请求是从一个域中的其他域名中请求资源。这里的其他域名不仅仅指域名,还包含很多内容比如协议,域名,端口的不相同,则这两个域也会将被视为不同,所以接下来在文章中将和大家详细介绍如何解决跨域请求的问题。
推荐课程:JavaScript教程
同源策略
在运行中我们有时会出错是因为我们违反了同源策略,这是一种浏览器所实施的安全措施,用于限制具有不同来源的文档之间的交互。页面的来源由其协议,主机和端口号定义。具有相同来源的资源可以相互完全访问。但是如果具有不相同的源将会拒绝访问。
http://wwwacom/ajs
http://wwwbcom/ajs
这两个之间就不可以互相访问,因为域名的不相同域名组成
如果上面两个域名想互相访问就需要跨域请求,一般情况下同源政策规定:允许跨源 写入,而不允许跨源 读取这意味着同源政策不会阻止将数据写入,只会禁止他们从域中读取数据, 或者对从其域收到的响应做任何事情。
跨域请求的方法
JSONP
JSONP 称为带有填充的JavaScript对象表示,是一种通过利用HTML页面中的脚本标记可以来加载来自不同来源的代码来执实现跨域请求的方法。JSONP依赖于<script>标签可以来自不同来源的事实。当浏览器解析<script>标记时,它将获取脚本内容,并在当前页面的上下文中执行它。通常,服务将返回HTML或以XML或JSON等数据格式表示的某些数据。但是,当向启用JSONP的服务器发出请求时,它会返回一个脚本块,该脚本块在执行时会调用页面指定的回调函数,并将实际数据作为参数提供
注意:它没有相同的源点限制,即使在旧浏览器中也具有良好的兼容性但是JSONP只能用于执行跨域GET请求,服务器必须显式支持JSONP请求。
CORS方法
为服务器提供了一种机制,告诉浏览器可以请求域A读取来自域B的数据。通过在响应中包含一个新的 Access-Control-Allow-OriginHTTP头来完成的,当浏览器收到来自跨源源的响应时,它将检查CORS头。如果响应头中指定的源点与当前源点相匹配,则允许对响应进行读访问,否则就会报错。
与jsonp相比,CORS具有以下优势:
它不仅支持GET请求,还支持POST等其他请求
它可以使用XMLHttpRequest发送和接收数据,并具有更好的错误处理机制
总结:
0条评论