tongweb 部署软航流版签一体化应用示例 提示跨域错误CORS ERROR

目录

问题现象与描述

解决办法

原理解析

什么是CORS

浏览器跨域请求限制

跨域问题解决方法

跨域请求流程

浏览器请求分类解析

http请求方法简介


问题现象与描述

重庆软航科技有限公司提供了一套针对针对word、excel等流式文件转换成PDF版式文件并进行版式文件在线签章的一个方案,给方案做了一个应用示例,该示例在完成流式文件转成PDF版式文件之后展示了一个在线阅读转换后PDF文件并在线签章的相关功能。

但是在tongweb上部署之后发现该示例完成word转PDF功能后的在线查看PDF时功能异常,浏览器中F12调试 发现状态信息不为200而是 CORS error,如下图所示:

该功能对应的请求 已配置请求头信息:Access-Control-Allow-Origin为*

查看详细的信息时发现:Referrer Policy为same-origin:

且 该应用在tomcat中 部署时并未出现此类异常,因此可以断定示例本身是没有问题的。

猜想可能是由于tongweb的配置影响了。

说一下示例所需要的资源部署情况:将其需要的软航电子签章系统、软航版式文档签批系统、软航文档转换系统以及软航提供的结合这几个一体化应用示例都部署到了同一台服务器的tongweb上了。

解决办法

打开tongweb 管理控制台,在【WEB容器配置】中选择【HTTP通道管理】选择【tong-http-listener】:

下拉到【其他设置】:

在其他设置这里有一个:禁用HTTP请求方法

将禁用的OPTIONS方法放开(勾选取消掉):

之后 重启tongweb ,再试就可以解决 CORS error 问题了。

原理解析

什么是CORS

CORS:即跨域(Cross-Origin Resource Sharing, CORS)是一种安全策略,由浏览器 enforced,限制跨域 HTTP 请求,指在一个域下的网页尝试访问另一个域下的资源。在web应用中服务器地址、端口、项目但凡有一个不同,访问的资源不是自己的,那就属于跨域。例如部署在A服务器上的appA项目,那么 在appA中访问 B服务器上的appB ,或者访问服务器A上的其他应用appx 都属于跨域。

跨域问题主要发生在浏览器端,服务器端由于协议设计的原因,不存在跨域问题。浏览器端跨域请求主要涉及到同源策略(Same-Origin Policy),同源策略限制了从一个源加载的文档或脚本与另一个源的资源进行交互。

浏览器跨域请求限制

浏览器默认是禁用跨域请求的,主要体现在以下方面:

(1)HTTP 请求方法:通常只允许 GET、POST 和 HEAD 请求。

(2)HTTP 头信息:无法发送 Cookie、HTTP 认证信息(如 Basic Auth)等。

(3)HTTP 响应:无法读取非简单响应内容,如 JSONP 只支持 JSON 格式。

跨域问题解决方法

(1)同源策略:通过 HTML5 的 window.postMessage 方法实现跨域通信。

(2)CORS:服务器设置 Access-Control-Allow-Origin 等响应头,允许特定域访问资源。

(3)JSONP:通过动态创建 script 标签,利用其不受同源策略限制的特性实现跨域请求。

(4)代理服务器:通过设置一个代理服务器,实现请求转发和响应返回。

跨域请求流程

(1)浏览器发送预检请求(Preflight Request):询问服务器是否允许该跨域请求。

(2)服务器响应预检请求:如果允许,返回相应的 CORS 响应头。

(3)浏览器发送实际请求:携带 CORS 响应头信息,如 Access-Control-Allow-Origin。

浏览器请求分类解析

浏览器发送预检请求以及实际发送请求时就需要对浏览器请求做分类。 浏览器请求使用的是HTTP协议时,请求分类主要有:

HTTP 1.0: GET、POST、HEAD

HTTP 1.1: GET、POST、HEAD、[OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT]

在本次遇到的问题中已经设置好了 携带 CORS 响应头信息,如 Access-Control-Allow-Origin ,且tomcat中异常,可以肯定应用本身是设定好的。而服务器响应预检请求的时候实际是由 tomcat、tongweb这种应用服务器中间件来处理的。那么也就是说但凡浏览器发送的请求类型被应用服务器本身拦截了,那么必然是会出现跨域问题的,这时就需要让应用服务器允许对应的请求才行。

http请求方法简介

