CORS“它没有HTTP正常状态。”

时间:2019-08-24 17:23:55

标签: node.js express

NodeJS Express平台。立即使用Zeit 2.无法将server.js用作代理从后端发送以防止CORS。因此,也不必为CORS问题而苦恼。经过测试的台式机:Chrome,Safari,Firefox。手机:Chrome,Firefox。已经测试过使用HTTPS在Now上托管,与我在localhost:3000127.0.0.1:3000上本地获得的错误相同,并且使用端口80也是相同的。

Access to fetch at 'https://**MY_URL**/user/login' from origin 'http://127.0.0.1:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

我使用https://www.npmjs.com/package/cors设置我的CORS配置:

app.use(cors({
  'allowedHeaders': ['Content-Type', 'API-Key', 'API-Secret', 'Access-Control-Allow-Headers'', 'accept', 'client-security-token'],
  'exposedHeaders': ['sessionId'],
  'origin': '*',
  'methods': 'GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS',
  'preflightContinue': false,
  'credentials': true
}));

CORS设置似乎不适用于我,因此我尝试使用now.json文件,如下所示(修剪过的版本):

{
  "name": "my-test-api",
  "version": 2,
  "routes": [
    {
     "src": "/.*",
     "methods": ["GET", "POST", "OPTIONS"],
     "headers": { "Access-Control-Max-Age": "1000", "Access-Control-Allow-Methods": "GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Accept": "text/plain", "Content-Type": "text/plain", "Access-Control-Allow-Headers": "sessionId, Content-Type, API-Key, API-Secret, Access-Control-Allow-Headers", "Access-Control-Expose-Headers": "sessionId", "Access-Control-Allow-Credentials": "true" },
     "continue": true
    },
    { "src": "/user/login", "methods": ["POST"], "dest": "index.js" }
  ]
}

甚至在我的所有回复中都添加了statusCode 200,但没有成功。删除Npm-cors-package不会改变任何东西,但是删除Now.json会完全破坏东西,即使我在app.use(cors())中指定了它,我也会得到this error, from MDN

不太确定该怎么做,一直在为此苦苦挣扎。 cURL或其他可以使用后端代理的主机都没有问题。

7 个答案:

答案 0 :(得分:4)

您可能需要为路线启用飞行前请求

app.use(cors())

app.options('/post/login', cors()) // enable pre-flight requests
app.post('/post/login', (req, res, next) => {
    // your code here
});

或所有路线

app.options('*', cors())

答案 1 :(得分:0)

当预检(OPTIONS)请求返回404时,我得到了这个隐秘的错误。我最终发现我使用的路径不正确,而我的路由器(Golang httprouter)的404s OPTIONS针对不存在的路由。

答案 2 :(得分:0)

您可以使用nginx的反向代理将您80端口的请求代理到3000端口,它将正常工作

答案 3 :(得分:0)

您可以设置飞行前响应的HTTP状态。

app.options('*', function (req,res) { res.sendStatus(200); });

答案 4 :(得分:0)

请尝试添加一行,然后从express和now.json中删除旧的cors配置

sns.regplot(x=score,y=target,data=df) plt.show()

就是这样。现在启用了CORS。 如果您向您的应用程序发出请求,则会注意到将返回一个新的标头: app.use(cors());

答案 5 :(得分:0)

https://cors-anywhere.herokuapp.com/yoururl

示例:

axios.get('https://cors-anywhere.herokuapp.com/spo.handball4all.de/Spielbetrieb/index.php?orgGrpID=56&score=45991')
    .then(response => {
      const $ = cheerio.load(response.data);
})

答案 6 :(得分:-4)

在运行浏览器之前为目标添加“ --disable-web-security” enter image description here