IIS ไม่สามารถให้บริการนามสกุลไฟล์บางอย่างได้


10

ฉันให้บริการไฟล์. JSON แต่ถึงแม้ว่าไฟล์นั้นจะมีอยู่ IIS ก็ยังคงมีข้อผิดพลาด 404 เมื่อมีการเข้าถึงไฟล์ใด ๆ ฉันลองเปลี่ยนชื่อไฟล์หนึ่งไฟล์เป็น. JS และใช้งานได้

ตัวชี้การตั้งค่าใดที่อาจทำให้เกิดปัญหานี้

คำตอบ:


21

โดยค่าเริ่มต้น IIS ใน W2K3 ขึ้นไปจะไม่แสดงไฟล์ที่ไม่ใช่ประเภท MIME ที่รู้จัก (แทนที่จะส่งคืนข้อผิดพลาด 404)

คุณต้องเพิ่มประเภท MIME ให้กับ IIS เพื่อให้สามารถใช้งานไฟล์ประเภทนั้นได้ คุณสามารถตั้งค่าได้ที่ระดับไซต์หรือระดับเซิร์ฟเวอร์

ในการตั้งค่านี้สำหรับเซิร์ฟเวอร์ทั้งหมด:

  • เปิดคุณสมบัติสำหรับเซิร์ฟเวอร์ใน IIS Manager และคลิกประเภท MIME
  • คลิก "ใหม่" ป้อน "JSON" สำหรับส่วนขยายและ "application / json" สำหรับประเภท MIME

ฉันเพิ่มประเภท MIME ใหม่รีสตาร์ทเว็บไซต์ แต่ยังคง 404 ขอบคุณอยู่ดีฉันคิดว่านี่อาจเป็นหนึ่งในปัญหา
Adrian Godong

อืมมม ตรวจสอบสิ่งที่คุณเปลี่ยนแปลงอีกครั้ง อาการ "เปลี่ยนชื่อไฟล์และใช้งานได้" เป็นตัวบ่งชี้คลาสสิกของพฤติกรรมนี้
Evan Anderson

สามตรวจสอบมัน ฉันสมมติว่าคุณไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ทั้งหมดใช่ไหม
Adrian Godong

อืม ... ข้ากำลังพยายามบอกให้เจ้าทำอะไร ฉันเพิ่งทำเองใน VM ที่สะอาดของ Windows Server 2003 SP2 ฉันติดตั้ง IIS สร้างไฟล์ "foo.json" ใน "C: \ inetpub \ wwwroot" ตรวจสอบว่าฉันได้ 404 เมื่อฉันกด " localhost / foo.json " ในเบราว์เซอร์เพิ่มประเภท MIME สำหรับ ".JSON "/" application / json "ไปที่ไซต์จากนั้นไปที่หน้าต่าง IE ของฉันที่ยังคงเปิดอยู่แล้วกด F5 และเห็นการโหลดหน้าเว็บ ฉันคิดว่าคุณมีอย่างอื่นในการเล่นด้วย
Evan Anderson

1
ฉันยังจำเป็นเพื่อให้แน่ใจว่าเว็บบริการส่วนต่อขยายที่ถูกเปิดใช้งานเพื่อให้งานนี้สำหรับฉัน ...
แกนดัล์ฟ

3

ผมมีปัญหาเดียวกัน. IIS ทำบางสิ่งที่เรียกว่าการกรองชนิด MIME หากไม่ทราบประเภท MIME ของไฟล์นามสกุลเฉพาะมันจะส่งคืนข้อผิดพลาด 404

ใน IIS <7: เปิดคุณสมบัติไซต์ (หรือเซิร์ฟเวอร์) คลิกที่แท็บHTTP-Header คลิกที่ปุ่มประเภท MIME เพิ่มประเภทไฟล์ * ด้วย MIME type "application / octet-stream"

สำหรับ IIS 7: เปิดตัวจัดการ IIS คลิกเซิร์ฟเวอร์หรือเว็บไซต์ ดับเบิลคลิกไอคอนฟีเจอร์MIME Types ในบานหน้าต่างการดำเนินการคลิกเพิ่ม เติมช่อง "นามสกุลไฟล์ชื่อ" ด้วย * และกล่องชนิด MIME พร้อมกับ "application / octet-stream"


2

ฉันเพิ่มประเภท MIME .json- text/jsonในไซต์ใน IIS เพื่อดูในเบราว์เซอร์เป็นข้อความ


นี้! นี้! นี้!
Tschallacka

1

หากต้องการรวมคำตอบเป็นคำตอบทั่วไปอีกหนึ่งข้อ:

