ส่วนหัว "Access-Control-Allow-Origin" มีหลายค่า


104

ฉันใช้ AngularJS $ http ทางฝั่งไคลเอ็นต์เพื่อเข้าถึงจุดสิ้นสุดของแอปพลิเคชัน ASP.NET Web API ทางฝั่งเซิร์ฟเวอร์ เนื่องจากไคลเอนต์โฮสต์บนโดเมนอื่นเป็นเซิร์ฟเวอร์ฉันจึงต้องการ CORS ใช้งานได้กับ $ http.post (url, data) แต่ทันทีที่ฉันตรวจสอบสิทธิ์ผู้ใช้และส่งคำขอผ่าน $ http.get (url) ฉันก็ได้รับข้อความ

ส่วนหัว "Access-Control-Allow-Origin" มีหลายค่า "http://127.0.0.1:9000, http://127.0.0.1:9000" แต่อนุญาตเพียงค่าเดียวเท่านั้น Origin 'http://127.0.0.1:9000' จึงไม่ได้รับอนุญาตให้เข้าถึง

Fiddler แสดงให้ฉันเห็นว่ามีรายการส่วนหัวสองรายการในคำขอรับหลังจากคำขอตัวเลือกสำเร็จ ฉันทำอะไรผิดพลาดที่ไหนและที่ไหน

อัปเดต

เมื่อฉันใช้ jQuery $ .get แทน $ http.get ข้อความแสดงข้อผิดพลาดเดียวกันจะปรากฏขึ้น ดูเหมือนว่าจะไม่มีปัญหากับ AngularJS แต่มันผิดตรงไหน?


ส่วนหัวประกอบด้วยอะไรบ้าง?
eckes

คำตอบ:


53

ฉันเพิ่ม

config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))

เช่นเดียวกับ

app.UseCors(CorsOptions.AllowAll);

บนเซิร์ฟเวอร์ ส่งผลให้มีรายการส่วนหัวสองรายการ เพียงใช้อันหลังก็ใช้งานได้


4
ดูเหมือนว่าคุณกำลังอ่าน Properties.Settings.Default.Cors จากไฟล์การตั้งค่า คุณสามารถโพสต์ตัวอย่าง? และ UseCors อยู่ในคลาสอะไร?
Hoppe

"Uncaught ReferenceError: EnableCorsAttribute ไม่ได้กำหนด" ??
วงจร

@Hoppe โปรดดูที่msdn.microsoft.com/en-us/library/dn314597(v=vs.118).aspx อธิบายว่าพารามิเตอร์แรกของ EnableCorsAttribute คือต้นกำเนิดที่อนุญาต ตัวอย่างเช่น "*" เพื่ออนุญาตทั้งหมด
Papa Mufflon

1
@ Hoppe, UseCors เป็นวิธีการขยายที่กำหนดไว้ในแพ็คเกจ NuGet Microsoft.Owin.Cors Sf katanaproject.codeplex.com/SourceControl/latest#src/… .
Papa Mufflon

7
config.EnableCors (enableCorsAttribute)มักถูกเรียกใน WebApiConfig.cs ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ Microsoft.AspNet.WebApi.Cors Nuget ซึ่งอธิบายไว้ที่นี่: แอปasp.net/web-api/overview/security/… .UseCors (CorsOptions.A allowAll)มักถูกเรียกใน Startup.Auth.cs ซึ่งเป็นส่วนหนึ่งของการกำหนดค่าผู้ให้บริการข้อมูลประจำตัวของคุณ (เช่น OAuth) และเป็นส่วนหนึ่งของแพ็คเกจ Microsoft.Owin.Cors Nuget
Henry C

51

