总结一下近期遇到ajax跨域请求问题

业务场景描述:

  1. 移动端页面放在阿里云服务器
  2. 进入页面后, 需要访问另一个服务器的接口,ajax请求使用用GET,POST,PUT等方法
  3. 服务端需要进行cors配置

操作过程中出现的问题

  1. 发送PUT请求时,请求头的method变成OPTIONS, 且浏览器控制台给出提示:Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

对于出现OPTIONS请求的理解:
在跨域请求时,浏览器对于PUT,DELETE等方法,会先发送一次预检请求,该请求头的method就是OPTIONS,服务端需要对这个请求进行处理,浏览器得到服务端支持该请求时,才会发送真正的PUT请求。

服务器最终配置

//node跨域配置
app.all('*', function(req, res, next) {let reqOrigin = req.header["origin"];if (req.method === 'OPTIONS') {console.log(req.method)var headers = {};// IE8 does not allow domains to be specified, just the *// headers["Access-Control-Allow-Origin"] = req.headers.origin;headers["Access-Control-Allow-Origin"] = "*";headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";headers["Access-Control-Allow-Credentials"] = false;headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";res.writeHead(200, headers);res.end();} else {console.log(req.method)res.header("Access-Control-Allow-Origin", "*");next()}
});//orapp.all('*', function(req, res, next) {  res.header("Access-Control-Allow-Origin", "*");  res.header("Access-Control-Allow-Headers", "X-Requested-With");  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");  res.header("X-Powered-By",' 3.2.1')  res.header("Content-Type", "application/json;charset=utf-8");  next();
});

需要注意的一点是,app.all部分的代码需要放置在app.use之前!

node的cors模块

问题解决完了发现node提供了解决跨域问题的cors模块。解决跨域问题非常方便,但是由于node服务器只是自己在本地搭建用于测试用,工作中是和java开发配合,所以没有用起来。

github链接:cors

示例代码:

var express = require('express')
var cors = require('cors')
var app = express()app.use(cors())app.get('/products/:id', function (req, res, next) {res.json({msg: 'This is CORS-enabled for all origins!'})
})app.listen(80, function () {console.log('CORS-enabled web server listening on port 80')
})

转载于:https://www.cnblogs.com/foxNike/p/7698309.html

ajax跨域请求问题总结相关推荐

  1. js请求结果拦截机器_js利用jquery的jsonp来解决ajax跨域请求被浏览器拦截结果的问题...

    先来个表.页面太多对不起我也不知道这张表是从哪个博客保存过来的,所以无法注明博客地址.非常抱歉.URL说明是否允许通信 http://www.a.com/a.jshttp://www.a.com/b. ...

  2. JSONP实现Ajax跨域请求

    前言 由于浏览器存在同源策略的机制,所谓同源策略就是阻止从一个源(域名,包括同一个根域名下的不同二级域名)加载的文档或者脚本获取/或者设置另一个源加载的文档属性. 但比较特别的是:由于同源策略是浏览器 ...

  3. 用iframe设置代理解决ajax跨域请求问题

    用iframe设置代理解决ajax跨域请求问题 参考文章: (1)用iframe设置代理解决ajax跨域请求问题 (2)https://www.cnblogs.com/ranzige/p/370965 ...

  4. Ajax跨域请求,无法传递及接收cookie信息解决方案

    Ajax跨域请求,无法传递及接收cookie信息解决方案 参考文章: (1)Ajax跨域请求,无法传递及接收cookie信息解决方案 (2)https://www.cnblogs.com/yalong ...

  5. Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案

    Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案 参考文章: (1)Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录 ...

  6. AJAX跨域请求数据原理与案例

    1.如何通过AJAX跨域请求数据 AJAX通过jsonp来实现跨域请求数据,通过设置dataType(jquery)为jsonp即可. 2.AJAX如何通过jsonp实现跨域(来源于其他网站资料) J ...

  7. ajax跨域请求原理,Ajax跨域请求的原理(图文教程)

    这篇文章主要为大家详细介绍了Ajax跨域请求的原理,Ajax怎么样做跨域请求?具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Ajax跨域请求的具体实现过程,供大家参考,具体内容 ...

  8. Nginx 实现AJAX跨域请求

    AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Control*指令.如下所示: 1 ...

  9. $.ajax 跨域请求 Web Api

    WepApi确实方便好用,没有配置文件,一个apicontroller直接可以干活了.但今天用$.ajax跨域请求的时候总是获取不到数据,用fiddler一看确实抓到了数据,但回到$.ajax函数中, ...

最新文章

  1. 关于C语言中的数组指针、指针数组以及二级指针
  2. Mysql 安全登陆工具 mysql_config_editor
  3. 一条批处理语句ping局域网内的所有机器
  4. mysql设计的步骤_mysql笔记8_数据库设计步骤
  5. 6、处理大数据对象(CLOB 数据小说+BLOG 数据图片,电影,音乐)
  6. FAT AP和FIT AP 区别 (无线篇)
  7. 输出最大值MXNet实现
  8. 基于位置的知识图谱链接预测
  9. 基于SVD的降维优化
  10. 移动端常见bug汇总001
  11. oracle sql试题
  12. 测试一个链表是否为空表 C语言,【链表测试面试题】面试问题:C语言单链表的… - 看准网...
  13. 扫荡波”来袭已造成大面积用户系统崩溃
  14. 61850协议服务器端开发,基于IEC61850标准的服务端程序的设计与实现
  15. 无人驾驶全局路径规划之A星算法
  16. 内网代理——常用工具
  17. 高斯c语言百度云免费,高斯数学(1-6年级)精品课程全集百度云下载
  18. java毕业设计TELL情感社交系统Mybatis+系统+数据库+调试部署
  19. 项目4-分数类和整型数的四则运算
  20. ISO 8601中周数的处理及 Joda-Time 的使用

热门文章

  1. Android自动化测试之Robotium学习(二)
  2. IIS7.5 中启用rest服务,Delete、Put
  3. Yii 1.1.4发布,高性能的PHP框架
  4. ASP调用存储过程详解。
  5. 数据结构习题精解 C语言实现+微课视频(习题解答、研考试题、微课视频)
  6. HtmlUnit解析动态网页并采集网页列表到Excel
  7. ubuntu下安装lamp环境
  8. python tk 获取鼠标事件_在Tkin中列出鼠标悬停事件函数
  9. 计算机组成原理——I/O设备(外部设备)、I/O接口
  10. stm32f4之GPIO