上述提到的浏览器请求分类,实际就是常说的http请求方法。主要http 请求方法介绍如下:

  • get:用于从服务器获取资源,例如请求一个网页或图片。这是最常见的请求方法,用于读取或下载数据。
  • head:与GET方法类似,但服务器在响应中只返回HTTP头部信息,不返回实际数据。这通常用于检索资源的元信息。
  • post:用于向服务器提交数据以供处理,例如表单提交或文件上传。POST请求通常用于添加新资源或更新现有资源。
  • put:用于更新服务器上的现有资源。客户端发送PUT请求时,会包含一个指定资源的新表示,服务器将用这个新表示替换原有资源。
  • delete:用于请求服务器删除指定的资源。
  • connect:用于建立到服务器的隧道化连接,通常用于代理服务器。
  • options:用于获取关于资源所支持通信选项的信息。服务器在响应中会包含一个Allow头,列出支持的所有请求方法。
  • trace:用于追踪请求-响应的传输路径,通常用于调试目的。

根据浏览器调试的信息可以看到当前问题的网络信息里 确实是有两次请求 :第一次请求时 http请求的方法类型为:options 也就是前文提到的 浏览器发送预检请求(Preflight Request):询问服务器是否允许该跨域请求。

第二次才是 实际请求:

 所以在tongweb 管理控制台里 设置 【WEB容器配置】中选择【HTTP通道管理】选择【tong-http-listener】里开放Options方法 就可以解决当下遇到的问题了。

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

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

相关文章

ai积累-具体应用的大概设想

这些场景展示了以 ChatGPT 为代表的生成式 AI 可能的具体应用: 教育辅助: AI 可以充当学生的个性化辅导老师,提供定制化的学习材料和练习。例如,它可以生成针对学生能力水平和兴趣的数学问题或历史教学文章。 客户支持&#xff1…

LESS 的嵌套写法有什么优势?

LESS的嵌套写法可以提高代码的可读性和维护性。通过将相关的样式规则嵌套在父选择器中&#xff0c;可以更清晰地表达样式之间的层级关系&#xff0c;避免重复的代码&#xff0c;并且使样式结构更加整洁。 例如&#xff0c;假设有以下HTML结构&#xff1a; <div class"…

Qt 加载图片的几种方式 以及加载 loading

项目中经常使用加载图片&#xff1a; 常用有两种方式&#xff1a; 1.使用 QWidget 加载图片&#xff1a; 效果&#xff1a; 样例源码&#xff1a; int pict_H ui->widgetImage->height();int pict_W ui->widgetImage->width();ui->widgetImage->setFixe…

白骑士的C语言教学高级篇 3.4 C语言中的算法

算法是解决问题的核心。无论是排序、搜索&#xff0c;还是递归与动态规划&#xff0c;算法的选择和实现对程序的效率和性能有着重要影响。本节将介绍几种常见的算法&#xff0c;包括排序算法、搜索算法&#xff0c;以及递归和动态规划的应用。 排序算法 排序算法是将一组数据按…

昇思25天学习打卡营第17天|SSD目标检测

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) SSD目标检测 模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD…

使用 CloudWatch + SNS + Lambda 实现多渠道告警系统

1. 简介 在现代云计算环境中,及时和有效的监控告警对于维护系统的稳定性至关重要。本文将介绍如何使用 AWS CloudWatch、Simple Notification Service (SNS) 和 Lambda 函数构建一个多渠道告警系统,包括邮件告警、钉钉机器人告警和电话语音告警。 2. 系统架构 整个系统的工…

利用border绘制三角技巧

