API отдыха: передача window.location.href в REST URI - PullRequest
1 голос
/ 25 января 2011

У меня есть api rest, который используется через JSONP из-за проблем с несколькими доменами, я реализовал errorlogger, который перехватывает каждую ошибку, которая происходит на странице, и отправляет ее на сервер, URI для регистратора ошибок выглядит примерно так:

user/{userId}/message/{errorMessage}/browser/{browser}/browserVer/{browserVer}/secure/{secure}/os/{os}/location/{location}"

переменная местоположения проблематична, как я могу передать window.location.href в uri?

я пробовал escape, encodeuri, encodeuricomponent мне нужно base64?спасибо

1 Ответ

0 голосов
/ 26 января 2011

Экранирующая последовательность для URI определена в разделе 2.4.1 RFC2396 (унифицированные идентификаторы ресурса):

An escaped octet is encoded as a character triplet, consisting of the
percent character "%" followed by the two hexadecimal digits
representing the octet code. For example, "%20" is the escaped
encoding for the US-ASCII space character.

   escaped     = "%" hex hex
   hex         = digit | "A" | "B" | "C" | "D" | "E" | "F" |
                         "a" | "b" | "c" | "d" | "e" | "f"

Этот RFC также определяет зарезервированные символы для компонента path в разделе 3.3 :

Within a path segment, the characters "/", ";", "=", and "?" are reserved.

Так что вам нужно использовать encodeURIComponent () , поскольку escape() устарел устарел и encodeURI() не экранирует все зарезервированные символы , которые необходимо экранировать в соответствии с приведенным выше отрывком RFC.

В приведенном ниже примере показано, что только encodeURIComponent() правильно экранирует косые черты (это символы, которые наиболее вероятно вызывают проблемы, с которыми вы сталкиваетесь):

>>> escape('//');
"//"

>>> encodeURI('//');
"//"

>>> encodeURIComponent('//');
"%2F%2F"

Однако обратите внимание, что если возможно, вы должны использовать POST вместо GET . Это правильный метод для использования в REST (и в целом), поскольку вы отправляете данные с клиента на сервер (POST), а не получаете их с сервера (GET).

Использование POST также позволит вам избежать дополнительной проблемы. Поскольку длина URI ограничена на обычных веб-серверах, рано или поздно вы столкнетесь с запросом с очень длинным URI, который либо урезается, либо выдает ошибку. Переключение на POST позволит вам поддерживать чистоту URI и сохранять данные в теле сообщения вместо URI. См. ответы на этот вопрос для получения подробной информации об ограничениях длины URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...