IIS không thể phục vụ phần mở rộng tập tin nhất định


10

Tôi đang phục vụ các tệp .JSON, nhưng ngay cả khi tệp tồn tại, IIS vẫn liên tục xuất hiện lỗi 404 khi bất kỳ tệp nào được truy cập. Tôi đã thử đổi tên một trong các tệp thành .JS và nó hoạt động.

Bất kỳ con trỏ cài đặt nào có thể gây ra vấn đề này?

Câu trả lời:


21

Theo mặc định, IIS trong W2K3 trở lên sẽ không phục vụ các tệp không thuộc loại MIME mà nó biết (thay vào đó trả về lỗi 404).

Bạn cần thêm một loại MIME vào IIS để cho phép nó phục vụ loại tệp đó. Bạn có thể đặt nó ở cấp trang web hoặc ở cấp máy chủ.

Để đặt cái này cho toàn bộ máy chủ:

  • Mở các thuộc tính cho máy chủ trong IIS Manager và bấm MIME Type
  • Nhấp vào "Mới". Nhập "JSON" cho tiện ích mở rộng và "application / json" cho loại MIME.

Tôi thêm một loại MIME mới, khởi động lại trang web, nhưng vẫn 404. Dù sao cũng cảm ơn, tôi nghĩ đây có thể là một trong những vấn đề.
Adrian Godong

Hừm. Kiểm tra kỹ những gì bạn đã thay đổi. Triệu chứng "đổi tên tệp và nó hoạt động" là chỉ báo kinh điển của hành vi này.
Evan Anderson

Ba kiểm tra nó. Tôi cho rằng bạn không cần phải khởi động lại toàn bộ máy chủ, phải không?
Adrian Godong

Hmm ... Tôi đang cố gắng nói cho bạn biết phải làm gì. Tôi vừa tự làm điều đó trong một VM sạch của Windows Server 2003 SP2. Tôi đã cài đặt IIS, tạo tệp "foo.json" trong "C: \ inetpub \ wwwroot", xác minh rằng tôi đã nhận được 404 khi tôi nhấn " localhost / foo.json " trong trình duyệt, đã thêm loại MIME cho ".JSON "/" application / json "vào trang web, sau đó đi đến cửa sổ IE vẫn đang mở của tôi và nhấn F5 và thấy tải trang. Tôi nghĩ rằng bạn cũng có một cái gì đó khác chơi.
Evan Anderson

1
Tôi cũng cần đảm bảo Tiện ích mở rộng dịch vụ web đã được bật để giúp tôi làm việc này ...
gandalf 14/11/11

3

Tôi đã từng gặp vấn đề tương tự. IIS thực hiện một cái gì đó gọi là lọc kiểu MIME. Nếu nó không biết loại MIME của phần mở rộng tệp cụ thể, nó sẽ trả về lỗi 404.

Trên IIS <7: Mở thuộc tính trang web (hoặc máy chủ). Nhấp vào tab HTTP-Header . Nhấp vào nút MIME . Thêm loại tệp * với loại MIME "application / octet-stream".

Đối với IIS 7: Mở trình quản lý IIS. Nhấp vào máy chủ hoặc trang web. Bấm đúp vào biểu tượng tính năng MIME Forms . Trong ngăn Hành động, bấm Thêm . Điền vào hộp "Mở rộng tên tệp" bằng * và hộp MIME Type với "application / octet-stream".


2

Tôi đã thêm loại MIME .json- text/jsonvào trang web trong IIS để xem trong trình duyệt dưới dạng văn bản.


ĐIỀU NÀY! ĐIỀU NÀY! Điều này!
Tschallacka

1

Để hợp nhất các câu trả lời thành một câu trả lời chung hơn:

