ওয়েবসকেট ক্লায়েন্ট API এ এইচটিটিপি শিরোনাম


200

দেখে মনে হচ্ছে এটি আপনার ওয়েবসকেট ক্লায়েন্টে কাস্টম এইচটিটিপি শিরোনাম যুক্ত করা সহজ যে কোনও এইচটিটিপি শিরোনাম ক্লায়েন্ট এটি সমর্থন করে তবে জেএসএন এপিআই দিয়ে এটি কীভাবে করব তা আমি খুঁজে পাচ্ছি না।

তবুও, মনে হচ্ছে এই অনুচ্ছেদে এই শিরোলেখগুলির সমর্থন থাকা উচিত ।

এটি কীভাবে অর্জন করা যায় সে সম্পর্কে কারও একটি সূত্র রয়েছে?

var ws = new WebSocket("ws://example.com/service");

বিশেষত, আমার এইচটিটিপি অনুমোদনের শিরোনাম প্রেরণে সক্ষম হওয়া দরকার।


14
আমি মনে করি একটি ভাল সমাধান হ'ল ওয়েবসকেটকে অনুমোদন ছাড়াই সংযোগ স্থাপনের অনুমতি দেওয়া, তবে তারপরে ওয়েবস্কট থেকে অনুমোদন পাওয়ার জন্য সার্ভারটি অবরুদ্ধ করুন এবং অপেক্ষা করুন যা এটি অনপেন ইভেন্টে অনুমোদনের তথ্য প্রেরণ করবে।
মোটস

@ মোটসের পরামর্শটি সেরা ফিট বলে মনে হচ্ছে। ওপেন থেকে কোনও অনুমোদন কল করা খুব সহজ ছিল যা আপনাকে অনুমোদনের প্রতিক্রিয়ার ভিত্তিতে সকেটটি গ্রহণ / প্রত্যাখ্যান করতে দেয়। আমি প্রথমে সেক-ওয়েবসকেট-প্রোটোকল শিরোনামে লেখক টোকেন প্রেরণের চেষ্টা করেছি তবে এটি হ্যাকের মতো মনে হয়।
ব্যাটারিএসিড

@ মোটস হাই, আপনি কি "ব্লকটি এবং সার্ভারে অপেক্ষা" অংশটি ব্যাখ্যা করতে পারেন? আপনি বোঝাতে চাইছেন এমন কোনও "বার্তা" বার্তা না পাওয়া পর্যন্ত কোনও বার্তা প্রসেস করবেন না?
হিমাল

@ হিমাল, হ্যাঁ সার্ভার ডিজাইনের অবশ্যই সংযোগের শুরুতে ডেটা প্রেরণ বা অনুমোদনের চেয়ে অন্য কোনও ডেটা গ্রহণ করা উচিত নয়।
মোটস

টুইটগুলি উত্তরের জন্য ধন্যবাদ ব্লকিং অংশটি দ্বারা আমি কিছুটা বিভ্রান্ত হয়ে পড়েছিলাম, আমার বোঝার কারণে আপনি প্রাথমিক connectঅনুরোধটি ব্লক করতে পারবেন না । আমি জ্যাঙ্গো চ্যানেলগুলি শেষ প্রান্তে ব্যবহার করছি এবং আমি connectইভেন্টটি সংযোগটি গ্রহণ করার জন্য এটি তৈরি করেছি । এরপরে এটি receiveইভেন্টে একটি "ইস_আউথ" পতাকা সেট করে (যদি এটি কোনও বৈধ প্রমাণীকরণের বার্তাটি দেখায়)। যদি is_auth পতাকা সেট না করা থাকে এবং এটি কোনও লেখার বার্তা না থাকে তবে এটি সংযোগটি বন্ধ করে দেয়।
হিমাল

উত্তর:


210

আপডেট 2x

সংক্ষিপ্ত উত্তর: না, কেবলমাত্র পথ এবং প্রোটোকল ক্ষেত্র নির্দিষ্ট করা যেতে পারে।

দীর্ঘ উত্তর:

ক্লায়েন্ট / ব্রাউজার প্রেরণের জন্য অতিরিক্ত শিরোনাম নির্দিষ্ট করার জন্য জাভাস্ক্রিপ্ট ওয়েবসকেটস এপিআই-তে কোনও পদ্ধতি নেই । এইচটিটিপি পাথ ("জিইটি / এক্সআইজেড") এবং প্রোটোকল শিরোনাম ("সেক-ওয়েবস্কট-প্রোটোকল") ওয়েবস্কট কনস্ট্রাক্টরে নির্দিষ্ট করা যেতে পারে।

