node --- [跨域] 预检请求
简单请求
若满足所有下述条件,则该请求可视为“简单请求”:
使用下列方法之一:
GET
HEAD
POST
Content-Type: (仅当POST方法的Content-Type值等于下列之一才算做简单需求)
text/plain
multipart/form-data
application/x-www-form-urlencoded
预检会出现的问题
- 见如下代码:
// index.html
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>(async () => {axios.defaults.baseURL = 'http://localhost:3000';// const res = await axios.get('/users');// 跨域const res = await axios.get('users', {headers: {'X-Token': 'Marron'}})console.log(res.data);})()
</script>
// http.js
const http = require('http');
const fs = require('fs');http.createServer((req, res) => {const { method, url } = req;if (method === "GET" && url === '/') {fs.readFile('./index.html', (err, data) => {res.setHeader("Content-Type", "text/html");res.end(data);})} else if (method === "GET" && url === '/users') {res.setHeader("Content-Type", "text/json");res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');res.end(JSON.stringify({ name: '奇怪的栗子', age: 18 }));}}).listen(3000, () => {console.log('[server] Server is running at http://localhost:3000');})
- 说明
1.在vscode中使用live server打开后的域是5500端口(我的默认是5500,你的有可能是8080)
2.请求的数据在3000端口,因此需要使用 axios.defaults.baseURL = ‘http://localhost:3000’
3.res.setHeader(‘Access-Control-Allow-Origin’, ‘http://127.0.0.1:5500’),表示允许来自127.0.0.1:5500域的请求
4.当代码运行时,会发现如下问题
- 问题:
- 请求会出现pedding.
- 原因如下
当出现预检请求时,http会先发送一个OPTIONS请求,而http.js中无OPTIONS的路由处理,因此出现了pedding
- 解决办法
- 添加OPTIONS的处理路由
else if (method === "OPTIONS" && url === "/users") {res.writeHead(200, {"Access-Control-Allow-Origin": "http://127.0.0.1:5500","Access-Control-Allow-Headers": "X-Token,Content-Type",});res.end();
}
node --- [跨域] 预检请求相关推荐
- options请求(跨域预检)
概述 options 请求就是预检请求,可用于检测服务器允许的 http 方法.当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起 OPTIONS 请求,即 CORS 预检 ...
- 浏览器预检请求返回400 has been blocked by CORS policy: Response to preflight request doesn’t pass access cont
这个问题也是很过分头一次遇到,原因是谷歌浏览器在有跨域(CORS)请求时,会先发送一个preflight(预检)请求,之后才会发送fetch请求. CORS:跨源资源共享 (CORS)(或通俗地译为跨 ...
- Chrome98和Chrome101的跨域变化,httpOPTIONS预检请求,私有网络访问限制
在Chrome94更新时,发现访问本地服务器的时候谷歌浏览器限制了访问本地资源 当时通过一个浏览器设置进行了处理.但是治标不治本,98版本更新后又出现了CORS跨域问题.查询了一下资料: Chrome ...
- 跨域请求避免OPTIONS请求(预检请求)
有时候前后端分离域名不一致,会造成跨域请求 而跨域请求有时候会自动发起两次请求,第一次为预检请求,即OPTIONS请求 一般来说使用 application/json 的 post 请求是必然会带入O ...
- node 跨域请求设置
http.createServer((req,res)=>{ //设置允许跨域的域名,代表允许任意域名跨域 res.setHeader("Access-Control-Allow-Or ...
- 从前后端的角度分析options预检请求——打破前后端联调的理解障碍
文章目录 1.从前端的角度看options--post请求之前一定会有options请求?信口雌黄! 2.从后端的角度看options--post请求之前一定会有options请求?胡说八道! 1.从 ...
- Springboot跨域 ajax jsonp请求
SpringBoot配置: <dependency><groupId>org.springframework.boot</groupId><artifactI ...
- 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑
我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也 ...
- 对CORS OPTIONS预检请求的一些思考
前后端分离模大势所趋,跨域问题更是老生常谈. <程序员应对浏览器同源策略的姿势>一文提到三种跨域请求方案,重点讲述了w3c和浏览器厂商推出的CORS规范. 同源策略 所谓同源是指域名.协 ...
最新文章
- 在网络通讯中应用Protobuf
- 6、linux网络编程--UDP协议编程
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
- 政企边缘安全,如何助您提升企业免疫力?
- HX720/HX711 数据采集及处理姿态解析(公式及源码)
- 零基础学习WinCE开发
- php中的自定义函数与c语言有什么区别,php与c语言的不同点是什么?
- C#程序打包安装部署之创建快捷方式
- matlab使用webcam获取摄像头图像,camList = webcamlist
- DHCP服务的八种报文(消息)作用
- 【游戏】金融帝国2:金融帝国实验室(Capitalism Lab)3.0.19安装包下载
- Ubuntu下安装anydesk、realVNC实现远程
- 解决虚拟机无法关闭,vmware-vmx进程无法结束
- Linux 虚拟机VMware安装失败,提示没有选择磁盘no disks selected
- 什么东西能帮助睡眠?曾经五年睡不好觉的朋友在用几个东西
- linux内核就是外包公司老板
- 全球与中国石材加工机械市场现状及未来发展趋势
- Windows Tomcat服务启动 修改Xms Xmx
- HTML页面中引入视频的好方法
- java修图sdk_脑洞大开!Adobe等新研究把「自拍」变「他拍」,魔幻修图效果感人...
热门文章
- 链表的数据域怎么使用结构体_一步一步教你从零开始写C语言链表
- Excel表Ctrl+v和Ctrl shift+v有什么区别_Ctrl键与10个数字键,26个字母键的组合应用技巧解读...
- 大数据平台容量评估_大数据平台
- Java生鲜电商平台-B2B生鲜的互联网思维
- Python之爬虫-段子网
- 架构师是大忽悠吗?阿里技术大牛告诉你真相!
- Delphi通过ICMP检测与远程主机连接
- Vue/Angular中父窗口新开的子窗口关闭的时候刷新父窗口
- SQL语法(1、安装操作)
- k8s学习笔记-调度之Affinity