Đây là lời cảnh báo:

  • Trừ khi trình xử lý tập lệnh (công cụ nội dung hoạt động, ví dụ: ASP / ASPX / PHP / Java / ISAPI / etc) được liên kết với chúng
    • điều này có nghĩa là IIS coi chúng là nội dung hoạt động , không phải tệp tĩnh
  • Các tệp nội dung hoạt động được cung cấp bởi bất kỳ tiện ích mở rộng nào đều phải có tiện ích mở rộng đó được cho phép trong danh sách hạn chế Tiện ích mở rộng dịch vụ web (còn gọi là hạn chế ISAPI / CGI trong IIS 7)
    • nếu bạn nhận được 404 trên loại nội dung hoạt động trong IIS 7, điều đó cũng có nghĩa là trình xử lý của bạn chưa được cài đặt - vì vậy bạn thực sự cần phải cài đặt thành phần hỗ trợ phần mở rộng tệp đó (ví dụ: nếu tệp .aspx tạo ra một 404, có lẽ bạn chưa cài đặt ASP.Net)

Nếu bạn đang gặp phải loại sự cố này, hãy mở tệp nhật ký web của trang web và xem mã trạng thái phụ (ví dụ 404 3) để xác định chính xác lý do tại sao trang web của bạn không phục vụ nội dung cho IIS 6 hoặc

  • sử dụng theo dõi yêu cầu thất bại
  • (hoặc chỉ các lỗi chi tiết trên bảng điều khiển cục bộ)

trong IIS 7.


"Thông báo trước" này không có nghĩa gì: "... điều này có nghĩa là IIS coi chúng là nội dung hoạt động, không phải tệp tĩnh" Web.config tuyên bố các tệp json là tĩnh: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </ staticContent>

"IIS sẽ không phục vụ các tệp tĩnh không có loại MIME được liên kết với chúng trừ khi trình xử lý tập lệnh được liên kết với chúng" vẫn hoạt động như (IMO) một tuyên bố đúng. Trong trường hợp ai đó không thể phục vụ họ, có vẻ như họ không có định nghĩa này trong các tệp cấu hình của họ ở bất cứ đâu. Có lẽ bản sao Windows của bạn gần đây hơn bản sao của họ?
TristanK

1

Tôi cũng gặp vấn đề này - và vấn đề hóa ra là quyền của tệp trên thư mục nơi tệp json được lưu trữ. Tôi đã trả lời một câu hỏi tương tự ở đây .

Những người này đều đúng khi nói bạn cần thêm loại MIME.

Kiểu MIME cho phép mở rộng tệp trên máy chủ và Trình xử lý ánh xạ cho IIS biết phải làm gì với nó.

Vì vậy, bạn cũng phải thêm Trình xử lý ánh xạ và bạn phải cài đặt Tính năng Windows có tên Classic Asp để xử lý ánh xạ.

Dưới đây là cách thêm Trình xử lý ánh xạ:

  1. Mở Trình quản lý IIS7
  2. Chuyển đến các thuộc tính cho IIS Server (hoặc chỉ trang web, nếu bạn không muốn cài đặt toàn cầu)
  3. Bấm vào Handler Mappings
  4. Bấm vào Add a Script Map
  5. Nhập các thuộc tính:
    • Đường dẫn yêu cầu: *.json
    • Thực thi: C:\WINDOWS\system32\inetsrv\asp.dll
    • Tên: JSON(bạn có thể gọi nó là bất cứ điều gì bạn thích)
  6. Nhấn OK, và bạn đã hoàn thành. Nó sẽ bắt đầu hoạt động và bạn không cần thiết lập lại IIS.

Ngoài ra, một số người sẽ cho bạn biết để sử dụng `application / x-javascript' như các ứng dụng mime-type, nhưng JSON không phải là javascript, cho mỗi gia nhập (nó một tập hợp con, tuy nhiên) và do đó nó phải được 'application / json' thay , vì đó là loại phương tiện đã đăng ký IANA cho JSON.


0

Đồng thời kiểm tra Lọc yêu cầu trong IIS. Nếu ".json" ở đó và bị chặn, không có gì khác sẽ hoạt động.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.