সেক-ওয়েবসকেট-প্রোটোকল শিরোলেখ (যা কখনও কখনও ওয়েবসকেট নির্দিষ্ট প্রমাণীকরণে ব্যবহারের জন্য প্রসারিত হয়) Sচ্ছিক দ্বিতীয় যুক্তি থেকে ওয়েবস্কট কনস্ট্রাক্টরের উত্পন্ন হয়:

var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);

নিম্নলিখিত শিরোনামে উপরের ফলাফল:

Sec-WebSocket-Protocol: protocol

এবং

Sec-WebSocket-Protocol: protocol1, protocol2

ওয়েবসকেট প্রমাণীকরণ / অনুমোদন অর্জনের জন্য একটি সাধারণ প্যাটার্ন হ'ল টিকিটিং সিস্টেমটি প্রয়োগ করা যেখানে ওয়েবস্কট ক্লায়েন্টের হোস্টিং পৃষ্ঠাটি সার্ভার থেকে একটি টিকিটের জন্য অনুরোধ করে এবং তারপরে প্রোটোকল ক্ষেত্রে, URL / কোয়েরি স্ট্রিংয়ে ওয়েবস্কট সংযোগ সেটআপের সময় এই টিকিটটি পাস করে, বা সংযোগ স্থাপনের পরে প্রথম বার্তা হিসাবে প্রয়োজনীয়। সার্ভারটি কেবল তখনই সংযোগটি চালিয়ে যাওয়ার অনুমতি দেয় যদি টিকিট বৈধ হয় (বিদ্যমান, ইতিমধ্যে ব্যবহার করা হয়নি, টিকিটের ম্যাচগুলিতে ক্লায়েন্ট আইপি এনকোডেড, টিকিটের টাইমস্ট্যাম্প সাম্প্রতিককালে ইত্যাদি)। এখানে ওয়েবসকেট সুরক্ষা তথ্যের একটি সংক্ষিপ্তসার রয়েছে: https://devcenter.heroku.com/articles/websket- সুরক্ষা

বুনিয়াদি প্রমাণীকরণটি আগে একটি বিকল্প ছিল তবে এটি অবচয় করা হয়েছে এবং আধুনিক ব্রাউজারগুলি নির্দিষ্ট করে থাকলেও শিরোনামটি প্রেরণ করে না।

বেসিক লেখার তথ্য (হ্রাস করা) :

অনুমোদনের শিরোনামটি ওয়েবসকেট ইউআরআইয়ের ব্যবহারকারীর নাম এবং পাসওয়ার্ড (বা কেবল ব্যবহারকারীর নাম) ক্ষেত্র থেকে উত্পন্ন হয়েছে:

var ws = new WebSocket("ws://username:password@example.com")

উপরের ফলাফলগুলি নীচের শিরোনামটিতে "ব্যবহারকারীর নাম: পাসওয়ার্ড" বেস 64 এনকোডযুক্ত স্ট্রিং সহ রয়েছে:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

আমি ক্রোম 55 এবং ফায়ারফক্স 50 এ মৌলিক লেখক পরীক্ষা করেছি এবং যাচাই করেছি যে প্রকৃতপক্ষে প্রাথমিক লেখক তথ্যটি সার্ভারের সাথে আলোচনা করা হয়েছে (এটি সাফারিতে কাজ নাও করতে পারে)।

প্রাথমিক লেখক উত্তরের জন্য দিমিত্রি ফ্র্যাঙ্ককে ধন্যবাদ's


37
আমি একই সমস্যা জুড়ে এসেছি। খুব খারাপ যে এই মানগুলি এতটা দুর্বল ইন্টিগ্রেটেড। আপনি আশা করতে পারেন যে তারা ওয়েবসকেটস এপিআইয়ের প্রয়োজনীয়তাগুলি (যেহেতু ওয়েবসকেটস এবং এক্সএইচআর সম্পর্কিত) তারা এক্সএইচআর এপিআইয়ের দিকে তাকাবে, তবে মনে হয় তারা কেবল একটি দ্বীপে এপিআই বিকাশ করছে।
অ্যালোটেলাক্রাম

