跨域资源访问 CORS
屏蔽 CORS 浏览器检查
暴力的跨源读取问题的解决办法:谷歌或者chromium内核的浏览器:在浏览器快捷方式中加入命令
-args --disable-web-security --user-data-dir=C:\Users\dell\Desktop\MyChromeDevUserData
这个C:\Users\dell\Desktop\MyChromeDevUserData文件夹就是自己建
然后,需要从快捷方式那打开。这时候打开的浏览器将默认你是一个新的用户。你会发现没有原来的插件和收藏夹(如果有说明命令可能写错了)。
注意:第一次打开的过程中,需要先手动打开一下对应的连接。不然就会有连接警告
浏览器安全认证
基于 OpenSSL 方案进行证书链的生成和应用二
基于 OpenSSL 方案进行证书链的生成和应用三
文章中提到的命令,需要使用 Windows CMD 或者直接运行 OpenSSL.exe ,不能使用 PowerShell 。
尽量不要使用 OpenSSL 1.1.1i 这个版本,生成证书的时候可能
会提示缺乏部分依赖库。笔者使用版本为 1.0.2。
在使用命令生成证书的时候可能会遇到 对象 id 已存在等问题,重新打开命令行编辑器,按照当前进度继续执行命令即可。
重复处理跨域请求
ArcGIS 自带了跨域请求的解决方案,同时如果在服务器上,例如 IIS 上也设置了跨域资源共享的话,将会出现重复处理跨域请求的问题 (在浏览器中打开F12 ,查看 network 中出现问题的请求,可以看到有两个请求头 access-control-allow-origin)
- from origin ‘null’ has been blocked by CORS policy: The ‘Access-Control-Allow-Origin’ header contains multiple values ‘null, *’, but only one is allowed. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
- 在 ArcGIS Server 中修改跨域请求头的设置
- 在 IIS 中修改设置
我这边有两台服务器,一台可以直接登陆,所以就在 IIS 中修改
(把 access-control-allow-origin 的设置删掉)
另外一台服务器需要远程,密码又忘了。所以在 ArcGIS Server 中修改,以下是 domain.com/arcgis/admin 中对应的设置路径
点击 编辑 edit,修改 AllowedOrigins 中的 * 为其他域名(域名中不能使用通配符 *),即可
问题:无法直接使用域名加webadaptorName的方式访问门户网站,需要添加端口号
原因:arcgis 未成功将门户配置 webadaptor ,可能是在调试cer证书的过程中出现了SSL相关的错误
解决办法,重新生成或使用原有自签名证书,重新设置 SSL ,并在 domain.com/portal/webapadptor 重新配置,并为门户指定 URL。
问题:电脑 无法互 ping
双方无法互 ping 或某一台无法 ping 通对方?
检查是否是域防火墙的策略,
若正确则可使用 hosts 文件上自定义域名与 IP
问题:加载天地图之后,会在缩放或更新地图的操作之后不断报出 CORS 错误
猜测可能是因为 Chrome 内核的缘故。(为了放置 CSRF 攻击,内核提高了对第三方 Cookie 调用的权限。)
对于本地服务器 127.0.0.1 和 天地图服务器而言,天地图产生的 Cookie 无法被本地服务器 127.0.0.1 调用。
等到 本地服务器再调用天地图数据时, Cookie 就不一样了。
方法就是设置信任服务器(偶尔还是不起作用)。(PS: 我因为设置服务器的时候没有写协议。导致不起作用)
esriConfig.request.trustedServers.push("http://127.0.0.1:5500");
使用画布canvas绘制和读取IMG
QueryImgPixel: function(x, y, img_obj) {
var canvas_obj = document.createElement("canvas");
var ctx = canvas_obj.getContext("2d"); // 设置在画布上绘图的环境
ctx.canvas.width = 1000;
ctx.canvas.height = 1000;
ctx.drawImage(img_obj, 0, 0, 1000, 1000); // 将图片绘制到画布上,并规定起始点和画面宽度
var imgData_obj = ctx.getImageData(0, 0, 1000, 1000); // 获取画布上的图像像素矩阵
问题 无法读取争取长度的图片数组
画布在设置绘图环境的时候,默认只有256 x 256长度的画布,需要手动设置大于等于图片数据的画布。
如何在 VS code 中启动调试
使用本机调试
下载插件 ”debugging for 你的浏览器“
配置运行的参数
选中断点,
点击上图中绿色三角形。开始调试
重点是后面的服务器中调试
服务器调试(本地服务器或远程服务器)
使用 LiveServer 启动服务器
将配置文件中的参数 file 注释掉,改成 url 对应的 LiveServer 的地址。