它似乎是一个已知的问题,关于这个主题存在很多问题,但是,我的情况非常奇怪.我有一个部署在tomcat 8.0.36上的简单Web应用程序.我已正确配置CORS:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
浏览器阻止了跨源请求:
请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" https://www.mytestpage.com "访问.响应具有HTTP状态代码403.
在tomcat日志文件中,我也看到403的响应代码.有趣的是,在跨源请求的情况下,我的应用程序的代码永远不会被执行.在到达我的申请之前,请求被阻止,并且立即发送403.我在tomcat面前没有apache,它是简单的tomcat.我尝试了很多东西,包括将原点列入白名单并指定允许的标题 - 没有任何帮助.我还尝试以编程方式设置标头,直到我发现从不执行跨源请求的代码.
UPD:结束点接受POST请求.这些POST请求作为XmlHttpRequests从JS片段发送.
有什么想法可以吗?
ps我可以成功获得相同的原始请求.
我在发出 https get 请求时出现以下错误
{ Error: write EPROTO 101057795:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:openssl\ssl\s23_clnt.c:802:
at _errnoException (util.js:992:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:864:14) code: 'EPROTO', errno: 'EPROTO', syscall: 'write' }
Run Code Online (Sandbox Code Playgroud)
我正在尝试向不需要代理的公司内部资源发出请求。
const request = require('request')
var token= myToken
request({
method: 'post',
url: 'https://myURL',
data: {
myData
},
headers: { 'Authorization': 'Bearer myToken' },
agentOptions: {
rejectUnauthorized: false,
},
}, function (error, response, body) {
if(error){
console.log('Error: ', error)
} else {
console.log(body)
}
})
Run Code Online (Sandbox Code Playgroud)
我的 .npmrc 中也有 strict-ssl=false 。
我注意到我可以毫无问题地进行相同的调用curl。
curl -k1 …
Run Code Online (Sandbox Code Playgroud)