4
এলিওলেট্রিক্রাম, হাইবিআই ওয়ার্কিং গ্রুপে যোগ দিন এবং এর প্রস্তাব দিন। গোষ্ঠীটি জনসাধারণের জন্য উন্মুক্ত এবং প্রোটোকলের পরবর্তী সংস্করণগুলির জন্য চলছে।
কনক

5
@ চার্লি: আপনি যদি সার্ভারকে পুরোপুরি নিয়ন্ত্রণ করেন তবে এটি একটি বিকল্প। আপনার সাধারণ এইচটিটিপি সার্ভার থেকে একটি টিকিট / টোকেন তৈরি করা এবং তারপরে ক্লায়েন্টকে টিকিট / টোকেন প্রেরণ করতে হবে (হয় ওয়েবসকেট পথে কোয়েরি স্ট্রিং হিসাবে অথবা প্রথম ওয়েবসকেট বার্তা হিসাবে)। ওয়েবসকেট সার্ভারটি তখন যাচাই করে যে টিকিট / টোকেনটি বৈধ (মেয়াদ উত্তীর্ণ নয়, ইতিমধ্যে ব্যবহৃত হয়নি, তৈরি হওয়ার সময় একই আইপি থেকে এসেছিল ইত্যাদি)। এছাড়াও, আমি বিশ্বাস করি বেশিরভাগ ওয়েবসকেট ক্লায়েন্টরা বুনিয়াদি প্রমাণকে সমর্থন করে (যদিও এটি আপনার পক্ষে পর্যাপ্ত নাও হতে পারে)। আরো তথ্য: devcenter.heroku.com/articles/websocket-security
Kanaka

3
আমি এটি নকশা দ্বারা অনুমান। আমি এই ধারণাটির আওতায় আছি যে বাস্তবায়ন ইচ্ছাকৃতভাবে এইচটিটিপি থেকে ingণ নিয়েছে তবে তাদের নকশার মাধ্যমে যথাসম্ভব পৃথক করে রাখুন। স্পেসিফিকেশনের পাঠ্যটি অব্যাহত রয়েছে: "তবে, ডিজাইনটি ওয়েবস্কটটি এইচটিটিপি-তে সীমাবদ্ধ করে না এবং ভবিষ্যতের বাস্তবায়নগুলি পুরো প্রোটোকলটিকে পুনরায় উদ্ভাবন না করে কোনও উত্সর্গীকৃত বন্দরের উপর একটি সহজ হ্যান্ডশেক ব্যবহার করতে পারে This এই শেষ পয়েন্টটি গুরুত্বপূর্ণ কারণ ইন্টারেক্টিভ ম্যাসেজিংয়ের ট্র্যাফিক নিদর্শনগুলি করে মানক এইচটিটিপি ট্র্যাফিকের সাথে খুব বেশি মিল নেই এবং কিছু উপাদানগুলিতে অস্বাভাবিক বোঝা প্ররোচিত করতে পারে। "

3
দুর্ভাগ্যক্রমে এটি এজ তে কাজ করবে বলে মনে হচ্ছে না। ধন্যবাদ, এমএস: /
sibbl

40

বিকল্প সমাধানের আরও কিছু, তবে সমস্ত আধুনিক ব্রাউজারগুলি তাই সংযোগের সাথে ডোমেন কুকিজ প্রেরণ করে:

var authToken = 'R3YKZFKBVi';

document.cookie = 'X-Authorization=' + authToken + '; path=/';

var ws = new WebSocket(
    'wss://localhost:9000/wss/'
);

অনুরোধ সংযোগ শিরোনাম দিয়ে শেষ:

Cookie: X-Authorization=R3YKZFKBVi

1
এটি সংযোগে অ্যাক্সেস টোকেনগুলি পাস করার সর্বোত্তম উপায় বলে মনে হচ্ছে না। এখন.
ক্যামমিল

1
ডাব্লুএস সার্ভার ইউআরআই যদি ক্লায়েন্ট ইউআরআই থেকে আলাদা হয় তবে কী হবে?
ডেনিশ

35

HTTP অনুমোদনের শিরোনাম সমস্যাটি নিম্নলিখিতগুলির সাথে সমাধান করা যেতে পারে:

var ws = new WebSocket("ws://username:password@example.com/service");

