Переадресация URL и по-прежнему возвращает 200, а не 302 в ASPX - PullRequest
0 голосов
/ 28 октября 2008

Я хочу, чтобы эта страница возвращала 200 при отправке перенаправления ...

<script>
    sub page_load
        'Get the parameters
         dim content As String
         content = request.querystring("text")
         response.redirect ("http://100.200.100.10/test1/Default.aspx?CommandParm=" + content)
    end sub
</script>
<html>
    <head>
    </head>
    <body>
        <form runat="server">
        </form>
    </body>
</html>

Ответы [ 4 ]

2 голосов
/ 28 октября 2008

@ eyelidlessness @

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

Учитывая это, попробуйте META обновление , например,

<meta http-equiv="refresh" content="5;url=http://example.com/"/>

и вставьте сообщение, объясняющее, что происходит с незадачливым пользователем, который попадает на эту страницу.

Я, вероятно, не объяснил себя при публикации вопроса. Это на самом деле транзакция B2B. Там нет конечного пользователя с браузером. Третья сторона отправляет HTTP GET. Все, что мы хотим сделать, это переслать это как легитимную транзакцию.

Тогда вам следует отправить 301 или 302 - это именно то, для чего они были предназначены.

1 голос
/ 03 ноября 2008

Вы не можете иметь и то и другое: перенаправление и статус 200.

RFC2616 говорит о код состояния 200 :

10.2.1 200 OK

Запрос успешно выполнен. Информация, возвращаемая с ответом, зависит от метода, используемого в запросе, например:

  • GET : объект, соответствующий запрашиваемому ресурсу, отправляется в ответе;
  • HEAD : поля заголовка объекта, соответствующие запрашиваемому ресурсу, отправляются в ответе без тела сообщения;
  • POST : объект, описывающий или содержащий результат действия;
  • TRACE : объект, содержащий сообщение запроса, полученное конечным сервером.

Так что нет места для перенаправления, кроме отправки некоторого контента, который интерпретируется пользовательским агентом, например JavaScript для браузера.

И это часть в спецификации, которая говорит о перенаправлении с использованием кодов состояния 301, 302 или 303:

10.3.2 301 постоянно перемещено

Запрошенному ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс ДОЛЖНЫ использовать один из возвращенных URI. Клиенты с возможностями редактирования ссылок должны автоматически связывать ссылки на Request-URI с одной или несколькими новыми ссылками, возвращаемыми сервером, где это возможно. Этот ответ кэшируется, если не указано иное.

Новый постоянный URI ДОЛЖЕН быть задан в поле Location в ответе. Если метод запроса не является HEAD, объект ответа ДОЛЖЕН содержать краткую гипертекстовую заметку с гиперссылкой на новый URI.

Если код состояния 301 получен в ответ на запрос, отличный от GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, поскольку это может изменить условия, при которых запрос был выдано.

Примечание. При автоматическом перенаправлении запроса POST после получения кода состояния 301 некоторые существующие пользовательские агенты HTTP / 1.0 по ошибке изменят его на запрос GET.

10.3.3 302 Найдено

Запрашиваемый ресурс временно находится под другим URI. Поскольку перенаправление может иногда изменяться, клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов. Этот ответ может быть кэширован только в том случае, если он указан в поле заголовка Cache-Control или Expires.

Временный URI ДОЛЖЕН быть задан полем Location в ответе. Если метод запроса не является HEAD, объект ответа ДОЛЖЕН содержать короткую гипертекстовую заметку с гиперссылкой на новый URI.

Если код состояния 302 получен в ответ на запрос, отличный от GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, поскольку это может изменить условия, при которых запрос был выдано.

Примечание. RFC 1945 и RFC 2068 указывают, что клиенту не разрешено изменять метод в перенаправленном запросе. Однако большинство существующих реализаций пользовательского агента обрабатывают 302 так, как если бы это был ответ 303, выполняя GET для значения поля Location независимо от исходного метода запроса. Коды состояния 303 и 307 были добавлены для серверов, которые хотят однозначно прояснить, какой тип реакции ожидается от клиента.

10.3.4 303 См. Другое

Ответ на запрос может быть найден под другим URI и ДОЛЖЕН быть получен с использованием метода GET для этого ресурса. Этот метод существует главным образом, чтобы позволить выводу сценария, активированного POST, перенаправить пользовательский агент на выбранный ресурс. Новый URI не является заменой ссылки на первоначально запрошенный ресурс. Ответ 303 НЕ ДОЛЖЕН кэшироваться, но ответ на второй (перенаправленный) запрос может быть кэширован.

Другой URI ДОЛЖЕН быть задан в поле Location в ответе. Если метод запроса не является HEAD, объект ответа ДОЛЖЕН содержать краткую гипертекстовую заметку с гиперссылкой на новый URI.

Примечание. Многие пользовательские агенты до HTTP / 1.1 не понимают состояние 303. Когда возникает проблема взаимодействия с такими клиентами, вместо этого может использоваться код состояния 302, поскольку большинство пользовательских агентов реагируют на ответ 302, как описано здесь для 303.

1 голос
/ 28 октября 2008

Вы можете перенаправить эту страницу с помощью javascript

Во-первых, создайте динамический JavaScript, сделав следующую строку

<script type"text/javascript">
<!--
function redirect()
{
   window.location = "http://100.200.100.10/test1/Default.aspx?CommandParm=" + content
}
//-->
</script>

Во-вторых, добавьте javascript в заголовок текущей страницы.

Затем добавьте javascript к телу

mybody.Attributes.Add("onload", "redirect()");

Когда вы просматриваете текущую страницу, она вернет вам HTTP 200, и после того, как событие onload сработает, браузер вызовет redirect (), и ваш обзор будет на целевой странице.

Просто любопытно, зачем тебе это?!

0 голосов
/ 28 октября 2008

Нельзя с Response.Redirect(). Я думаю. Может быть, установка Response.Status = "200 OK" после вызова Redirect() работает, я никогда не пробовал.

Вы можете подделать его, установив заголовок «Местоположение» вручную в другом пустом ответе. Не уверен, что это хорошо, хотя. ; -)

Response.AddHeader("Location", "http://100.200.100.10/test1/Default.aspx?CommandParm=" + content)
Response.End()

(И, для записи: вы бы создали недопустимое созвездие заголовка HTTP. Не должно ничего ломать, но все же.)

...