Câu hỏi thú vị. Tất cả các phương thức để loại bỏ response headerskhỏi IIS dường như không hoạt động đối với các tiêu đề Allowvà Publictiêu đề, một OPTIONSyêu cầu luôn trả về:
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
bất kể những gì máy chủ thực sự cho phép.
Tất cả các yêu cầu trong IIS được xử lý bởi các mô-đun, các OPTIONSyêu cầu được xử lý bởi những ProtocolSupportModuleđiều không cần thiết và vì nó có vẻ khá ngu ngốc.
Nếu chúng tôi xóa mô-đun đó, máy chủ sẽ không phản hồi yêu cầu Tùy chọn nữa mà bạn vẫn muốn hỗ trợ, vì vậy chúng tôi phải sử dụng mô-đun khác để trả lời các mô-đun đó.
Mở:
%SystemRoot%\System32\inetsrv\config\applicationHost.config
và tìm kiếm OPTIONSVerbHandlerbình luận dòng đó và trong khi bạn đang ở đó, một trong những ở trên ( TRACEVerbHandler) là tốt. Bây giờ thêm một nút mới:
<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />
toàn bộ khối sẽ trông như thế này:
<!-- <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> -->
<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />
Bây giờ staticFileModule sẽ xử lý các OPTIONSyêu cầu nhưng nó sẽ không trả về bất kỳ nội dung nào.
Nếu bây giờ bạn thực hiện một OPTIONSyêu cầu đến máy chủ, bạn sẽ không nhận được một Allowhay một Publictiêu đề, bạn có thể thêm chúng một cách dễ dàng trong web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Allow" value="GET,POST,HEAD" />
<add name="Public" value="GET,POST,HEAD" />
</customHeaders>
</httpProtocol>
</system.webServer>
bây giờ các OPTIONSyêu cầu của bạn hoạt động theo yêu cầu, nhưng những tiêu đề bổ sung đó cũng được gửi với bất kỳ GEThoặc POSTyêu cầu nào mà tôi nghĩ vẫn là http hợp lệ.
Nếu bạn chỉ muốn sử dụng các tiêu đề đó cho OPTIONScác yêu cầu, bạn có thể viết mô-đun http đơn giản để đặt các tiêu đề này và sử dụng nó thay vì TĩnhFileModule tôi đã sử dụng ở trên.