绘制三角形的效果如图 <html lang"zh-cn"> <head><meta charset"UTF-8"><title>demo</title><style>* {margin: 0;padding: 0;}.box {/* 盒子宽高改成零就变成三角形 &#xff0c;需要哪个方向的三角形就设置哪个方向…

Python一些可能用的到的函数系列130 UCS-Time Brick

说明 UCS对象是基于GFGoLite进行封装&#xff0c;且侧重于实现UCS规范。 内容 1 函数 我发现pydantic真是一个特别好用的东西&#xff0c;可以确保在数据传递时的可靠&#xff0c;以及对某个数据模型的描述。 以下&#xff0c;UCS给出了id、time相关的brick映射&#xff0…

【分布式系统五】监控平台Zabbix实际监控运用(命令+截图详细版)

目录 一.Zabbix 监控 Windows 1.安装zabbix 2.Web 页面添加主机&#xff0c;关联模板 二.Zabbix 监控 Java 应用 1.安装tomcat 2.服务端安装 zabbix-java-gateway 3.Web 页面添加主机&#xff0c;关联模板 三.Zabbix 监控 SNMP 1.服务端安装 snmp 监控程序 2.修改 sn…

RT-Thread和freeRTOS启动流程

一. freeRTOS启动流程 二. RT-Thread启动流程 因为RT-Thread中我们定义了补丁函数也叫做钩子函数--$Sub$$main()--作为一个新功能函数&#xff0c;可以将原有函数劫持下来&#xff0c;并在之后的程序运行中加上$Super $ $前缀来重新调用原始函数。 所以启动流程是$Sub$$main(…

Chiasmodon:一款针对域名安全的公开资源情报OSINT工具

关于Chiasmodon Chiasmodon是一款针对域名安全的公开资源情报OSINT工具&#xff0c;该工具可以帮助广大研究人员从各种来源收集目标域名的相关信息&#xff0c;并根据域名、Google Play应用程序、电子邮件地址、IP地址、组织和URL等信息进行有针对性的数据收集。 该工具可以提…

利用node连接mongodb实现一个小型后端服务系统demo

http 请求 实现get请求数据库数据&#xff1b;实现添加数据实现编辑数据实现删除数据实现导出txt文件、Excel文件实现查询数据库数据并利用导出为excel文件 node 版本 16.16.0 node 版本 18.16.0 会连接 MongoDB 数据库错误。 Connected to MongoDB failed MongoServerSele…

Nginx-简介

介绍 nginx是一款HTTP和反向代理服务器、邮件代理服务器和通用TCP/IP代理服务器&#xff0c;在俄罗斯广泛使用&#xff0c;用于代理高负载站点。 版本 nginx开源版nginx plus企业版openresty将nginx和lua脚本结合 tengine更稳定、高性能 正向代理 客户端和代理服务是一伙的…

【vue动态组件】VUE使用component :is 实现在多个组件间来回切换

VUE使用component :is 实现在多个组件间来回切换 component :is 动态父子组件传值 相关代码实现&#xff1a; <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…

生产力工具|viso常用常见科学素材包

一、科学插图素材网站 一图胜千言&#xff0c;想要使自己的论文或重要汇报更加引人入胜&#xff1f;不妨考虑利用各类示意图和科学插图来辅助研究工作。特别是对于新手或者繁忙的科研人员而言&#xff0c;利用免费的在线科学插图素材库&#xff0c;能够极大地节省时间和精力。 …

Python字符编码检测利器: chardet库详解

Python字符编码检测利器: chardet库详解 1. chardet简介2. 安装3. 基本使用3.1 检测字符串编码3.2 检测文件编码 4. 高级功能4.1 使用UniversalDetector4.2 自定义编码检测 5. 实际应用示例5.1 批量处理文件编码5.2 自动转换文件编码 6. 性能优化7. 注意事项和局限性8. 总结 在…

【代码随想录】【算法训练营】【第58天】 [卡码110]字符串接龙 [卡码105]有向图的完全可达性 [卡码106]岛屿的周长

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 59&#xff0c;周五&#xff0c;继续ding~ 题目详情 [卡码110] 字符串接龙 题目描述 卡码110 字符串接龙 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 […

Jackson库使用教程

1. Jackson概述 定义: Jackson是一个基于Java的开源JSON解析工具&#xff0c;用于Java对象与JSON数据的互相转换。示例JSON:{"author": "一路向北_Coding","age": 20,"hobbies": ["coding", "leetcode", "r…

昇思25天学习打卡营第13天|linchenfengxue

Diffusion扩散模型 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;本文的介绍是基于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;&#xff0c;DDPM已经在&#xff08;无&#xff09;条件图像/音频/视频生成领域取得…

小蜜蜂WMS与小蜜蜂WMS对接集成根据条件获取客户信息列表(分页)连通新增客户信息(小蜜蜂读写测试)

小蜜蜂WMS与小蜜蜂WMS对接集成根据条件获取客户信息列表&#xff08;分页&#xff09;连通新增客户信息(小蜜蜂读写测试) 接通系统&#xff1a;小蜜蜂WMS 天津市小蜜蜂计算机技术有限公司&#xff08;acbee&#xff0c;TianJinACBEEComputerTechnologyCo.,Ltd&#xff09;成立于…