96SEO 2026-02-20 10:13 8
二、SpringBoot解决跨域问题其他前后端跨域请求解决方案

三、vue前后端交互轻松入门vue_vue如何和后端交互_莫逸风的博客-CSDN博客
在了解什么是跨域的时候我们首先要了解一个概念叫同源策略什么是同源策略呢就是我们的浏览器出于安全考虑只允许与本域下的接口交互。
不同源的客户端脚本在没有明确授权的情况下不能读写对方的资源。
二、SpringBoot解决跨域问题其他前后端跨域请求解决方案
在Controller层直接添加CrossOrigin注解就可以解决
继承WebMvcConfigurerAdapter或者实现WebMvcConfigurer接口
org.springframework.context.annotation.Configuration;
org.springframework.web.servlet.config.annotation.CorsRegistry;
org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/***
{registry.addMapping(/**).allowedOrigins(*).allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);}
response;res.addHeader(Access-Control-Allow-Credentials,
true);res.addHeader(Access-Control-Allow-Origin,
*);res.addHeader(Access-Control-Allow-Methods,
PUT);res.addHeader(Access-Control-Allow-Headers,
Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN);if
request).getMethod().equals(OPTIONS))
{response.getWriter().println(ok);return;}chain.doFilter(request,
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration;
org.springframework.http.HttpHeaders;
org.springframework.http.HttpMethod;
org.springframework.http.HttpStatus;
org.springframework.http.server.reactive.ServerHttpRequest;
org.springframework.http.server.reactive.ServerHttpResponse;
org.springframework.web.cors.reactive.CorsUtils;
org.springframework.web.server.ServerWebExchange;
org.springframework.web.server.WebFilter;
org.springframework.web.server.WebFilterChain;
reactor.core.publisher.Mono;/***
{//这里为支持的请求头如果有自定义的header字段请自己添加不知道为什么不能使用*private
X-XSRF-TOKEN,token,username,client;private
(CorsUtils.isCorsRequest(request))
response.getHeaders();headers.add(Access-Control-Allow-Origin,
ALLOWED_ORIGIN);headers.add(Access-Control-Allow-Methods,
ALLOWED_METHODS);headers.add(Access-Control-Max-Age,
MAX_AGE);headers.add(Access-Control-Allow-Headers,
ALLOWED_HEADERS);headers.add(Access-Control-Expose-Headers,
ALLOWED_Expose);headers.add(Access-Control-Allow-Credentials,
{response.setStatusCode(HttpStatus.OK);return
ServerWebExchange是一个HTTP请求-响应交互的契约。
提供对HTTP请求和响应的访问并公开额外的服务器端处理相关属性和特性如请求属性。
http://localhost:81;proxy_redirect
原生AJAX、基于jQuery的ajax、fetch、axios
格式schema://host:port/path?query#fragment
Promise是异步编程的一种解决方案从语法上讲Promise是一个对象从它可以获取异步操作的消息。
可以避免多层异步调用嵌套问题回调地域Promise对象提供了简介的API使得控制异步操作更加容易
实例化Promise对象构造函数中传递函数该函数中用于处理异步任务。
resolve和reject两个方法参数用于处理成功和失败两种情况并通过p.***n获取处理结果。
Promise(function(resolve,reject){//成功时调用resolve()//失败时调用reject()
p.***n(function(ret){//从resolve得到正常结果
},function(ret){//从reject得到错误信息
p.***n(function(ret){//返回一个实例对象这个实例对象用于调用下一个***nreturn
在上面也就是如果目前获取了对象就相当于传到了ret中下一步***n中ret则可以调用其中的数据或者其他方法
返回的普通值会直接传递给下一个***n通过***n函数中函数的参数接收该值底层会对返回的普通值封装为一个Promise使得能够继续调用***n
}).***n(function(ret){alter(ret);
script//Promise基本使用原生ajaxfunction
XMLHttpRequest();xhr.onreadystatechange
200){//处理正常情况resolve(xhr.responseText);}else
{reject(服务器错误);}};xhr.open(get,url);xhr.send(null);});return
p;}//链式调用解决回调地狱,return一个新的调用就可以继续调用新的***n()了。
getText(http://localhost:8088/saymo).***n(function
getText(http://localhost:8088/sayyi);},function
getText(http://localhost:8088/sayfeng)}).***n(function
{//resolve(123)//正常情况reject(出错了);//错误情况},1000)})}foo().***n(function
{alert(data);}).finally(function
{alert(结束了)})//与上面效果相同foo().***n(function
{alert(data);}).finally(function
XMLHttpRequest();xhr.onreadystatechange
200){//处理正常情况resolve(xhr.responseText);}else
{reject(服务器错误);}};xhr.open(get,url);xhr.send(null);});return
getText(http://localhost:8088/saymo);var
getText(http://localhost:8088/sayyi);var
getText(http://localhost:8088/sayfeng);//result是一个数组形式的三个数据顺序和p1,p2,p3顺序相同Promise.all([p1,p2,p3]).***n(function
{alert(result);})//result返回一个数据最快返回的一个Promise.race([p1,p2,p3]).***n(function
还有一种更加简便的方法就是使用fetch接口进行调用这个是基于Promise实现的
fetch(url).***n(fn2).***n(fn3)....cach(fn)
}).***n(ret{//这里得到的才是最终的数据console.log(ret);
methodStringHTTP请求方法默认为GETGET、POST、PUT、DELETE
scriptfetch(http://localhost:8088/sayHi?name莫逸风,{method:get}).***n(function
fetch(http://localhost:8088/login,{method:post,body:,headers:{Content-Type:application/x-www-form-urlencoded,//
fetch(http://localhost:8088/login,{method:post,body:JSON.stringify({name:莫逸风,pass:1234,}),headers:{Content-Type:application/json,}}).***n(function
json()返回结果和JSON.parse(responseText)一样
axios官网https://github.com/axios/axios是一个基于Promise用于浏览器和node.js的HTTP客户端
支持浏览器和node.js支持promise能拦截请求和相应自动转换JSON数据
//去github下载文件此js位于axios-master\dist
scriptaxios.get(http://localhost:8088/saymo).***n(function
{//data属性是固定的用法,用于获取后台的实际数据alert(ret.data)})
get查询数据post添加数据put修改数据delete删除数据
axios.get(http://localhost:8088/sayhi?name莫逸风).***n(function
axios.get(http://localhost:8088/sayhi,{params:{name:莫逸风}}).***n(function
{//data属性是固定的用法,用于获取后台的实际数据alert(ret.data)})2.
axios.post(http://localhost:8088/login,{name:莫逸风,pass:1234,}).***n(function
{//data属性是固定的用法,用于获取后台的实际数据alert(ret.data)})通过URLSearchParams传递参数
param.append(pass,12345);axios.post(http://localhost:8088/login,param).***n(function
{//data属性是固定的用法,用于获取后台的实际数据alert(ret.data)})3.
data实际响应回来的数据headers响应头信息status响应状态码statusText响应状态信息
axios.post(http://localhost:8088/login,param).***n(function(ret){console.log(ret);//所有数据都包含在此对象中//对于json形式的响应数据可以直接获取不需要转换alert(ret.data.name);
axios.defaults.headers[mytoken]aqwerwqwerqwer2ewrwe23eresdff23//设置请求头5.
//在这里就是在请求之前设置了拦截器用于获取网页http://localhost:8088/
axios.interceptors.request.use(function
http://localhost:8088/;alert(config.url);return
{console.log(err);})axios.get(sayhi?name莫逸风).***n(function
{//data属性是固定的用法,用于获取后台的实际数据alert(ret.data)})响应拦截器
axios.interceptors.response.use(function
{console.log(err);})axios.get(sayhi?name莫逸风).***n(function
{//data属性是固定的用法,用于获取后台的实际数据alert(res)})2.7
async/await是ES7引入的语法可以更加方便的进行异步操作
async关键字用于函数上async函数的返回值是Promise实例对象
await关键字用于async函数中await可以得到异步的结果
axios.get(saymo);//alert(ret.data);return
ret.data;}queryData().***n(function
axios.get(saymo);alert(ret.data);var
axios.get(sayyi);alert(ret1.data);var
ret2.data;}queryData().***n(function
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback