При прохождении через прокси-сервер (A) любые самореференциальные ссылки, отправленные с сервера приложений (B), необходимо переписать для использования вместо прокси-сервера.Соответствует содержимому в теге из ответа, отличного от HTML, в URL Rewrite
Вот пример:
Ответ (B) содержит: <a href="http://apps/path">path</a>
прокси (А) должен переписать следующим образом: <a href="http://proxy/path">path</a>
Обычно это делается путем создания исходящего правила, который проверяет HTML ответов для тегов, содержащих URL-адреса, ищет ссылки на сервер приложений и переписывает их.
Вот нормальное правилоGUI version:
<outboundRules>
<rule name="Outbound Links" preCondition="IsHTML" enabled="true">
<match filterByTags="A, Form, IFrame, Img, Input, Link, Script" pattern="(https?:\/\/proxy|^)\/(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
<action type="Rewrite" value="http://apps/{R:2}" />
</rule>
Где IsHTML
определяется как:
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="text\/html" />
</preCondition>
Проблема в том, что некоторые из содержания страницы возвращается через запрос XHR. В минимальном случае это не соответствует предварительным условиям HTML.
, но я могу расширить правило, также включают в себя тип контента из xhr
Однако URL Rewrite все еще имеет проблемы разбора возвращаемый текст в тег, поскольку он не является допустимой HTML.
Вот пример того, что ответ выглядит следующим образом:
|6383|updatePanel|ctl00_mainContentPlaceHolder_contentUpdatePanel|
<div id="ctl00_mainContentPlaceHolder_resultsPanel">
<a href="http://apps/path">path</a>
</div>
...
|0|hiddenField|__EVENTTARGET||0|hiddenField|__EVENTARGUMENT||0|hiddenField|
Однако, когда я делаю это, я получаю ошибку:
Sys.WebForms.PageRequestManagerParserErrorException:
The message received from the server could not be parsed.