(function(w,d,s,l,i){w[l]=w[l]|||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=? 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Rails API un CORS. Apziņas piesitiens - The Codest
The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2021-04-24
Programmatūras izstrāde

Rails API un CORS. Apziņas piesitiens

The Codest

Krzysztof Buszewicz

Vecākais Software Engineer

Pieredzējušam izstrādātājam šis teksts var nebūt pārsteidzošs, bet man šķiet, ka daudzos rakstos, ko esmu lasījis par CORS iestatīšanu Rails, bija teikts kaut kas līdzīgs: izmantojiet rack-cors, ļaujiet jebkuram hostam piekļūt API un (pēc izvēles): jums vajadzētu apsvērt kaut ko citu (nevis atļaut jebkuru hostu) ražošanā.

Ierosinātais kods vienmēr bija tuvu zemākajai:

config/initializers/cors.rb

Sliedes.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ''
resource '', headers: :any, methods: :any
end
end

un, diemžēl, šie teksti bija diez vai izskaidrojot, lai mums ko faktiski darīt ražošanā.

Es esmu diezgan OK ar copy-pasting (Es reizēm jokoju, ka uzņēmumi varētu nolīgt Stack Overflow copy-paster), ciktāl starp “kopēt” un “ielīmēt” ir brīdis “padomāt un pielāgot”. Tāpēc es gribētu mazliet sīkāk pastāstīt par to, ko mēs šeit darām un kā tas darbojas reālajā dzīvē.

Es ceru, ka jūs neiebilstat, ja sākšu ar īsu ievadu goda teorijā un pēc tam pāriešu pie Rails piemēriem.

Ievads

Sāksim no sākuma. Lai labāk paskaidrotu, esmu sadalījis ievadu trīs daļās. Pirmajā daļā tiks izklāstīts, kas ir izcelsme - galvenais termins tam, ko mēs šeit aplūkosim. Otrajā daļā ir runa par SOP, tikai īss apraksts. Un pēdējā daļā ir runa par CORS pati.

Kas ir izcelsme?

Saskaņā ar MDN Tīmekļa vietne Dokumenti:

- Tīmekļa satura izcelsmi nosaka pēc tā piekļuvei izmantotā URL adresāta shēmas (protokola), mitinātāja (domēna) un porta. Diviem objektiem ir viena un tā pati izcelsme tikai tad, ja shēma, resursdators un ports sakrīt (avots)

Tas šķiet diezgan skaidrs, vai ne? Izanalizēsim divus piemērus no MDN.

  1. http://example.com/app1/index.html, http://example.com/app2/index.html

2 iepriekš minētajiem ir viena un tā pati izcelsme, jo:

  • to shēmas (http) ir vienādas,
  • to domēni (example.com) ir vienādi,
  • to porti (netieši) ir vienādi.
  1. http://www.example.com, http://myapp.example.com

Šo 2 domēnu izcelsme ir atšķirīga, jo domēni (www.example.com, myapp.example.com) ir atšķirīgi.

Es ceru, ka tas ir pietiekami skaidrs. Ja ne, lūdzu, apmeklējiet MDN tīmekļa dokumentus, lai iegūtu vairāk piemēru.

Kas ir SOP?

MDN Web Docs saka (avots):

- Vienas un tās pašas izcelsmes politika ir svarīgs drošības mehānisms, kas ierobežo, kā dokuments vai skripts, kas ielādēts no vienas izcelsmes, var mijiedarboties ar citas izcelsmes resursu. Tas palīdz izolēt potenciāli ļaunprātīgus dokumentus, samazinot iespējamos uzbrukuma vektorus.

- Parasti ir atļauti starpizcelsmes ieraksti. Piemēram, saites, pāradresācijas un veidlapu iesniegšana.

- Parasti ir atļauta starpizcelsmes iestrādāšana.

- Parasti nav atļauts lasīt starp izcelsmes vietām, bet lasīšanas piekļuve bieži tiek nopludināta, izmantojot iestrādi.
Izmantojiet CORS lai atļautu starpizcelsmes piekļuvi

Kā redzat, SOP definīcijās ir daudz informācijas par starpizcelsmes uzvedību. Tas ir labi. Viss, kas mums tagad jāzina, ir tas, ka vienai un tai pašai izcelsmei ir vairāk privilēģiju, un mēs varam mīkstināt noteikumus attiecībā uz starpizcelsmēm, izmantojot CORS. Un šeit nāk nākamā sadaļa.

Kas ir CORS?

Pamatojoties uz MDN vārdiem:

  • Starpizcelsmes resursu koplietošana (CORS) ir uz HTTP galveni balstīts mehānisms, kas ļauj serverim norādīt jebkuru citu izcelsmi (domēnu, shēmu vai portu), no kuras pārlūkprogrammai jāļauj ielādēt resursus. CORS balstās arī uz mehānismu, ar kura palīdzību pārlūkprogrammas izdara “pirmsizpētes” pieprasījumu serverim, kurā tiek izvietots starpizcelsmes resurss, lai pārbaudītu, vai serveris atļaus veikt faktisko pieprasījumu. Šajā pirmsapstrādes pārbaudē pārlūkprogramma nosūta galvenes, kas norāda HTTP metodi un galvenes, kuras tiks izmantotas faktiskajā pieprasījumā. (avots).

Ar to joprojām nepietiek. Tur nav skaidri pateikts, ka vissvarīgākais ir tas, ka, izmantojot CORS ir . Access-Control-Allow-Origin:

  • Portāls Access-Control-Allow-Origin atbildes galvenē ir norādīts, vai atbildi var kopīgot ar konkrētās izcelsmes kodu (avots).

Nu, tam vajadzētu būt visam. Reālajā dzīvē, konfigurējot CORS, mēs parasti konfigurējam ACAO virsraksts pirmais.

Reālā dzīve

Tas ir viss, kad runa ir par definīcijām. Atgriezīsimies pie Rails un reālās dzīves piemēriem.

Kā konfigurēt CORS Rails sistēmā?

Mēs noteikti izmantosim plauktus-korpusus (kā mums teica). Atgādināsim pirmo fragmentu, kas visbiežāk tiek sniegts citos rakstos:


config/initializers/cors.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ''
resource '', headers: :any, methods: :any
end
end

Iespēju skaits ir plašs vai pat bezgalīgs, bet aplūkosim šīs divas:

  • mēs veidojam API ko atļauts izmantot trešo pušu pārlūkprogrammu klientiem,
  • esam izveidojuši tipisku frontend/backend atdalīšanu un vēlamies, lai mūsu uzticamie klienti varētu piekļūt API.

Trešo pušu klientu piekļuve API

Ja jums ir pirmā iespēja, iespējams, varat izvēlēties šādu risinājumu. izcelsme ‘*’ - jūs taču vēlaties, lai citi uz jūsu API bāzes izveidotu klientu, un nezināt, kas tie ir, vai ne?

Tipiska frontend/backend nodalīšana

Ja izstrādājat pēdējo, iespējams, nevēlaties, lai ikviens veiktu pārrobežu pieprasījumus jūsu API. Jūs drīzāk vēlaties:

  • ļaut ražošanas klientiem piekļūt ražošanas API,
  • tas pats attiecas arī uz inscenēšanu,
  • tas pats attiecas uz localhost,
  • iespējams, vēlēsieties atļaut FE pārskatīšanas programmām piekļūt stadijai.

Mēs joprojām izmantosim plauktus-korpusus (kā mums teica), bet mūsu veidā.

Izmantosim 2 ENV mainīgos: ATĻAUTĀS_IZCELSMES burtiskām izcelsmes definīcijām (zvaigznīte vai faktiskais URL) un ATĻAUTAS_IZCELSMES_REĢEXPS modeļiem.

config/initializers/cors.rb

frozenstringliteral: true

toregexp = ->(string) { Regexp.new(string) }
hosts = [
*ENV.fetch('ALLOWEDORIGINS').split(','),
*ENV.fetch('ALLOWEDORIGINREGEXPS').split(';').map(&to_regexp)
]

Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins(*hosts)

resurss '*',
         methods: %i[get post put patch delete options head],
         headers: :any

beigas
end

Kas šeit notiek?

  1. Kā redzat, mēs sadalām ENV mainīgajos definētās vērtības ar dažādiem atdalītājiem. Tas ir tāpēc, ka ir mazāka iespēja, ka URL definēšanas paraugā parādīsies semikols.
  2. Literālās vērtības ir gatavas lietošanai, bet mums ir jāsalāgo šabloni kā faktiskie Regexp gadījumi.
  3. Pēc tam mēs visu apvienojam kopā un ļaujam šiem resursiem piekļūt jebkuram resursam ar mūsu API izmantotajām metodēm, kas iekļautas baltajā sarakstā.

Tam vajadzētu būt pietiekami elastīgam, lai definētu atbilstošas vērtības izstrādes, sagatavošanas un ražošanas vidēs.

Secinājumi

Apkoposim visu iepriekš minēto galvenajos punktos:

  • izmantot ENV mainīgos, lai konfigurētu CORS,
  • izmantot regulārās izteiksmes, lai ļautu dažādām izcelsmes vietām piekļūt posma API (piemēram, pārskatīšanas lietojumprogrammām),
  • starp “kopēt” un “ielīmēt” vienmēr ievietojiet “pārdomāt un pielāgot”.

Tas ir viss. Jauku dienu! 🙂

Lasīt vairāk:

Kāpēc jums (iespējams) vajadzētu izmantot Typescript?

10 NYC jaunuzņēmumi, kurus vērts pieminēt 2021. gadā

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

    The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

    Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

    Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lt_LTLithuanian is_ISIcelandic lvLatvian