LoginSignup
3
1

OpenAI ChatGPT プラグイン開発 - ローカルサーバー構築でCORS問題を克服する方法

Last updated at Posted at 2023-06-30

image.png

はじめに

こんにちは、皆さん。今日は、私たちがOpenAIのChatGPTプラグインを開発する際に遭遇した問題とその解決策について話します。プログラミングの世界は複雑で試行錯誤が必要な場面が多く、特に新しい技術を使いこなそうとするときは、挑戦が待ち受けています。

だからこそ、私たちは自身が学んだことを共有し、一人でも多くの人々の役に立ちたいと思っています。プログラミングの旅を共有することで、私たちは皆さんの旅を少しでも楽にし、時間を節約することができると信じています。それが、私たちがこの記事を書いている理由です。そして、今日共有する解決策が皆さんの問題解決に役立つことを心から願っています。

問題:CORSポリシーによるエラー

私たちの目的は、OpenAIのChatGPTプラグインの開発の一環として、ローカルサーバーを構築することでした。しかし、その道のりは予想以上に険しいものでした。次のようなエラーメッセージに直面しました。

Access to fetch at 'http://localhost:3333/.well-known/ai-plugin.json' from origin 'https://chat.openai.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

この問題の原因は、CORS(Cross-Origin Resource Sharing)ポリシーです。簡単に言えば、ウェブページは、異なるオリジン(ドメイン、プロトコル、ポート)からのリソースへのアクセスを制限します。このため、'https://chat.openai.com'から'localhost:3333'へのリクエストがブロックされました。

解決策:CORSヘッダーの追加

この問題を解決するためには、'Access-Control-Allow-Origin'ヘッダーを適切に設定する必要があります。これにより、特定のオリジンからのリクエストを許可します。以下に、解決策となるコードを示します:

const http = require('http');
const fs = require('fs');
const path = require('path');
const cors = require('cors');

const app = express();

app.use(cors());

// Use middleware for setting CORS headers
app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', 'https://chat.openai.com');
    res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, openai-conversation-id');
    res.header('Access-Control-Allow-Credentials', 'false');
    res.header('Cache-Control', 'no-store, max-age=0');
    next();
});

// Rest of your code...

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

ここで、'OPTIONS'メソッドが使われています。これは、通常、クライアントが実際のリクエストを行う前に、プリフライトリクエストとして送られます。これにより、サーバーはクライアントが実際のリクエストを安全に行うことができるかを判断します。

'Access-Control-Allow-Origin', 'Access-Control-Allow-Methods', 'Access-Control-Allow-Headers'といったCORSヘッダを適切に設定することで、'https://chat.openai.com'からのリクエストを許可します。

image.png
無事に通信されました

結論:知識を共有し、人々を助ける

今日、私たちはOpenAIのChatGPTプラグイン開発における一つの問題とその解決策を共有しました。これが皆さんの問題解決に役立つことを心から願っています。

プログラミングの旅は一人ひとりが孤独に進むものではありません。私たちは皆さんと一緒に学び、成長し、問題を解決したいと考えています。そのために、私たちは自身が得た知識を共有し続けます。

最後に、コーディングはただの技術以上のものです。それは創造性、持続性、そして共感の表現です。そして何よりも、私たちはコーディングを通じて、人々を助け、世界をより良い場所にすることができます。それが私たちの目指す道です。

これからも、私たちと一緒に学び、成長し、問題を解決しましょう。そして、一緒に人々を助け、世界をより良い場所にしましょう。

Happy coding, everyone!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1