তারপরে, সরবরাহ করা usernameএবং এর সাথে একটি উপযুক্ত বেসিক অনুমোদনের এইচটিটিপি শিরোনাম সেট করা হবে password। আপনার যদি বেসিক অনুমোদনের দরকার হয় তবে আপনি প্রস্তুত set


আমি Bearerতবে ব্যবহার করতে চাই , এবং আমি নিম্নলিখিত কৌশলটি অবলম্বন করেছি: আমি সার্ভারের সাথে নিম্নলিখিত হিসাবে সংযুক্ত হয়েছি:

var ws = new WebSocket("ws://my_token@example.com/service");

এবং যখন সার্ভার সাইডে আমার কোডটি শূন্য-অনামিহীন ব্যবহারকারীর নাম এবং খালি পাসওয়ার্ড সহ বেসিক অনুমোদনের শিরোনাম গ্রহণ করে, তখন এটি ব্যবহারকারীর নামটি টোকেন হিসাবে ব্যাখ্যা করে।


12
আমি আপনার প্রস্তাবিত সমাধানটি চেষ্টা করছি। তবে আমি আমার অনুরোধে অনুমোদন শিরোনামটি যুক্ত হতে দেখছি না। আমি এটি বিভিন্ন ব্রাউজারগুলি যেমন Chrome V56, ফায়ারফক্স V51.0 ব্যবহার করে চেষ্টা করেছি আমি নিজের লোকালহোস্টে আমার সার্ভার চালাচ্ছি। সুতরাং ওয়েবসকেট ইউআরএল হ'ল "ডাব্লুএস: // মাইউজারনেম: মাইপাসওয়ার্ড @ লোকালহোস্ট: 8080 / মাইওবসকেট"। কোন ধারণা কি ভুল হতে পারে? ধন্যবাদ
লার্নটোলাইভ

4
URL- এর মাধ্যমে টোকন স্থানান্তর করা কি নিরাপদ?
মার্গাসোভ

2
টোকেন হিসাবে খালি / উপেক্ষিত ইউজারনেম এবং খালি পাসওয়ার্ড না থাকাই ভাল হতে পারে কারণ ব্যবহারকারীর নাম লগ হতে পারে।
AndreKR

