IIS: 405 (метод не разрешен) при публикации на странице по умолчанию - PullRequest
3 голосов
/ 25 июня 2010

я хочу POST сформировать данные на странице по умолчанию веб-сервера, например:

POST http://errorreporting.example.com/ HTTP/1.1

я хочу, чтобы сервер отвечал за 302 перенаправление клиента туда, где POST должен идти.Файл default.asp на сервере выполняет эту задачу ( - метод, который Microsoft рекомендует ), выполняя Redirect:

default.asp:

<%
   Response.Redirect "SubmitError.ashx"
%>

Когда я просто просматриваю сервер:

GET http://errorreporting.example.com/ HTTP/1.1

, я получаю ожидаемый ответ от сервера:

HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Location: SubmitError.ashx
...

Но когдая POST на сервер:

POST http://errorreporting.example.com/ HTTP/1.1

Сервер становится очень раздражительным со мной:

HTTP/1.1 405 Method not allowed
Connection: close
Allow: OPTIONS, TRACE, GET, HEAD
...

Я хочу, чтобы сервер мог перенаправить клиент для соответствующей отправки URL вместо жесткого кодирования клиента с URL .Это, конечно, потому что URL мог (то есть изменился):

и т. Д.

Примечание : если яизмените URL, указав местоположение документа:

/* SErrorReportingUrl = 'http://www.example.com:8088/ErrorReporting/SubmitError.ashx';
   SErrorReportingUrl = 'http://www.example.com/ErrorReporting/SubmitError.ashx';
   SErrorReportingUrl = 'http://errorreporting.example.com:8088/ErrorReporting/SubmitError.ashx';
   SErrorReportingUrl = 'http://errorreporting.example.com/SubmitError.ashx';
   SErrorReportingUrl = 'http://errorreporting.example.com';
   SErrorReportingUrl = 'http://errorreporting.example.com/SubmitError.ashx'; 
*/
   SErrorReportingUrl = 'http://errorreporting.example.com/submit/SubmitError.ashx';

Работает нормально:

HTTP/1.1 200 OK

1 Ответ

3 голосов
/ 27 июня 2010

Оказывается, получение IIS для поддержки POST не очень помогает.

Я использую XMLHttpRequest для выполнения POST с.Почти в каждой реализации XMLHttpRequest (, например, Chrome, Internet Explorer, MSXML) есть ошибка, при которой после выполнения перенаправления выполняется GET вместо POST.

Спецификация W3C XMLHttpReqest говорит, что перенаправления должны выполняться, а запросы перевыпускаются:

Если ответ является перенаправлением HTTP:

Если редирект делаетне нарушать безопасность (например, того же источника ), меры предосторожности для бесконечного цикла и поддерживаемую схему, прозрачно следовать перенаправлению при соблюдении правил событий запроса того же источника .

Примечание. HTTP устанавливает требования к пользовательскому агенту в отношении сохранения метода запроса и тела объекта запроса во время перенаправлений, а также требует, чтобы конечные пользователи были уведомлены об определенных видах автоматических перенаправлений.

И вот сайт , где вы можете проверить ошибку вреализация вашего браузера XmlHttpRequest.


В конце я исправлю ошибку IIS и ошибку XMLHttpRequest, выполнив мою страницу по умолчаниювсе, что 302 redirect будет, но вернет 200 OK вместо:

HTTP/1.1200 OK
Connection: close
Date: Sun, 27 Jun 2010 13:28:14 GMT
Server: Microsoft-IIS/6.0
Location: http://errorreporting.example.com/submit/SubmitError.ashx
Content-Length: 92
Content-Type: text/html
Cache-control: private

<HTML><BODY>This content has moved <A href="submit/SubmitError.ashx">here.</A></BODY></HTML>

Я заставляюв любом случае, клиент должен сделать два попадания - с тем же успехом он может работать правильно.

...