首页 > 解决方案 > Apollo 客户端发送 OPTIONS 而不是 GET HTTP 方法

问题描述

我无法理解 Apollo 客户端库,因为它无法按预期工作。它不是发送GETHTTP 方法,而是发送OPTIONSHTTP 方法,即使我只在从 GraphQL 服务器检索数据时使用GET也是如此。

const client = new ApolloClient({
    link: ApolloLink.from([
        new MeteorAccountsLink(),
        new HttpLink({
            uri: 'https://selo-comments.herokuapp.com/graphql',
            useGETForQueries: true
        })
    ]),
    cache: new InMemoryCache()
});

来自浏览器的控制台日志: OPTIONS https://selo-comments.herokuapp.com/graphql?query=%7B%0A%20%20comments(id%3A%20%22TFpQmhrDxQqHk2ryy%22)%20%7B%0A%20%20%20%20articleID%0A%20%20%20%20content%0A%20%20%20%20userId%0A%20%20%20%20createdAt%0A%20%20%20%20commentID%0A%20%20%20%20votes%0A%20%20%20%20blockedUsers%0A%20%20%20%20__typename%0A%20%20%7D%0A%7D%0A&variables=%7B%7D 405 (Method Not Allowed)

这显然意味着 HTTP 方法是不正确的,即使它在 url 中有查询参数。如果您使用 Postman 查询该 url,或者只是使用浏览器的地址栏导航到该 url,您将获得 GraphQL 数据。我必须使用https://cors-anywhere.herokuapp.com/才能成功执行查询。

我究竟做错了什么?

标签: javascriptmeteorgraphqlapollo-client

解决方案


选项请求可能是CORS预检请求

CORS 预检请求是检查是否理解 CORS 协议的 CORS 请求。这是一个 OPTIONS 请求,使用三个 HTTP 请求标头:Access-Control-Request-Method、Access-Control-Request-Headers 和 Origin 标头。

您可能需要配置您的服务器以允许跨源调用。

也许您可以在这里找到一些灵感来帮助您入门。允许对 Heroku 上的 Express/Node.js 应用程序的 CORS REST 请求


推荐阅读