เราพบปัญหานี้เนื่องจากเราได้ตั้งค่า CORS ตามแนวทางปฏิบัติที่ดีที่สุด (เช่นhttp://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) และ ยังมีส่วนหัวที่กำหนดเอง<add name="Access-Control-Allow-Origin" value="*"/>ใน web.config

ลบรายการ web.config และทุกอย่างเรียบร้อยดี

ตรงกันข้ามกับคำตอบของ @ mww เรายังคงมีEnableCors()อยู่ใน WebApiConfig.cs และEnableCorsAttributeบนคอนโทรลเลอร์ เมื่อเราหยิบออกมาอย่างใดอย่างหนึ่งเราพบปัญหาอื่น ๆ


11
ฉันลบบรรทัดนี้ <add name = "Access-Control-Allow-Origin" value = "*" /> และฉันมีอีกสองรายการต่อไปนี้ในไฟล์ web.config ซึ่งฉันไม่ได้ลบ: <add name = "Access -Control-Allow-Headers "value =" Content-Type "/> <add name =" Access-Control-Allow-Methods "value =" GET, POST, PUT, DELETE, OPTIONS "/>
Siva Karthikeyan

2
นี่เป็นกุญแจสำคัญคุณต้องเปิดใช้งาน CORS เพียงครั้งเดียวปัญหาของฉันคือฉันเปิดใช้งานใน web.config ของฉันเช่นเดียวกับแอป UseCors () ... ฉันลบรายการ web.config และใช้แอปเท่านั้น (Microsoft.Owin.Cors.CorsOptions.A allowAll); วิธีการแทน
Mohammad Sepahvand

1
บรรทัดด้านบนช่วยชีวิตฉัน! ตรวจสอบให้แน่ใจว่าคุณไม่ได้เปิดใช้งาน CORS มากกว่าหนึ่งครั้งมิฉะนั้นสิ่งนี้จะเกิดขึ้นและคุณจะหงุดหงิดมาก
TGarrett

ลบ <add name = "Access-Control-Allow-Headers" value = "Content-Type" /> ออกจาก web.config และแก้ไขให้ฉัน
jbooker

1
"นี่คือกุญแจสำคัญคุณต้องเปิดใช้งาน CORS เพียงครั้งเดียว" <- นี่คือมัน @MohammadSepahvand ขอบคุณ กลับไปที่. NET แล้วแปลกใจ: D.
Tuan Jinn

42

ฉันใช้ Cors 5.1.0.0 หลังจากปวดหัวมากฉันพบปัญหาที่จะทำซ้ำส่วนหัว Access-Control-Allow-Origin & Access-Control-Allow-Header จากเซิร์ฟเวอร์

ลบออกconfig.EnableCors()จากไฟล์ WebApiConfig.cs และตั้งค่า[EnableCors("*","*","*")]แอตทริบิวต์บนคลาส Controller

ตรวจสอบบทความนี้เพื่อดูรายละเอียดเพิ่มเติม


สิ่งนี้ใช้ได้กับฉันเพียงตรวจสอบให้แน่ใจว่าคุณไม่ได้ตั้งค่าอื่นเช่นนี้ <add name = "Access-Control-Allow-Origin" value = "*" /> ใน web.config
Crismogram

12

เพิ่มลงทะเบียน WebApiConfig

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);

หรือ web.config

<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>  
</httpProtocol>

แต่ไม่ใช่ทั้งสองอย่าง


2
นี่เป็นทางออกที่สำคัญสำหรับฉันอย่าทำทั้งสองอย่าง
robnick

8

จริงๆแล้วคุณไม่สามารถตั้งค่าส่วนหัวหลาย ๆ ส่วนได้Access-Control-Allow-Origin(หรืออย่างน้อยก็ใช้ไม่ได้กับทุกเบราว์เซอร์) แต่คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมตามเงื่อนไขแล้วใช้ในHeaderคำสั่ง:

SetEnvIf Origin "^(https?://localhost|https://[a-z]+\.my\.base\.domain)$" ORIGIN_SUB_DOMAIN=$1
Header set Access-Control-Allow-Origin: "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN

