ajax跨站请求方案
1:概述
跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的HTTP请求。出于安全考虑,浏览器会限制脚本中发起的跨站请求。比如,使用XMLHttpRequest对象发起 HTTP 请求就必须遵守同源策略。
2:方案
W3C的Web应用工作组推荐了一种新的机制,即跨源资源共享(Cross-Origin Resource Sharing(CORS))。这种机制让Web应用服务器能支持跨站访问控制,从而使得安全地进行跨站数据传输成为可能。比如说,要使得XMLHttpRequest在现代浏览器中可以发起跨域请求。浏览器必须能支持跨源共享带来的新的组件,包括请求头和策略执行。同样,服务器端则需要解析这些新的请求头,并按照策略返回相应的响应头以及所请求的资源。
3:实践(注:以下只是简单的测试用例)
3.1服务端
服务端定义一个Fitler来处理CORS,代码如下:
- public class ApiCorsFilter implements Filter {
- @Override
- public void destroy() {
- }
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- @Override
- public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
- HttpServletResponse response = (HttpServletResponse) res;
- //允许所有外部资源访问,生产环境指定具体的站点提高安全
- response.setHeader("Access-Control-Allow-Origin", "*");
- //允许访问的方法类型,多个用逗号分隔
- response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
- //OPTIONS预请求缓存的有效时间 单位秒
- response.setHeader("Access-Control-Max-Age", "3600");
- //允许自定义的请求头,多个用逗号分隔
- response.setHeader("Access-Control-Allow-Headers", "content-type, x-requested-with");
- chain.doFilter(req, res);
- }
- }
在项目的web.xml里配置Filter
- <filter>
- <filter-name>apiCorsFilter</filter-name>
- <filter-class>com.ihome.mobile.filter.ApiCorsFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>apiCorsFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
3.2客户端
编写一个ajax请求
- <!DOCTYPE html>
- <html>
- <head>
- <title>Hello cors</title>
- <script src="http://upcdn.b0.upaiyun.com/libs/jquery/jquery-1.10.2.min.js"></script>
- <script>
- $(function() {
- $.ajax({
- type: 'POST',
- contentType : 'text/plain', //不会执行OPTIONS预请求
- // contentType : 'application/json', //会执行OPTIONS预请求
- url: "http://api.ldhome.com.net",//内网虚拟映射地址
- success: function(data){
- $("#content").html(JSON.stringify(data));
- },
- error: function(state,xhr){
- $("#content").html("请求失败");
- }
- });
- });
- </script>
- </head>
- <body>
- <h2>结果:</h2>
- <div id="content">
- </div>
- </body>
- </html>
测试结果1:没有预请求
可以看到上面只有post请求,请详细信息如下:
测试结果2:有预请求
会发起OPTIONS请求,请求内容如下:
预请求验证通过,才会发起POST的请求如下:
4:关于预请求(OPTIONS)
“预请求”要求必须先发送一个 OPTIONS 请求给目的站点,来查明这个跨站请求对于目的站点是不是安全可接受的。这样做,是因为跨站请求可能会对目的站点的数据造成破坏。 当请求具备以下条件,就会执行预请求处理:
- 请求以GET,HEAD或者POST 以外的方法发起请求。或者,使用 POST,但contentType为
application/x-www-form-urlencoded
以外的数据类型。比如说,用 POST发送数据类型为, multipart/form-data或者
text/plain
application/json的JSON数据的请求。
- 使用自定义请求头
相关推荐
### Ajax与跨站点请求伪造(Cross-Site Request Forgery, XSRF)漏洞详解 #### 一、背景介绍 在互联网应用开发过程中,安全性一直是不容忽视的重要方面。随着Ajax技术的普及,它带来的便利性同时也引入了一些新的...
在jQuery中,使用$.ajax()方法发起AJAX请求时,可以设置`crossDomain`参数为`true`来开启跨域请求。例如: ```javascript $.ajax({ url: 'http://example.com/api/data', // 跨域的URL type: 'GET', crossDomain...
在本文中,我们将讨论AJAX的阻塞原因和跨域名解决方案。 AJAX阻塞的原因 当我们在页面中使用AJAX时,会出现阻塞现象。我们可以通过一个简单的示例来证实这一点。假设我们有一个函数simpleRequest,它发送一个POST...
Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的核心在于JavaScript...了解并熟练掌握Ajax及其跨域解决方案,对于提升Web应用的性能和用户体验至关重要。
**跨站Ajax(Flash Ajax)** ...然而,随着现代浏览器对Web标准的支持增强,例如CORS(跨源资源共享)的普及,Flash作为跨域Ajax解决方案的重要性逐渐降低,但仍有一些场合因其兼容性和历史遗留问题而被继续使用。
**Ajax 跨域请求详解** Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下,通过JavaScript向服务器发送异步请求并获取数据。在Web开发中,跨域问题是一个常见的挑战,因为浏览器的...
为了解决这一限制,开发者们开发了一系列的解决方案,其中就包括本文介绍的支持跨域的Ajax异步请求类。 #### 关键知识点详解 ##### 1. Ajax基础概念 - **定义**:Ajax(Asynchronous JavaScript and XML)是一种...
- CSRF:跨站请求伪造,一种网络攻击方式。 1.4 参考资料 本设计方案参考了W3C的AJAX规范,以及相关的Web安全和用户体验设计原则。 2 概述 2.1 系统任务 系统的主要任务是构建一个机制,当用户通过AJAX提交请求后...
同时,在使用同步请求时要注意跨浏览器兼容性问题,并采取相应的解决方案。随着技术的发展,现代前端框架如 React、Vue 等已经很少使用同步 AJAX 请求,取而代之的是更高效的异步编程模式,如 Promise 和 async/...
以上就是关于H5移动端上滑加载结合Ajax异步请求后台数据的详细解释,这个功能不仅提高了用户体验,也为开发者提供了高效的数据加载解决方案。通过合理的优化和实施,可以在不牺牲性能的前提下,带给用户流畅、连续的...
- 没有内置的安全机制,容易受到XSS(跨站脚本攻击)的影响。 - 因为是通过`<script>`标签加载,所以无法控制HTTP头部信息,如设置自定义请求头或获取响应头。 - 如果服务器返回错误,浏览器不会抛出错误,而是简单...
**Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与...在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决方案的有效性和广泛适用性。
- **安全性考量**:虽然Ajax增强了Web应用的动态性和交互性,但也引入了新的安全挑战,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。因此,在设计Ajax应用时,必须实施充分的安全措施,比如对用户输入进行验证和...
这些组件库可能依赖 `xe-ajax` 来处理表格数据的加载、编辑和保存等操作,提供了一站式的前端数据管理解决方案。 总之,`xe-ajax` 是一个强大的异步请求库,结合了 `Promise` 的优势和跨平台的特性,使得在 ...
在Ajax的请求和响应中,XML只是一种可选的数据格式,而不是核心。 XML是一种结构化数据的通用格式,广泛用于数据交换,尤其是在不同的系统和平台之间。它的优点包括数据独立性、可读性和可扩展性。然而,Ajax并不...
6. **Domain属性(仅限子域)**:在cookies中设置`domain`属性可以实现跨子域共享,但这仅限于同一主域下的子域名之间,对AJAX跨域请求帮助有限。 在实际应用中,开发者通常根据项目需求和服务器环境选择合适的跨域...
4. **安全问题**:AJAX请求可能引发跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等问题,需要合理的安全策略来防范。 总结来说,AJAX技术通过异步通信实现了网页的局部更新,显著提高了用户体验,但同时也带来了一些挑战...
基于Ajax的企业网站建设方案 本文主要介绍了基于Ajax的企业网站建设方案,讨论了Ajax技术在企业网站建设中的应用,并分析了Ajax和PHP技术的优点,最后给出了利用Ajax技术建设企业网站的具体过程。 一、Ajax技术...
在处理中文参数时,尤其是在使用Ajax的GET请求时,可能会遇到中文乱码的问题。这是因为浏览器、服务器和JavaScript之间的编码处理不一致所导致的。本文将深入探讨这个问题,并提供解决方案。 首先,我们需要了解...
9. **安全问题**:使用Ajax时需注意XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等安全问题,通过验证令牌、设置HTTP头部等方式进行防护。 10. **性能优化**:合理使用缓存、控制并发数量、预加载数据、避免过度使用...