Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTTP 405方法不允许,似乎是CORS问题_Javascript_Ajax_Printing_Cors - Fatal编程技术网

Javascript HTTP 405方法不允许,似乎是CORS问题

Javascript HTTP 405方法不允许,似乎是CORS问题,javascript,ajax,printing,cors,Javascript,Ajax,Printing,Cors,从我的Javascript程序中请求此URL(具有库epson-2.6.0.js,用于热敏打印机的用于Javascript的epson sdk)。我的目标是通过以太网的TM U220 GET XHR http://192.168.199.15:8008/socket.io/1/ OPTIONS XHR http://192.168.199.15/cgi-bin/epos/service.cgi [HTTP/1.1 405 Method Not Allowed 7ms] 已阻止跨源请求:同

从我的Javascript程序中请求此URL(具有库
epson-2.6.0.js
,用于热敏打印机的用于Javascript的epson sdk)。我的目标是通过以太网的TM U220

GET XHR http://192.168.199.15:8008/socket.io/1/

OPTIONS XHR http://192.168.199.15/cgi-bin/epos/service.cgi   [HTTP/1.1 405 Method Not Allowed 7ms]
已阻止跨源请求:同一源策略不允许读取位于的远程资源。(原因:缺少CORS标头“访问控制允许原点”)

响应标题(118 B)

Allow   GET, HEAD, POST
Content-Length  0
Server  Allegro-Software-RomPager/4.01
请求头(478b)

Accept  text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en
Access-Control-Request-Headers  content-type,if-modified-since,soapaction
Access-Control-Request-Method   POST
Connection  keep-alive
DNT 1
Host 192.168.199.15
Origin  null
User-Agent  Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/58.0
我一直在网上搜索如何解决这个问题。
谁来帮忙。我无法更改http服务器的打印机固件,只能通过Javascript I控件执行某些操作。

如果您无法控制服务器,有几种方法可以解决CORS问题

方法1

安装CORS插件

如果您的应用程序仅为您制作,不会被其他任何人使用,那么这将非常有用。此外,一些网站如youtube将停止工作,因此请谨慎使用

方法2


创建自己的代理服务器。推荐,但需要技术诀窍。如果您的应用程序也被许多其他用户使用,此解决方案尤其有用。这是我以前做过的事情,效果很好。您可以在heroku或任何您想要的地方托管代理服务器。您的代理服务器将截获选项请求,并在响应头中发送Access Control Allow Origin:*以使浏览器能够进行get/post调用。然后,代理服务器将您的请求路由到实际服务器,并将响应从实际服务器返回到启用ePos Webservices所需的客户端。 这不能使用提供的可执行实用程序来完成。 一旦您的打印机使用有效的本地IP连接到网络,您需要使用常用浏览器浏览(或无论您的espon打印机IP是什么),它会要求您输入默认为epson/epson的用户密码,然后您需要导航到ePos打印,然后启用ePos打印选项,最后单击下方的重新启动按钮。
然后,打印机将向HTTP响应头中添加一个Allow Cross Origin*头,这很好,并且无需禁用有用的浏览器功能。

尝试过的方法1没有带来任何区别。我错过什么了吗?顺便说一句,我必须为客户将此解决方案部署在带有chrome/firefox的android平板电脑上。如果此应用程序是为客户提供的,那么方法1不是一个好方法。选择方法2。对android平板电脑上的代理有什么建议吗?这个设备其实并不重要。您的JS代码将调用您完全控制的代理服务器。这可能是在heroku或类似的网站上发布的。我很困惑。该页面是通过firefox/chrome在设备上访问的,如何在那里设置代理?你能解释一下吗?太好了!我工作得很好。我已经有好几天没能解决这个问题了,甚至爱普生的支持也不能帮助我纠正这个问题。这在espon文档中不存在。谢谢如果这项工作正常,那么今天早上打印机“忘记”并停止添加cors标题-但是设置仍处于启用状态。登录到打印机UI并提供uid/pw解决了这个问题,但这是出乎意料的,现在我正在寻找一种自动登录的方法。仅供参考,它可能不会被设置并忘记。您是否能够解决此问题?