ดังนั้นในตัวอย่างนี้ส่วนหัวของการตอบกลับจะถูกเพิ่มก็ต่อเมื่อส่วนหัวของคำขอOriginตรงกับ RegExp:^(https?://localhost|https://[a-z]+\.my\.base\.domain)$ (โดยทั่วไปหมายถึง localhost ผ่าน HTTP หรือ HTTPS และ * .my.base.domain ผ่าน HTTPS)

อย่าลืมเปิดใช้งาน setenvifโมดูล

เอกสาร:

BTW. }eใน%{ORIGIN_SUB_DOMAIN}eไม่ได้พิมพ์ผิด เป็นวิธีที่คุณใช้ตัวแปรสภาพแวดล้อมในHeaderคำสั่ง


1
คุณมีแหล่งที่จะไม่ตั้งค่าส่วนหัวการควบคุมการเข้าถึงหลายรายการหรือไม่? ฉันไม่พบสิ่งที่ยืนยันสิ่งนี้
Spencer

โซลูชันที่ชาญฉลาดและสะอาดมาก ทำงานให้ฉัน
Alex Kalmikov

@Spencer "หมายเหตุ: ในทางปฏิบัติการผลิตรายการต้นทางหรือค่าว่างจะมีข้อ จำกัด มากกว่าแทนที่จะอนุญาตให้มีรายการต้นกำเนิดที่คั่นด้วยช่องว่าง แต่จะเป็นแหล่งกำเนิดเดียวหรือสตริง" null " w3.org/TR/cors/#access-control-allow-origin-response-header
Nux

8

ฉันก็มีทั้ง OWIN และ WebAPI ของฉันเช่นกันซึ่งเห็นได้ชัดว่าทั้งคู่ต้องการเปิดใช้งาน CORS แยกกันซึ่งจะสร้าง 'Access-Control-Allow-Origin' header contains multiple valuesข้อผิดพลาด

ฉันลงเอยด้วยการลบโค้ดทั้งหมดที่เปิดใช้งาน CORS จากนั้นเพิ่มสิ่งต่อไปนี้ในsystem.webServerโหนดของเว็บของฉัน Config:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="https://stethio.azurewebsites.net" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Authorization" />
  </customHeaders>
</httpProtocol>

การทำเช่นนี้เป็นไปตามข้อกำหนด CORS สำหรับ OWIN (อนุญาตให้เข้าสู่ระบบ) และสำหรับ WebAPI (อนุญาตการเรียก API) แต่สร้างปัญหาใหม่: OPTIONSไม่พบเมธอดในระหว่างการเรียกใช้งานล่วงหน้าสำหรับการเรียก API ของฉัน การแก้ไขนั้นง่ายมาก - ฉันแค่ต้องลบสิ่งต่อไปนี้ออกจากhandlersโหนด Web.Config:

<remove name="OPTIONSVerbHandler" />

หวังว่านี่จะช่วยใครบางคนได้


7

เซิร์ฟเวอร์ Apache:

