অক্ষগুলি প্রতিক্রিয়া শিরোনামের ক্ষেত্রগুলিতে অ্যাক্সেস পায়


160

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

const request = axios.post(`${ROOT_URL}/auth/sign_in`, props);
request.then((response)=>{
  console.log(response.headers);
});

আমি ঠিক পেতে

Object {content-type: "application/json; charset=utf-8", cache-control: "max-age=0, private, must-revalidate"}

এখানে আমার ব্রাউজার নেটওয়ার্ক ট্যাবটি দেখতে পাবেন যেহেতু অন্যান্য সমস্ত ক্ষেত্র উপস্থিত রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

Bests।


আপনি যদি axios.defaults.headers মুদ্রণ করেন তবে আপনি কি তার অনুপস্থিত কাউকে দেবেন? কিছু শিরোনাম প্রতিটি স্তরের অনুরোধ অনুযায়ী নয়, সেই স্তরে কনফিগার করা হয়েছে ( github.com/mzabriskie/axios#global-axios-defaults দেখুন )
বেন হরে

2
এটি কি axios.defaults.headersকিউকিউএসটি হেডার প্যারামগুলি কনফিগার করার জন্য নয় ? আমার একটি রিসপন্স অ্যাক্সেস করা দরকার। @ বেনহেয়ার
টোনেসকন

বিটিডব্লিউ, আপনি যা অনুরোধ বলেছেন, এটি কোনও অনুরোধ নয়। এটি আপনার প্রতিক্রিয়া জন্য একটি প্রতিশ্রুতি। আপনার অনুরোধটি আপনি পোস্ট () পদ্ধতিতে আর্গুমেন্ট হিসাবে পাস করেছেন passed
ড্যানিয়েল

উত্তর:


310

CORS অনুরোধের ক্ষেত্রে, ব্রাউজারগুলি কেবলমাত্র ডিফল্টরূপে নিম্নলিখিত প্রতিক্রিয়া শিরোনাম অ্যাক্সেস করতে পারে:

  • ক্যাশে-নিয়ন্ত্রণ
  • বিষয়বস্তু-ভাষা
  • বিষয়বস্তুর প্রকার
  • মেয়াদ শেষ হয়ে যাবে
  • সর্বশেষ পরিবর্তিত
  • Pragma

আপনি যদি চান যে আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটি অন্য শিরোলেখ অ্যাক্সেস করতে সক্ষম হয়, আপনি সার্ভারে অ্যাক্সেস-কন্ট্রোল-এক্সপোজ- শিরোনাম সেট করতে হবে :

Access-Control-Expose-Headers: Access-Token, Uid

আমার খারাপ আমি এই ক্ষেত্রগুলি প্রকাশ করতে ভুলে গেছি।
টোনেসসন

27
আপনি যদি র্যাক- expose: ['Access-Token', 'Uid']resource '*', :headers => :any, :methods => [:get, :post, :put, :patch, :delete, :options, :head], expose: ['Access-Token', 'Uid']
করসের সাথে রেলগুলি

3
আমি পাই না। যদি সেগুলি প্রকাশ না করা হয়, তবে অতিরিক্ত শিরোনামগুলি ব্রাউজারে দৃশ্যমান হয় তবে অক্ষর প্রতিক্রিয়াতে নয়?
অ্যাডানাইলেভ

4
@ অ্যাডানাইলেভ, ব্রাউজারগুলি আপনাকে ডিবাগিংয়ের উদ্দেশ্যে সেগুলি দেখার অনুমতি দেয় তবে সুরক্ষার কারণে আপনাকে এপিআইয়ের মাধ্যমে সেগুলি অ্যাক্সেস করতে বাধা দেয়। এটি ক্লায়েন্টদের সার্ভার থেকে সুরক্ষিত শংসাপত্র পেতে বাধা দেয়, কোনও ক্লায়েন্টের কী অ্যাক্সেস রয়েছে তা সার্ভারকে নির্ধারণ করতে দেয়। টিএলডিআর: এটি সুরক্ষার জন্য উদ্দেশ্যে করা হয়েছে
49

2
আমার এনজিআইএনএক্স কনফগ ফাইলে এটি আমার কাছে রয়েছে ... 'Access-Control-Expose-Headers' 'Authorization, X-Suggested-Filename, content-disposition' always; তবুও কেবল content-type: "application/pdf" সত্যই টানতে হবেcontent-disposition
ওল্ড ম্যান ওয়াল্টার

17

এটি সত্যই আমাকে সাহায্য করেছে, আপনার উত্তরের জন্য নিক উরালতসেভকে ধন্যবাদ।

আপনি ব্যবহার তাদের জন্য nodejs সঙ্গে Cors :

...
const cors = require('cors');

const corsOptions = {
  exposedHeaders: 'Authorization',
};

app.use(cors(corsOptions));
...

ক্ষেত্রে আপনি প্রতিক্রিয়া পাঠানোর পথে res.header('Authorization', `Bearer ${token}`).send();


1
যারা ভাবছেন তাদের জন্য আপনি এখানেও একটি অ্যারে পাস করতে পারেন: উন্মুক্তহাইডার্স: ['অনুমোদন', 'এক্স-টোটাল-কাউন্ট']
থিয়াগো সান্টানা ২

11

আমিও একই সমস্যায় পড়ছিলাম। Y আমার "ওয়েবসিকিউরিটি.জভা" এ এটি করেছিলেন, এটি কর্স কনফিগারেশনের সেটএক্সপোজডহাইডার্স পদ্ধতি সম্পর্কে।

@Bean
CorsConfigurationSource corsConfigurationSource() {

    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowCredentials(true);
    configuration.setAllowedOrigins(Arrays.asList(FRONT_END_SERVER));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
    configuration.setAllowedHeaders(Arrays.asList("X-Requested-With","Origin","Content-Type","Accept","Authorization"));

    // This allow us to expose the headers
    configuration.setExposedHeaders(Arrays.asList("Access-Control-Allow-Headers", "Authorization, x-xsrf-token, Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, " +
            "Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"));

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

আমি আশা করি এটা কাজ করে.


7

এসপ নেট কোরটিতে একই সমস্যার মুখোমুখি হোন আশা করি এটি সহায়তা করবে

public static class CorsConfig
{
    public static void AddCorsConfig(this IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder
                .WithExposedHeaders("X-Pagination")
                );
        });
    }
}