9
আমি @LearnToLive- এর সাথে একমত - আমি এটি ডাব্লুএসএস (উদাহরণস্বরূপ wss://user:password@myhost.com/ws) দিয়ে ব্যবহার করেছি এবং Authorizationসার্ভারে কোনও শিরোনাম পেলাম না (Chrome সংস্করণ 60 ব্যবহার করে)
user9645

6
আমার কাছে @LearnToLive এবং @ user9645 এর মতোই সমস্যা রয়েছে; যখন ইউআরআই wss://user:pass@hostফর্ম্যাটে থাকে তখন ক্রোম বা ফায়ারফক্স উভয়ই অনুমোদনের শিরোনাম যুক্ত করে না । এটি কি ব্রাউজারগুলি সমর্থন করে না, বা হ্যান্ডশেক দিয়ে কিছু ভুল হচ্ছে?
ডেভিড ক্যাসিনস্কি

19

আপনি শিরোনাম যোগ করতে পারবেন না তবে, সংযোগের মুহুর্তে যদি আপনাকে কেবল সার্ভারে মানগুলি পাস করতে হয় তবে আপনি url এ কোয়েরি স্ট্রিং অংশটি নির্দিষ্ট করতে পারেন:

var ws = new WebSocket("ws://example.com/service?key1=value1&key2=value2");

এই ইউআরএলটি বৈধ তবে - অবশ্যই - আপনাকে এটির বিশ্লেষণের জন্য আপনার সার্ভার কোডটি সংশোধন করতে হবে।


14
এই সমাধানটি সম্পর্কে সতর্কতা অবলম্বন করা দরকার, ক্যোরি স্ট্রিংটি বাধা দেওয়া হতে পারে, প্রক্সিগুলিতে লগ ইন করা যেতে পারে তাই সংবেদনশীল তথ্য (ব্যবহারকারী / পাসওয়ার্ড / প্রমাণীকরণ টোকেন) এইভাবে পাস করা পর্যাপ্ত নিরাপদ হবে না।
নীড়

5
@ ডাব্লুএসএস-এর সাথে কোয়েরিস্ট্রিং সম্ভবত নিরাপদ হওয়া উচিত
সেবাস্তিয়ান লরবার

8
ডাব্লুএসএস সরল পাঠ্য। ডাব্লুএস প্রোটোকল ব্যবহার করে যে কোনও কিছুকে বাধা দেওয়া যেতে পারে।
গ্যাব্রিয়েল ক্যারিওলি

1
@ সেবাস্তিয়ানলবার্ব ক্যোয়ারিং স্ট্রিং ব্যবহার করা নিরাপদ নয় এটি এনক্রিপ্ট করা হচ্ছে না এটি এইচটিটিপিএসের ক্ষেত্রেও প্রযোজ্য, তবে যেহেতু "ডাব্লুএস: // ..." প্রোটোকল ব্যবহার করা হয়েছে, তাই এটি আসলে কিছু যায় আসে না।
Lu4

5
@ Lu4 কোয়েরি স্ট্রিং এনক্রিপ্ট করা হয়, কিন্তু সংবেদনশীল তথ্য যোগ করতে অন্য কারণে একটি হোস্ট আছে যেমন URL টি ক্যোয়ারী পরামিতি stackoverflow.com/questions/499591/are-https-urls-encrypted/... & blog.httpwatch.com/2009 /

16

আপনি জাভাস্ক্রিপ্ট ওয়েবসকেটস এপিআই ব্যবহার করে ওয়েবসকেট সংযোগ স্থাপন করতে চাইলে আপনি কাস্টম শিরোনাম প্রেরণ করতে পারবেন না। আপনি Subprotocolsদ্বিতীয় ওয়েবস্কট শ্রেণীর নির্মাতা ব্যবহার করে শিরোনাম ব্যবহার করতে পারেন :

var ws = new WebSocket("ws://example.com/service", "soap");

এবং তারপরে আপনি Sec-WebSocket-Protocolসার্ভারে কী ব্যবহার করে সাবপ্রোটোকলস শিরোনাম পেতে পারেন ।

একটি সীমাবদ্ধতাও রয়েছে, আপনার সাবপ্রোটোকলসের শিরোনামের মানগুলিতে কমা থাকতে পারে না ( ,)!


1
একটি Jwt কমা থাকতে পারে?
CESCO

1
আমি বিশ্বাস করি না। জেডাব্লুটিটিতে তিনটি বেস 64-এনকোডড পে-লোড থাকে, প্রত্যেকটি একটি সময়কালে পৃথক হয়। আমি বিশ্বাস করি এটি কমা হওয়ার সম্ভাবনাটিকে বাতিল করে দেয়।
বিলিবোন

2
আমি এটি প্রয়োগ করেছি এবং এটি কাজ করে - কেবল অদ্ভুত বোধ করে। ধন্যবাদ
ব্যাটারিএসিড

3
আপনি কি পরামর্শ দিচ্ছেন যে আমরা Sec-WebSocket-Protocolশিরোনামের বিকল্প হিসাবে শিরোনামটি ব্যবহার করব Authorization?

13

অনুমোদনের শিরোনাম পাঠানো সম্ভব নয়।

একটি টোকেন ক্যোয়ারী প্যারামিটার সংযুক্ত করা একটি বিকল্প। যাইহোক, কিছু পরিস্থিতিতে আপনার মূল লগইন টোকেনটিকে সাদামাটা পাঠ্যে কোয়েরি প্যারামিটার হিসাবে প্রেরণ করা অনাকাঙ্ক্ষিত হতে পারে কারণ এটি শিরোনামটি ব্যবহার করার চেয়ে বেশি অস্বচ্ছ এবং এতে লক্কে কোথাও লগইন হবে। যদি এটি আপনার জন্য সুরক্ষা উদ্বেগ উত্থাপন করে তবে একটি বিকল্প হ'ল কেবলমাত্র সকেট স্টাফের জন্য একটি গৌণ জেডাব্লুটি টোকেন ব্যবহার করা

এই জেডাব্লুটিটি উত্পন্ন করার জন্য একটি REST এন্ডপয়েন্টটি তৈরি করুন , যা অবশ্যই আপনার প্রাথমিক লগইন টোকেন (শিরোনামের মাধ্যমে সংক্রমণিত) দ্বারা প্রমাণীকৃত ব্যবহারকারীদের দ্বারা অ্যাক্সেস করতে পারে। ওয়েব সকেট জেডাব্লুটিটি আপনার লগইন টোকেনের চেয়ে আলাদাভাবে কনফিগার করা যেতে পারে, যেমন একটি সংক্ষিপ্ত সময়সীমা সহ, সুতরাং আপনার আপগ্রেড অনুরোধের ক্যোয়ারী পরম হিসাবে প্রায় পাঠানো নিরাপদ।

আপনি সোকজেএস ইভেন্টভ্যান্স হ্যান্ডলারের উপর যেভাবে যাত্রা করছেন তাতে একই রুটের জন্য একটি পৃথক জবটআউথহ্যান্ডলার তৈরি করুন । আপনার প্রমাণীকরণের হ্যান্ডলারটি প্রথমে নিবন্ধিত হয়েছে তা নিশ্চিত করুন, যাতে আপনি আপনার ডাটাবেসের বিরুদ্ধে ওয়েব সকেট টোকেনটি পরীক্ষা করতে পারেন (জেডাব্লুটিটি ব্যাকএন্ডে কোনওভাবে আপনার ব্যবহারকারীর সাথে সংযুক্ত হওয়া উচিত)।


এটিই ছিল একমাত্র সুরক্ষিত সমাধান যেটি আমি এপিআই গেটওয়ে ওয়েবসকেটের জন্য নিয়ে আসতে পারি। স্ল্যাক তাদের আরটিএম এপিআইয়ের সাথে অনুরূপ কিছু করে এবং তাদের 30 সেকেন্ডের সময়সীমা শেষ হয়।
andrhamm

2

পুরোপুরি এটিকে হ্যাক করেছে, কানাকার উত্তরের জন্য ধন্যবাদ।

ক্লায়েন্ট:

var ws = new WebSocket(
    'ws://localhost:8080/connect/' + this.state.room.id, 
    store('token') || cookie('token') 
);

সার্ভার (এই উদাহরণে কোআ 2 ব্যবহার করে তবে যেখানেই একই রকম হওয়া উচিত):

var url = ctx.websocket.upgradeReq.url; // can use to get url/query params
var authToken = ctx.websocket.upgradeReq.headers['sec-websocket-protocol'];
// Can then decode the auth token and do any session/user stuff...

4
যেখানে আপনার ক্লায়েন্টকে এক বা একাধিক নির্দিষ্ট প্রোটোকলের জন্য অনুরোধ করার কথা বলা হয়েছে সেখানে এটি কি আপনার টোকেনটি পাস করে না? আমি এই কাজটি করতে পারি, কোনও সমস্যা নেই, তবে আমি সিদ্ধান্ত নিয়েছি যে এটি না করা এবং মোটিসের পরামর্শ অনুসারে তা করা এবং অন ওপেন () এ অথ টোকেন না পাঠানো অবধি ব্লকটি যা অবরুদ্ধ করবে তা করার সিদ্ধান্ত নিয়েছি। প্রোটোকল রিকোয়েস্ট শিরোনামকে ওভারলোড করা আমার কাছে ভুল বলে মনে হচ্ছে এবং আমার এপিআই জনসাধারণের ব্যবহারের জন্য হওয়ায় আমি মনে করি এটি আমার API এর গ্রাহকদের জন্য বিভ্রান্তিকর হতে চলেছে।
জে

0

আমার ক্ষেত্রে:

  • আমি একটি প্রোডাকশন ডাব্লুএস সার্ভারের সাথে সংযোগ করতে চাই www.mycompany.com/api/ws...
  • আসল শংসাপত্রগুলি (একটি সেশন কুকি) ব্যবহার করে ...
  • একটি স্থানীয় পৃষ্ঠা থেকে ( localhost:8000)।

document.cookie = "sessionid=foobar;path=/"ডোমেনগুলির মিল না হওয়ায় সেটিং সহায়তা করবে না।

সমাধান :

যোগ 127.0.0.1 wsdev.company.comকরুন /etc/hosts

আপনি mycompany.comযখন www.mycompany.com/api/wsকোনও বৈধ সাবডোমেন থেকে সংযোগ করছেন তেমন সংযোগ করার সময় আপনার ব্রাউজারটি কুকিজ ব্যবহার করবে wsdev.company.com


-1

আমার পরিস্থিতিতে (অ্যাজুর টাইম সিরিজ অন্তর্দৃষ্টি wss: //)

পুনঃসংযোগ ওয়েবেসকেট র‍্যাপার ব্যবহার করে এবং একটি সহজ সমাধান সহ শিরোনাম যুক্ত করতে সক্ষম হয়েছিল:

socket.onopen = function(e) {
    socket.send(payload);
};

এই ক্ষেত্রে পে-লোড হ'ল:

{
  "headers": {
    "Authorization": "Bearer TOKEN",
    "x-ms-client-request-id": "CLIENT_ID"
}, 
"content": {
  "searchSpan": {
    "from": "UTCDATETIME",
    "to": "UTCDATETIME"
  },
"top": {
  "sort": [
    {
      "input": {"builtInProperty": "$ts"},
      "order": "Asc"
    }], 
"count": 1000
}}}

-3

প্রযুক্তিগতভাবে, আপনি প্রোটোকল আপগ্রেড পর্যায়ের আগে সংযুক্ত ফাংশনটির মাধ্যমে এই শিরোনামগুলি প্রেরণ করবেন। এটি আমার জন্য একটি nodejsপ্রকল্পে কাজ করেছে :

var WebSocketClient = require('websocket').client;
var ws = new WebSocketClient();
ws.connect(url, '', headers);

3
এটি এনপিএম (নোডের জন্য) ওয়েবসকেট ক্লায়েন্টের জন্য। npmjs.com / প্যাকেজ / ওয়েবেসকেট সামগ্রিকভাবে এটি হ'ল আমি যা খুঁজছি তা তবে ব্রাউজারে।
arnuschky

1
এটি ডাউনভোটেড কারণ ওয়েবস্কট প্রোটোকল স্তরটিতে এই শিরোনামগুলির প্যারামিটার রয়েছে এবং এইচটিটিপি শিরোনাম সম্পর্কে প্রশ্ন।
তোয়ালাল

" headersহয় নাল বা একটি বস্তু অতিরিক্ত সালিসী HTTP অনুরোধ শিরোনাম অনুরোধ সহ প্রেরণ করতে হবে।" ওয়েবস্কটক্লিয়েন্ট.এমডি থেকে ; অতএব, headersএখানে HTTP স্তর।
মোমোকো

এছাড়াও, যদি কেউ কাস্টম হেডার প্রদান করতে চায় ফাংশন স্বাক্ষর মনে রাখা উচিত connectপদ্ধতি, হিসাবে বর্ণনা connect(requestUrl, requestedProtocols, [[[origin], headers], requestOptions]), অর্থাত্ headersসহ প্রদান করা উচিত requestOptionsউদাহরণস্বরূপ, ws.connect(url, '', headers, null)। এক্ষেত্রে কেবল originস্ট্রিংকে উপেক্ষা করা যেতে পারে।
মোমোকো

-4

আপনি কোনও বস্তুর ভিতরে তৃতীয় প্যারামিটার (বিকল্পগুলি) -তে কী-মান হিসাবে শিরোনামগুলি পাস করতে পারেন । অনুমোদনের টোকেন সহ উদাহরণ। প্রোটোকল (দ্বিতীয় প্যারামিটার) নাল হিসাবে রেখে দিন

ডাব্লুএস = নতুন ওয়েবসকেট ('ডাব্লুএস: // লোকালহোস্ট', নাল, {শিরোনাম: {অনুমোদন: টোকেন}})

সম্পাদনা: দেখে মনে হচ্ছে যে এই পদ্ধতিটি কেবলমাত্র নোডেজ লাইব্রেরি সহ স্ট্যান্ডার্ড ব্রাউজার প্রয়োগের সাথে কাজ করে না। এটি ছেড়ে দেওয়া কারণ এটি কিছু লোকের পক্ষে কার্যকর হতে পারে।


আমার এক সেকেন্ডের আশা ছিল ওয়েবসকেট কর্টারে কোনও তৃতীয় প্যারাম নেওয়া কোনও ওভারলোড বলে মনে হচ্ছে না।
লেভিটিকন

Wscat কোড থেকে ধারণা পেয়েছেন। github.com/websockets/wscat/blob/master/bin/wscat লাইন 261 wich ws প্যাকেজটি ব্যবহার করে। ভেবেছিলাম এটি একটি স্ট্যান্ডার্ড ব্যবহার।
নডেন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.