ฉันใช้จ่ายเท่าเดิม แต่เป็นเพราะฉันไม่มีเครื่องหมายคำพูด (") เครื่องหมายดอกจันในไฟล์ของฉันที่ให้การเข้าถึงเซิร์ฟเวอร์เช่น '.htaccess':

Header add Access-Control-Allow-Origin: * 
Header add Access-Control-Allow-Origin "*" 

คุณอาจมีไฟล์ ".htaccess" อยู่ในโฟลเดอร์ที่มี ".htaccess" อื่นออกมาเช่น

/ 
- .htaccess 
- public_html / .htaccess (problem here)

ในกรณีของคุณแทนเครื่องหมายดอกจัน '*' จะเป็น ip (http://127.0.0.1:9000เซิร์ฟเวอร์ ) ที่คุณให้สิทธิ์ในการให้บริการข้อมูล

ASP.NET:

ตรวจสอบว่าไม่มี 'Access-Control-Allow-Origin' ซ้ำกันในรหัสของคุณ

เครื่องมือสำหรับผู้พัฒนา:

ด้วย Chrome คุณสามารถยืนยันส่วนหัวคำขอของคุณ กดปุ่ม F12 และไปที่แท็บ 'เครือข่าย' จากนั้นเรียกใช้คำขอ AJAX และจะปรากฏในรายการคลิกและให้ข้อมูลทั้งหมดที่นั่น

Access-Control-Allow-Origin: *


บางครั้งก็ง่ายอย่างนั้น ... ในขณะที่พยายามให้บริการเว็บที่สับสนเหล่านั้นทำงานบน IIS / Chrome ฉันเล่นกับเมธอด Application_BeginRequest และลืมมันไป ... การทำซ้ำในรหัสของฉันเอง! ขอบคุณที่ชี้ให้ฉันเห็นชัดเจน! :)
Juergen Riemer

2
หากต้องการรับส่วนหัวการตอบกลับ CORS คุณจะต้องจำลองคำขอข้ามแหล่งที่มาจริงดังนั้นจึงอาจไม่ปรากฏหากคุณดูในแท็บเครือข่ายบนไซต์ที่ทำงานอยู่ อย่างไรก็ตามการใช้ DHC ( chrome.google.com/webstore/detail/dhc-resthttp-api-client/… ) เพื่อเรียกใช้คำขอ AJAX ของคุณในทางเทคนิคจะเป็นการโทรจากโดเมนอื่นดังนั้นจึงเรียก CORS และช่วยให้คุณเห็น ส่วนหัว Access Control
Henry C

4

สิ่งนี้จะเกิดขึ้นเมื่อคุณกำหนดค่าตัวเลือก Cors ไว้ที่หลายตำแหน่ง ในกรณีของฉันฉันมีอยู่ในระดับคอนโทรลเลอร์เช่นเดียวกับใน Startup.Auth.cs / ConfigureAuth

ความเข้าใจของฉันคือถ้าคุณต้องการให้แอปพลิเคชันกว้างแล้วเพียงแค่กำหนดค่าภายใต้ Startup.Auth.cs / ConfigureAuth เช่นนี้ ... คุณจะต้องอ้างอิงถึง Microsoft.Owin.Cors

public void ConfigureAuth(IAppBuilder app)
        {
          app.UseCors(CorsOptions.AllowAll);

หากคุณต้องการเก็บไว้ที่ระดับคอนโทรลเลอร์คุณก็สามารถแทรกที่ระดับคอนโทรลเลอร์ได้

[EnableCors("http://localhost:24589", "*", "*")]
    public class ProductsController : ApiController
    {
        ProductRepository _prodRepo;

ในกรณีของฉันฉันตั้งค่าไว้ใน Web.Config และใน MyAppApiConfig.cs การลบออกจากครั้งหลังช่วยแก้ปัญหาให้ฉันได้
Jim B

4

หากคุณอยู่ใน IIS คุณต้องเปิดใช้งาน CORS ใน web.config คุณไม่จำเป็นต้องเปิดใช้งานในวิธีการลงทะเบียน App_Start / WebApiConfig.cs

วิธีแก้ปัญหาของฉันคือแสดงความคิดเห็นบรรทัดที่นี่:

// Enable CORS
//EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
//config.EnableCors(cors);

และเขียนใน web.config:

<system.webServer>
  <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>


2

สิ่งนี้อาจเกิดขึ้นได้แน่นอนหากคุณตั้งค่าAccess-Control-Allow-Originส่วนหัวของคุณให้มีหลายค่าตัวอย่างเช่นรายการค่าที่คั่นด้วยจุลภาคซึ่งได้รับการสนับสนุนใน RFCแต่เบราว์เซอร์หลักส่วนใหญ่ไม่รองรับ โปรดทราบว่าRFC พูดถึงวิธีการอนุญาตมากกว่าหนึ่งโดเมนโดยไม่ต้องใช้ '*' เช่นกัน

ตัวอย่างเช่นคุณสามารถรับข้อผิดพลาดนั้นใน Chrome ได้โดยใช้ส่วนหัวดังนี้:

Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com

นี่คือใน Chrome Version 64.0.3282.186 (Official Build) (64-bit)

โปรดทราบว่าหากคุณกำลังพิจารณาเรื่องนี้เนื่องจาก CDN และคุณใช้ Akamai คุณอาจต้องการทราบว่าAkamai จะไม่แคชบนเซิร์ฟเวอร์หากคุณใช้ Vary:Originวิธีที่หลายคนแนะนำในการแก้ปัญหานี้

คุณอาจต้องเปลี่ยนวิธีสร้างคีย์แคชของคุณโดยใช้ลักษณะการตอบสนอง "การแก้ไขรหัสแคช" รายละเอียดเพิ่มเติมเกี่ยวกับปัญหานี้ในคำถาม StackOverflow ที่เกี่ยวข้อง


โดยพื้นฐานแล้วคุณทำไม่ได้ในตอนนี้เพราะเป็นที่น่าสงสัยว่าคุณจะต้องการให้ทุกโดเมนบนอินเทอร์เน็ตเข้าสู่ url
scottheckel

ลิงก์ Akamai จำเป็นต้องล็อกอิน
Jean-François Savard

ใช่ดูเหมือนว่าจะเป็นข้อกำหนดของ Akamai สำหรับเอกสารเหล่านั้น
Brad Parks

วิธีการที่จะได้รับข้อผิดพลาดนี้ใน Chrome Access-Control-Allow-Origin: http://test.mysite.com http://test2.mysite.comอีกประการหนึ่งคือมีรายชื่อพื้นที่ที่คั่นของค่า: นั่นจะเป็นวิธีที่ถูกต้อง แต่เบราว์เซอร์ไม่เป็นไปตามมาตรฐานที่นี่ (ที่มา )
tanius

2

โง่และเรียบง่ายมาก:

ปัญหานี้เกิดขึ้นกับฉันเมื่อมีเวลาสองครั้งHeader always set Access-Control-Allow-Origin *ในไฟล์กำหนดค่า Apache ของฉัน เมื่อติดVirtualHostแท็กและอยู่ในLimitแท็กแล้ว:

<VirtualHost localhost:80>
  ...
  Header set Access-Control-Allow-Origin: *
  ...
  <Limit OPTIONS>
    ...
    Header set Access-Control-Allow-Origin: *
    ...
  </Limit>
</VirtualHost>

การลบหนึ่งรายการช่วยแก้ปัญหาได้

ฉันเดาว่าในโพสต์ต้นฉบับมันน่าจะเป็นสองครั้ง:

Header set Access-Control-Allow-Origin: "http://127.0.0.1:9000"

1

เพิ่งมีปัญหานี้กับเซิร์ฟเวอร์ nodejs

นี่คือวิธีที่ฉันแก้ไข
ฉันเรียกใช้เซิร์ฟเวอร์โหนดของฉันผ่าน a nginx proxyและฉันตั้งค่า nginx และnodeเป็นทั้งคู่allow cross domain requestsและมันไม่เป็นเช่นนั้นฉันจึงลบมันออกจาก nginx และทิ้งไว้ในโหนดและทุกอย่างก็เรียบร้อยดี


ขอบคุณสำหรับคำตอบนี้! มันแก้ปัญหาที่ฉันไม่สามารถแก้ได้เป็นเวลานานด้วยการตั้งค่า nginx + Rack (Ruby) ปัญหาเดียวกันวิธีแก้ปัญหาเดียวกัน: ปิดการเพิ่มส่วนหัวใน nginx แล้วปล่อยให้rack-corsอัญมณีจัดการกับสิ่งของ CORS แบมคง.
Pistos

0

ฉันประสบปัญหาเดียวกันและนี่คือสิ่งที่ฉันทำเพื่อแก้ไข:

ในบริการ WebApi ภายใน Global.asax ฉันได้เขียนโค้ดต่อไปนี้:

Sub Application_BeginRequest()
        Dim currentRequest = HttpContext.Current.Request
        Dim currentResponse = HttpContext.Current.Response

        Dim currentOriginValue As String = String.Empty
        Dim currentHostValue As String = String.Empty

        Dim currentRequestOrigin = currentRequest.Headers("Origin")
        Dim currentRequestHost = currentRequest.Headers("Host")

        Dim currentRequestHeaders = currentRequest.Headers("Access-Control-Request-Headers")
        Dim currentRequestMethod = currentRequest.Headers("Access-Control-Request-Method")

        If currentRequestOrigin IsNot Nothing Then
            currentOriginValue = currentRequestOrigin
        End If

        If currentRequest.Path.ToLower().IndexOf("token") > -1 Or Request.HttpMethod = "OPTIONS" Then
            currentResponse.Headers.Remove("Access-Control-Allow-Origin")
            currentResponse.AppendHeader("Access-Control-Allow-Origin", "*")
        End If

        For Each key In Request.Headers.AllKeys
            If key = "Origin" AndAlso Request.HttpMethod = "OPTIONS" Then
                currentResponse.AppendHeader("Access-Control-Allow-Credentials", "true")
                currentResponse.AppendHeader("Access-Control-Allow-Methods", currentRequestMethod)
                currentResponse.AppendHeader("Access-Control-Allow-Headers", If(currentRequestHeaders, "GET,POST,PUT,DELETE,OPTIONS"))
                currentResponse.StatusCode = 200
                currentResponse.End()
            End If
        Next

    End Sub

ที่นี่รหัสนี้อนุญาตเฉพาะคำขอก่อนการบินและโทเค็นเพื่อเพิ่ม "Access-Control-Allow-Origin" ในการตอบกลับไม่เช่นนั้นฉันจะไม่ได้เพิ่ม

นี่คือบล็อกของฉันเกี่ยวกับการใช้งาน: https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /


0

สำหรับผู้ที่ใช้ IIS กับ php บน IIS ให้อัปเดตฝั่งเซิร์ฟเวอร์ไฟล์ web.config เป็นไดเรกทอรีราก (wwwroot) และเพิ่มสิ่งนี้

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <httpProtocol>
            <customHeaders>
                <add name="Control-Allow-Origin" value="*"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

หลังจากนั้นรีสตาร์ทเซิร์ฟเวอร์ IIS พิมพ์ IISReset ใน RUN และป้อน


0

นี่เป็นอีกหนึ่งอินสแตนซ์ที่คล้ายกับตัวอย่างด้านบนที่คุณสามารถกำหนดไฟล์กำหนดค่าได้เพียงไฟล์เดียวที่ CORS คือ: มีไฟล์ web.config สองไฟล์บนเซิร์ฟเวอร์ IIS บนเส้นทางในไดเรกทอรีที่แตกต่างกันและหนึ่งในนั้นถูกซ่อนอยู่ในไดเรกทอรีเสมือน เพื่อแก้ปัญหานี้ฉันลบไฟล์ config ระดับรูทเนื่องจากพา ธ ใช้ไฟล์ config ในไดเร็กทอรีเสมือน ต้องเลือกอย่างใดอย่างหนึ่ง

URL called:  'https://example.com/foo/bar'
                     ^              ^
      CORS config file in root      virtual directory with another CORS config file
          deleted this config             other sites using this


0

ส่วนหัว "Access-Control-Allow-Origin" มีหลายค่า

เมื่อฉันได้รับข้อผิดพลาดนี้ฉันใช้เวลาหลายชั่วโมงในการค้นหาวิธีแก้ปัญหานี้ แต่ไม่มีอะไรได้ผลในที่สุดฉันก็พบวิธีแก้ปัญหานี้ซึ่งง่ายมาก เมื่อส่วนหัว '' Access-Control-Allow-Origin 'เพิ่มมากกว่าหนึ่งครั้งในการตอบสนองของคุณข้อผิดพลาดนี้เกิดขึ้นให้ตรวจสอบ apache.conf หรือ httpd.conf (เซิร์ฟเวอร์ Apache) สคริปต์ฝั่งเซิร์ฟเวอร์และลบส่วนหัวรายการที่ไม่ต้องการออกจากไฟล์เหล่านี้ .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.