简单请求

  • 若满足所有下述条件,则该请求可视为“简单请求”:

  • 使用下列方法之一:

  • 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.当代码运行时,会发现如下问题

  • 问题:
  1. 请求会出现pedding.
  2. 原因如下

    当出现预检请求时,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 --- [跨域] 预检请求相关推荐

  1. options请求(跨域预检)

    概述 options 请求就是预检请求,可用于检测服务器允许的 http 方法.当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起 OPTIONS 请求,即 CORS 预检 ...

  2. 浏览器预检请求返回400 has been blocked by CORS policy: Response to preflight request doesn’t pass access cont

    这个问题也是很过分头一次遇到,原因是谷歌浏览器在有跨域(CORS)请求时,会先发送一个preflight(预检)请求,之后才会发送fetch请求. CORS:跨源资源共享 (CORS)(或通俗地译为跨 ...

  3. Chrome98和Chrome101的跨域变化,httpOPTIONS预检请求,私有网络访问限制

    在Chrome94更新时,发现访问本地服务器的时候谷歌浏览器限制了访问本地资源 当时通过一个浏览器设置进行了处理.但是治标不治本,98版本更新后又出现了CORS跨域问题.查询了一下资料: Chrome ...

  4. 跨域请求避免OPTIONS请求(预检请求)

    有时候前后端分离域名不一致,会造成跨域请求 而跨域请求有时候会自动发起两次请求,第一次为预检请求,即OPTIONS请求 一般来说使用 application/json 的 post 请求是必然会带入O ...

  5. node 跨域请求设置

    http.createServer((req,res)=>{ //设置允许跨域的域名,代表允许任意域名跨域 res.setHeader("Access-Control-Allow-Or ...

  6. 从前后端的角度分析options预检请求——打破前后端联调的理解障碍

    文章目录 1.从前端的角度看options--post请求之前一定会有options请求?信口雌黄! 2.从后端的角度看options--post请求之前一定会有options请求?胡说八道! 1.从 ...

  7. Springboot跨域 ajax jsonp请求

    SpringBoot配置: <dependency><groupId>org.springframework.boot</groupId><artifactI ...

  8. 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑

    我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也 ...

  9. 对CORS OPTIONS预检请求的一些思考

    前后端分离模大势所趋,跨域问题更是老生常谈. <程序员应对浏览器同源策略的姿势>一文提到三种跨域请求方案,重点讲述了w3c和浏览器厂商推出的CORS规范. 同源策略  所谓同源是指域名.协 ...

最新文章

  1. 在网络通讯中应用Protobuf
  2. 6、linux网络编程--UDP协议编程
  3. Recurrent Neural Network系列2--利用Python,Theano实现RNN
  4. 政企边缘安全,如何助您提升企业免疫力?
  5. HX720/HX711 数据采集及处理姿态解析(公式及源码)
  6. 零基础学习WinCE开发
  7. php中的自定义函数与c语言有什么区别,php与c语言的不同点是什么?
  8. C#程序打包安装部署之创建快捷方式
  9. matlab使用webcam获取摄像头图像,camList = webcamlist
  10. DHCP服务的八种报文(消息)作用
  11. 【游戏】金融帝国2:金融帝国实验室(Capitalism Lab)3.0.19安装包下载
  12. Ubuntu下安装anydesk、realVNC实现远程
  13. 解决虚拟机无法关闭,vmware-vmx进程无法结束
  14. Linux 虚拟机VMware安装失败,提示没有选择磁盘no disks selected
  15. 什么东西能帮助睡眠?曾经五年睡不好觉的朋友在用几个东西
  16. linux内核就是外包公司老板
  17. 全球与中国石材加工机械市场现状及未来发展趋势
  18. Windows Tomcat服务启动 修改Xms Xmx
  19. HTML页面中引入视频的好方法
  20. java修图sdk_脑洞大开!Adobe等新研究把「自拍」变「他拍」,魔幻修图效果感人...

热门文章

  1. 链表的数据域怎么使用结构体_一步一步教你从零开始写C语言链表
  2. Excel表Ctrl+v和Ctrl shift+v有什么区别_Ctrl键与10个数字键,26个字母键的组合应用技巧解读...
  3. 大数据平台容量评估_大数据平台
  4. Java生鲜电商平台-B2B生鲜的互联网思维
  5. Python之爬虫-段子网
  6. 架构师是大忽悠吗?阿里技术大牛告诉你真相!
  7. Delphi通过ICMP检测与远程主机连接
  8. Vue/Angular中父窗口新开的子窗口关闭的时候刷新父窗口
  9. SQL语法(1、安装操作)
  10. k8s学习笔记-调度之Affinity