标签: 服务器端

服务器端解决跨域问题的三种方法

跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如:
– ‘192.168.1.1:8080’ 与 ‘192.168.1.2:8080’是不同的域。
– ‘192.168.1.1:8080’ 与 ‘192.168.1.1:8081’是不同的域。

解决此类问题的方法很多,有需要客户端和服务端都要更改的,例如jsonp,iframe等等;有只需要客户端更改的,这种情况只能出现在hybrid app开发中,即通过调用native方法来进行网络请求;有只需要服务端配置的,下面介绍3种服务端配置的方法。

*种

如果您使用的mvc框架是spring4.2以上的话,一个@CrossOrigin就可以搞定。将@CrossOrigin加到Controller上,那么这个Controller所有的请求都是支持跨域的,代码如下:

  1. @Controller
  2. @CrossOrigin
  3. public class GreetingController {
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

将@CrossOrigin加到请求方法上,那么这个请求是支持跨域的,代码如下

  1. @CrossOrigin
  2. @RequestMapping(“/greeting”)
  3. public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue=“World”) String name) {
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

更详细的@CrossOrigin介绍,请参看这里

第二种

全局配置,也需要spring4.2以上。

  1. @Bean
  2. public WebMvcConfigurer corsConfigurer() {
  3. return new WebMvcConfigurerAdapter() {
  4. @Override
  5. public void addCorsMappings(CorsRegistry registry) {
  6. registry.addMapping(“/greeting-javaconfig”).allowedOrigins(“http://localhost:9000”);
  7. }
  8. };
  9. }

.addCorsMappings()中的参数代表支持跨域的url,.allowedOrigins()中的参数代表可以访问该接口的域名,设置为”*”可支持所有域。

第三种

这种方法就跟框架无关了,需要两个jar包,点击这里进行下载,两个jar包可以放的程序里,也可以放到tomcat中,然后将下面的配置写到web.xml中就可以了

  1. < filter >
  2. < filter-name > CORS </ filter-name >
  3. < filter-class > com.thetransactioncompany.cors.CORSFilter </ filter-class >
  4. < init-param >
  5. < param-name > cors.allowOrigin </ param-name > <!–配置授信的白名单的域名!–>
  6. < param-value > * </ param-value >
  7. </ init-param >
  8. < init-param >
  9. < param-name > cors.supportedMethods </ param-name >
  10. < param-value > GET, POST, HEAD, PUT, DELETE </ param-value >
  11. </ init-param >
  12. < init-param >
  13. < param-name > cors.supportedHeaders </ param-name >
  14. < param-value > Accept, Origin, X-Requested-With, Content-Type, Last-Modified </ param-value >
  15. </ init-param >
  16. < init-param >
  17. < param-name > cors.exposedHeaders </ param-name >
  18. < param-value > Set-Cookie </ param-value >
  19. </ init-param >
  20. < init-param >
  21. < param-name > cors.supportsCredentials </ param-name >
  22. < param-value > true </ param-value >
  23. </ init-param >
  24. </ filter >
  25. < filter-mapping >
  26. < filter-name > CORS </ filter-name >
  27. < url-pattern > /* </ url-pattern >
  28. </ filter-mapping >

前端上传文件到服务器端

上传文件到服务器有很多插件,而且各种UI组件库,像iview,eleUI也都替我们封装好了,根本不用我们操心。
下面是原生的form 上传
原生form表单上传文件
直接上代码

<form enctype=’multipart/form-data’ action=”http://192.168。xxx.xxx:3000/upload” method=”post”>
<input type=”file” name=’pic’>
<input type=”submit”>
</form >

首先我们看form的enctype 属性
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码,但是在这里上传文件,我们用multipart/form-data,通过二进制方式提交。

action是你上传文件的地址路径,method是以什么方式进行处理,post为上传,get为获取。
前端很简单,重要的是后端,博主用node起了一个服务器,废话不说,上代码

var multiparty = require(‘multiparty’)

router.post(‘/upload’,function (req,res) {
//创建处理form表单的对象
var form = new multiparty.Form({
uploadDir: ‘./images’
})//文件上传的路径
//通过form.parse生成服务器文件,注意这里生成的文件名字不是原来的名字,而是编码后的名字,里面的回调包含错误信息,字段信息,文件信息
form.parse(req,function (err,fields,files) {
if(err) {throw err ;
console.log(err)}
else{
res.send(JSON.stringify(files.pic[0]))
}
})
})

这里需要安装插件multiparty
执行命令npm i multiparty
作用:使用内容类型解析http请求multipart/form-data,也称为文件上载。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速