ข้อสังเกตมาที่นี่:

  • เว้นแต่ตัวจัดการสคริปต์ (เอ็นจินเนื้อหาที่ใช้งานอยู่เช่น ASP / ASPX / PHP / Java / ISAPI / ฯลฯ ) เชื่อมโยงกับพวกเขา
    • ซึ่งหมายความว่า IIS จะถือว่าพวกเขาเป็นเนื้อหาที่ใช้งานไม่ใช่ไฟล์คงที่
  • ไฟล์เนื้อหาที่แอ็คทีฟที่ให้บริการโดยส่วนขยายใด ๆ จะต้องมีนามสกุลที่อนุญาตในรายการข้อ จำกัด ของส่วนขยายของบริการบนเว็บ (aka ข้อ จำกัด ISAPI / CGI ใน IIS 7)
    • หากคุณได้รับ 404 ในประเภทเนื้อหาที่ใช้งานใน IIS 7 อาจหมายถึงว่าตัวจัดการของคุณไม่ได้ติดตั้งดังนั้นคุณต้องไปติดตั้งส่วนประกอบที่รองรับนามสกุลไฟล์นั้น (ตัวอย่างเช่นถ้าไฟล์. aspx สร้าง 404 คุณอาจไม่ได้ติดตั้ง ASP.Net)

หากคุณประสบปัญหาประเภทนี้ให้เปิดไฟล์บันทึกการใช้เว็บของเว็บไซต์และดูรหัสสถานะย่อย (เช่น 404 3) เพื่อพิจารณาว่าทำไมเว็บไซต์ของคุณจึงไม่แสดงเนื้อหาสำหรับ IIS 6 หรือ

  • ใช้การติดตามคำขอที่ล้มเหลว
  • (หรือเพียงแค่ข้อผิดพลาดรายละเอียดในคอนโซลท้องถิ่น)

ใน IIS 7


"caveat" นี้ไม่สมเหตุสมผล: "... ซึ่งหมายความว่า IIS ถือว่าเป็นเนื้อหาที่ใช้งานไม่ใช่ไฟล์คงที่" Web.config ประกาศไฟล์ json เป็นแบบคงที่: <staticContent> <mimeMap fileExtension = ". json" mimeType = "application / json" /> </staticContent>

"IIS จะไม่ให้บริการไฟล์สแตติกที่ไม่มีประเภท MIME ที่เชื่อมโยงกับพวกเขาเว้นแต่ว่าตัวจัดการสคริปต์เชื่อมโยงกับพวกเขา" ยังคงทำงานเป็น (IMO) คำสั่งจริง ในกรณีที่บางคนไม่สามารถให้บริการได้ดูเหมือนว่าพวกเขาไม่มีคำจำกัดความนี้ในไฟล์ปรับแต่งของพวกเขา บางที Windows ของคุณอาจเป็นรุ่นที่ใหม่กว่าหรือไม่
TristanK

1

ฉันมีปัญหานี้ด้วย - และปัญหาก็คือการอนุญาตไฟล์ในโฟลเดอร์ที่เก็บไฟล์ json ผมตอบคำถามที่คล้ายกันที่นี่

คนเหล่านี้ถูกต้องแล้วที่จะบอกว่าคุณต้องเพิ่มประเภท MIME

ชนิด MIME เปิดใช้งานส่วนขยายไฟล์บนเซิร์ฟเวอร์และตัวจัดการการแมปจะบอก IIS ว่าจะทำอย่างไรกับมัน

ดังนั้นคุณต้องเพิ่ม Mapping Handlerและคุณต้องมีฟีเจอร์ Windows ชื่อClassic Asp ติดตั้งเพื่อจัดการการแมป

นี่คือวิธีเพิ่มตัวจัดการการแมป:

  1. เปิดตัวจัดการ IIS7
  2. ไปที่คุณสมบัติสำหรับ IIS Server (หรือเพียงแค่ไซต์ถ้าคุณไม่ต้องการตั้งค่าส่วนกลาง)
  3. คลิกที่ Handler Mappings
  4. คลิกที่ Add a Script Map
  5. ป้อนคุณสมบัติ:
    • เส้นทางคำขอ: *.json
    • ปฏิบัติการ: C:\WINDOWS\system32\inetsrv\asp.dll
    • ชื่อ: JSON(คุณสามารถเรียกมันว่าอะไรก็ได้ที่คุณต้องการ)
  6. คลิกตกลงและเสร็จสิ้น มันควรเริ่มทำงานและคุณไม่จำเป็นต้องรีเซ็ต IIS

นอกจากนี้บางคนจะบอกให้คุณใช้ `แอปพลิเคชัน / x-javascript 'เป็นแอปพลิเคชันประเภท mime แต่ JSON ไม่ใช่ javascript ต่อ se (มันเป็นชุดย่อย) และดังนั้นควรเป็น' application / json 'แทน เนื่องจากเป็นชนิดสื่อบันทึกที่ลงทะเบียนโดย IANA สำหรับ JSON


0

ตรวจสอบคำขอกรองใน IIS หาก ".json" อยู่ที่นั่นและถูกบล็อกจะไม่มีอะไรทำงานอีก

ป้อนคำอธิบายรูปภาพที่นี่

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