Câu hỏi thú vị. Tất cả các phương thức để loại bỏ response headers
khỏi IIS dường như không hoạt động đối với các tiêu đề Allow
và Public
tiêu đề, một OPTIONS
yê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 OPTIONS
yê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 OPTIONSVerbHandler
bì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 OPTIONS
yê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 OPTIONS
yêu cầu đến máy chủ, bạn sẽ không nhận được một Allow
hay một Public
tiê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 OPTIONS
yê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ỳ GET
hoặc POST
yê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 OPTIONS
cá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.