博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax跨域问题小结
阅读量:5833 次
发布时间:2019-06-18

本文共 2080 字,大约阅读时间需要 6 分钟。

跨域:跨域名的访问,是浏览器对ajax的一种限制,这样可以有效的防止跨站攻击

跨域的范畴: 域名不同  或 端口不同 或 二级域名不同

解决方案

 第一种:由于前端基础薄弱,且该方式老掉牙,不讲解;

 第二种:利用nginx的反向代理,使得我们表面发送不跨域的请求,实际代理了跨域,配置nginx相关配置即可;

 第三种:CORS,规范化的跨域请求解决方案,在服务端进行控制是否允许跨域;

  详解:浏览器会将ajax请求分为两类,其处理方案略有差异:简单请求、特殊请求。

   简单请求:

    请求方法为 : head   get   post

    Http的头信息不能超过以下几种字段:Accept  Accept-Language Content-Language Last-Event-ID Content-Type

    当浏览器发现发现的ajax请求是简单请求时,会在请求头中携带一个字段:Origin,

    该字段指出当前请求属于哪个域(协议+域名+端口),允许跨域否由服务器决定

    如果服务器允许跨域,需要在返回的响应头中携带下面信息

Access-Control-Allow-Origin: http://manage.hahaha.com  //可接受的域,是一个具体域名或者*,代表任意Access-Control-Allow-Credentials: true  //是否允许携带cookie,默认情况下,cors不会携带cookie,除非这个值是trueContent-Type: text/html; charset=utf-8      

     如果跨域请求要想操作cookie,需要满足3个条件:

    •   服务的响应头中需要携带Access-Control-Allow-Credentials并且为true。

    •   浏览器发起ajax需要指定withCredentials 为true

    •   响应头中的Access-Control-Allow-Origin一定不能为*,必须是指定的域名

     复杂请求:

     请求方式: put

     浏览器先询问服务器,发起预检请求当前网页所在的域名是否在服务器的许可名单之中,

             以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求

java实现:  服务端可以通过拦截器统一实现,SpringMVC已经帮我们写好了CORS的跨域过滤器:CorsFilter

@Configurationpublic class GlobalCorsConfig {    @Bean    public CorsFilter corsFilter() {        //1.添加CORS配置信息        CorsConfiguration config = new CorsConfiguration();        //1) 允许的域,不要写*,否则cookie就无法使用了        config.addAllowedOrigin("http://manage.hahaha.com");        //2) 是否发送Cookie信息        config.setAllowCredentials(true);        //3) 允许的请求方式        config.addAllowedMethod("OPTIONS");        config.addAllowedMethod("HEAD");        config.addAllowedMethod("GET");        config.addAllowedMethod("PUT");        config.addAllowedMethod("POST");        config.addAllowedMethod("DELETE");        config.addAllowedMethod("PATCH");        // 4)允许的头信息        config.addAllowedHeader("*");        //2.添加映射路径,我们拦截一切请求        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();        configSource.registerCorsConfiguration("/**", config);        //3.返回新的CorsFilter.        return new CorsFilter(configSource);    }}

摘自--某某笔记

      

转载于:https://www.cnblogs.com/msi-chen/p/10511558.html

你可能感兴趣的文章
python面向对象基础
查看>>
HDU 2044 一只小蜜蜂(递归)
查看>>
docker 下 安装rancher 笔记
查看>>
spring两大核心对象IOC和AOP(新手理解)
查看>>
数据分析相关
查看>>
Python LDAP中的时间戳转换为Linux下时间
查看>>
微信小程序蓝牙连接小票打印机
查看>>
C++_了解虚函数的概念
查看>>
全新jmeter视频已经上架
查看>>
Windows 8下如何删除无线配置文件
查看>>
oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
国外10大IT网站和博客网站
查看>>
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
shell如何快速锁定所有账号
查看>>
HTML 5实现的手机摇一摇
查看>>
此博客不再发表对自己私事的看法
查看>>
导致Asp.Net站点重启的10个原因
查看>>