1
তাই আপনাকে স্বাগতম! আপনার উত্তর সঠিক হতে পারে তবে স্ট্যাকওভারফ্লোতে, কেবল উত্তর পোস্ট করার জন্য এটি নিরুত্সাহিত করা হয়। আপনার উত্তরটি কীভাবে আসল প্রশ্নটি সমাধান করে তার ব্যাখ্যা দেওয়ার চেষ্টা করুন। দয়া করে কীভাবে আরও ভাল উত্তর লিখতে
nircraft

আপনাকে ধন্যবাদ, এটি সাহায্য করেছিল;)
ফ্লোরিয়ান

2

অফিসিয়াল ডক্স অনুসারে :

আপনি যদি HTTP শিরোনামগুলি সার্ভারের সাথে প্রতিক্রিয়া জানাতে চান তবে এটি সহায়তা করতে পারে । সমস্ত শিরোনামের নামগুলি ছোট হাতের অক্ষরে থাকে এবং বন্ধনী স্বরলিপি ব্যবহার করে অ্যাক্সেস করা যায়। উদাহরণ: এর response.headers['content-type']মতো কিছু দেবে: শিরোনাম: {},


1

স্প্রিংবুট 2 এর জন্য কেবল যুক্ত করুন

httpResponse.setHeader("Access-Control-Expose-Headers", "custom-header1, custom-header2");

আপনার CORS ফিল্টার বাস্তবায়ন কোডে পরিচ্ছন্ন তালিকায় যুক্ত হয়েছে custom-header1এবং custom-header2ইত্যাদি


0

জ্যাঙ্গো সাহায্যের জন্য

CORS_EXPOSE_HEADERS = [
        'your header'
    ]

0

স্প্রিং বুট 2-এর জন্য যদি আপনি গ্লোবাল সিওআরএস কনফিগারেশন ব্যবহার করতে না চান তবে আপনি এট্রিবিউট @CrossOriginদিয়ে exposedHeadersঅ্যাডোটেশন ব্যবহার করে পদ্ধতি বা শ্রেণি / নিয়ামক স্তরের মাধ্যমে এটি করতে পারেন ।

উদাহরণস্বরূপ, পদ্ধতির authorizationজন্য শিরোনাম যুক্ত করতে YourController:

@CrossOrigin(exposedHeaders = "authorization")
@RestController
public class YourController {
    ...
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.