ajax跨域请求问题总结

总结一下近期遇到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

987C. Three displays

C. Three displays&#xff1a;题目 #include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c((int)6e5); const int mod 1e9 7; int sum[3333][4]; signed main() {int n;cin >>…

连接池

数据库连接池 锁定本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。数据库连接池负责分配、管理和释放数据库连接&#xff0c;它允许应用程序重复使用一个现有的数据库连接&#xff0c;而不是再重新建立一个&#xff1b;释放空闲时间超过最大空闲时间的数据库连接…

1276A. As Simple as One and Two

A. As Simple as One and Two&#xff1a;题目 思路&#xff1a;删去中间#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c((int)6e5); const int mod 1e9 7; string s; signed …

【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器

【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院 欧浩源 2017-10-21 1、引言 目前&#xff0c;除了官方文档之外&#xff0c;市面上及网络详细介绍BeautifulSoup使用的技术书籍和博客软文并不多&#xff0c;而在这仅有的资料中介绍CSS选择器的少之又少。…

1215B. The Number of Products

B. The Number of Products&#xff1a;题目 #include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); signed main() {int n;cin>>n;for (int i1;i<n;i) cin>>a[i];vector<int>dp(3);dp[1] dp[2] 0…

Mybatis基于XML配置SQL映射器(一)

Durid和Mybatis开发环境搭建 SpringBoot搭建基于SpringSpringMvcMybatis的REST服务&#xff08;http://www.cnblogs.com/nbfujx/p/7694768.html&#xff09; Mybatis之代码生成器 Maven Plugin管理 1 <build>2 <plugins>3 <plugin>4 …

1282B1. K for the Price of One (Easy Version)

B1. K for the Price of One (Easy Version)&#xff1a;题目 两种情况&#xff0c;前面取一或者前面不取#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c((int)6e5); const int …

GIT的Push和Pull,强制Pull覆盖本地命令

连接命令&#xff1a; git remote add origin 你Git库的地址 其中&#xff0c;origin是你对这个Git库地址的标识。 一. 把文件从本地上传到库中 第一步&#xff1a;使用命令 git add命令把文件添加到暂存区里面去。git add * 命令是将当前文件夹内所有文件均添加到暂存区。 举…

1284B. New Year and Ascent Sequence

B. New Year and Ascent Sequence&#xff1a;题目 小小思维题#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c((int)6e5); const int mod 1e9 7; signed main() {int t;cin>…

linux运维、架构之路-Zabbix监控

一、监控常用命令 1、物理服务器监控命令 ①添加yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo ②安装 yum -y install OpenIPMI ipmitoo…

505B. Mr. Kitayuta‘s Colorful Graph

B. Mr. Kitayuta’s Colorful Graph&#xff1a;题目 一开始就像到了DFS&#xff0c;并查集也不难想到。 弗洛伊德算法倒是不容易想到&#xff0c;平时不这么用。。。。。#include <bits/stdc.h> using namespace std; #define int long long // vector<int> a((i…

vi命令

vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。 Linux中的vi编辑器叫vim&#xff0c;它是vi的增强版&#xff08;vi Improved&#xff09;&#xff0c;与vi编辑器完全兼容&#xff0c;而且实现了很多增强功能。 vi编辑器支持编辑模式和命令模式&#xff…

1189C. Candies

C. Candies&#xff1a;题目 思维题&#xff0c;我是笨蛋。我看了半天也没想明白怎么dp&#xff0c;可恶啊。#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c((int)6e5); const i…

SQL基本语法

SQL 基本语法 表库操作 创建表create table 表名(字段名 类型(长度) 约束,字段名 类型(长度) 约束); 创建主键约束id int primary key, primary key(id) // 在创建表最后创建主键约束 删除主键alter table 表名 drop primary key; 主键自动增长主键字段后加auto_increment(只适…

136. Single Number

Given an array of integers, every element appears twice except for one. Find that single one. 题目含义&#xff1a;给定的数组中&#xff0c;每个数字出现两次&#xff0c;只有一个数字出现了一次&#xff0c;找出这个数字 1 public int singleNumber(int[] nums) {…

797B. Odd sum

B. Odd sum&#xff1a;题目 一道小小的贪心#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c[(int)6e5]; const int mod 1e9 7; string s; multiset<int> se; signed mai…

602B. Approximating a Constant Range

B. Approximating a Constant Range&#xff1a;题目 可恶啊&#xff0c;不知道为什么我双指针的代码不过&#xff0c;重新写了个。。。。。#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((i…

1415C. Bouncing Ball

C. Bouncing Ball&#xff1a;题目 很好的dp&#xff0c;1400分难见的题#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c[(int)6e5]; const int mod 1e9 7; string s; signed m…

几种直播流媒体协议

题外话&#xff1a; HTTP渐进下载流媒体播放: 基于TCP。 yy、乐视、爱奇艺、优酷土豆、搜狐视频、花椒直播&#xff0c;主要还是通过rtmp&hls来实现的&#xff0c; 但他们也意识到rtmp的天生缺陷&#xff0c;所以不管是技术预研也好&#xff0c;还是测试版也好&#xff0c…

253B. Physics Practical

B. Physics Practical&#xff1a;题目 太简单的题目了&#xff0c;和dp没啥关系#include <bits/stdc.h> using namespace std; #define int long long vector<int> a((int)6e5); vector<int> b((int)6e5), c[(int)6e5]; const int mod 1e9 7; signed mai…