По просьбе клиента: «По просьбе» запятая – выделяется или нет, где нужно ставить?
по просьбе клиента — это… Что такое по просьбе клиента?
- по просьбе клиента
Business: upon request of customer
Универсальный русско-английский словарь.
Академик.ру.
2011.
- по просьбе
- по просьбе кого либо
Смотреть что такое «по просьбе клиента» в других словарях:
ЗАКОН ОБ ЭЛЕКТРОННОЙ СИСТЕМЕ ПЕРЕВОДА ПЛАТЕЖЕЙ — ELECTRONIC FUND TRANSFER ACTРаздел ХХ ЗАКОНА О КОНТРОЛЕ ЗА РЕГУЛИРОВАНИЕМ ФИНАНСОВЫХ УЧРЕЖДЕНИЙ И ПРОЦЕНТНЫХ СТАВОК 1978 г., подписанный президентом 10 ноября 1978 г. (P.L., 95 630). Вступил в силу 1,5 года спустя после принятия, за исключением… … Энциклопедия банковского дела и финансов
Сбербанк России — (Sberbank of Russia) Сбербанк России, история банка, деятельность банка Сбербанк России, история банка, деятельность банка, руководство банка Содержание Содержание Сберба́нк Росси́и Собственники и руководство Деятельность… … Энциклопедия инвестора
Банковский чек — (Bank check) Определение банковского чека, виды чеков, содержание чека Информация об определении банковского чека, виды чеков, содержание чека Содержание Содержание Определение Виды и Понятие и юридическая природа чека Содержание чека Отношения… … Энциклопедия инвестора
заказ — сущ., м., употр. сравн. часто Морфология: (нет) чего? заказа, чему? заказу, (вижу) что? заказ, чем? заказом, о чём? о заказе; мн. что? заказы, (нет) чего? заказов, чему? заказам, (вижу) что? заказы, чем? заказами, о чём? о заказах 1. Заказом… … Толковый словарь Дмитриева
Тратта — (Tratta) Тратта это документ, использующийся главным образом врасчетах по внешней торговле Тратта это письменный приказ одного лица трассанта другому лицу трассату уплатить определенную суммы денег третьему лицу; переводный вексель. Содержание… … Энциклопедия инвестора
банковская гарантия — Способ обеспечения исполнения обязательств, при котором банк, иное кредитное учреждение или страховая организация (гарант) дают по просьбе другого лица (принципала) письменное обязательство уплатить кредитору принципала (бенефициару) в… … Справочник технического переводчика
МЕЖДУНАРОДНЫЕ РАСЧЕТЫ — (англ. international settlements) – регулирование платежей по денежным требованиям и обязательствам, возникающим в связи с экономическими, политическими и культурными отношениями между юридическими лицами и гражданами разных стран. М.р. включают… … Финансово-кредитный энциклопедический словарь
Аккредитив — – обязательство банка, предоставляемое по просьбе клиента, заплатить третьему лицу при предоставлении получателем платежа в банк, исполняющий аккредитив, документов, предусмотренных условиями аккредитива. Компанию клиента, по поручению которой… … Банковская энциклопедия
Дефицит — (Deficit) Термин, означающий недостачу, недостаточность Превышение объёма импорта над объёмом экспорта; недостаток, нехватка чего либо Содержание Содержание Определение Товарный Дефицит в СССР Внутренние источники Внешние источники Требования к… … Энциклопедия инвестора
БАНКОВСКАЯ ТРАТТА — переводный вексель, где векселедателем и плательщиком выступает один и тот же банк. Б.т. инструмент расчетов, который по степени ликвидности близок к наличным деньгам. Она не является чеком, так как здесь векселедатель и плательщик одно и то же… … Юридический словарь
Кассирский чек — чек, выписанный банком по просьбе клиента от имени банка и обеспечивающий выплату обозначенной в чеке суммы получателю. По английски: Cashiers check См. также: Банковские чеки Финансовый словарь Финам … Финансовый словарь
Книги
- Бойд слишком быстр, Картер Браун. Брутальный и обаятельный сыщик Дэнни Бойд берется за дело с большой охотой, если в качестве клиента выступает красивая молодая женщина. Он не может отказать красотке Луизе д’Авенди в просьбе… Подробнее Купить за 129 руб электронная книга
- Кто последний к маньяку?, Марина Серова. Серия убийств, совершенных, как предполагает милиция, одним и тем же человеком, лихорадит город. Все погибшие — молодые богатые женщины. Кто этот маньяк-убийца? И кто будет очередной жертвой?… Подробнее Купить за 99.8 руб электронная книга
Предложения со словосочетанием ПРОСЬБА КЛИЕНТА
Вы продали себя, клиент вам верит, продали компанию, клиент хочет с ней работать, презентовали свой продукт, но при первой же просьбе клиента дать скидку вы легко снижаете цену.
Официант может обратиться к метрдотелю или администрации ресторана во всех случаях, когда он самостоятельно не может принять меры по разрешению жалоб, пресечению конфликтов или удовлетворения просьб клиентов.
Но по просьбе клиента размещается яхта на фоне голубого неба.
Выполнив её по полной программе, удовлетворив просьбу клиента и утешив собственное самолюбие, я снова на какое-то время погружалась в отдых.
Она не могла игнорировать просьбы клиентов и коллег, но на их выполнение уходило всё свободное время.
Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать
Карту слов. Я отлично
умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!
Спасибо! Я обязательно научусь отличать широко распространённые слова от узкоспециальных.
Насколько понятно значение слова погасить (глагол), погасил:
Кристально
понятно
Понятно
в общих чертах
Могу только
догадываться
Понятия не имею,
что это
Другое
Пропустить
Она ничуть не удивилась просьбе клиента, в её лице на мгновение мелькнуло что-то хищное и самодовольное.
Он охотно прочитал просьбы клиента и принялся выполнять работу, уйдя в неё с головой.
Чтобы сберечь ресурс электрического бензонасоса, мастер по просьбе клиента устанавливал дополнительное реле, с помощью которого разрывал питание бензонасоса.
До гнёта со стороны гентас он был алхимиком, и его помощь базировалась на самых разных просьбах клиентов.
Хмурый водитель автомобиля, арендованного заранее в одной из лучших столичных фирм, безропотно выполнил просьбу клиента.
Таксист довёз мужчину до «Шереметьево», а сам поспешил в магазин исполнять просьбу клиента, так как тот не поскупился и хорошо оплатил услугу.
В общем, по просьбе клиента наблюдение сняли.
В отделении они меня внимательно выслушали. Пришлось, конечно же, выложить, что по просьбе клиента вела наблюдение за объектом.
Просьба клиента закон, и менестрель взял новый аккорд.
Мне ничего не оставалось, как по просьбе клиентов ознакомиться с текстом указа.
– Да-да! Конечно! – я быстро царапала карандашом в блокноте, стараясь расслышать утопавшие в общем гомоне просьбы клиентов.
– Я так не работаю, я сначала выслушиваю просьбу клиента, а потом принимаю решение – браться за дело или нет.
Ну, и вообще выполняю всяческие просьбы клиентов.
Вот и сейчас просьба клиента не была особо трудновыполнимой.
То есть, перед рассмотрением сути просьбы клиента, врач должен поговорить с ним на общие темы, используя метод аудиовизуальной диагностики.
Можно наложить на договор по просьбе клиентов ментальные чары – тогда нарушение будет ощущаться ими как сильнейшая фобия.
Как раз перед отъездом ей приходится выполнять необычную просьбу клиента: провести его день рождения в стиле японских самураев.
По просьбе клиентов администратор охотно организует ужин – накрывает на стол закуску, выпивку.
Унижениям к тому же напрасным, потому что администраторша с плохо скрываемым злорадством сообщила мне, что с недавних пор «по многочисленным просьбам клиентов» отель принимает исключительно некурящих, – да, на их сайте это ещё не объявлено, о чём она сожалеет.
В холодное же время ограничивалась уборкой; иногда, по слухам, с предоставлением дополнительных услуг; но это последнее, однако, исключительно по специальной просьбе клиента.
Но лицо парня вытянулось, он был ужасно огорчён тем обстоятельством, что не может удовлетворить просьбу клиента.
После первой фразы на венгерском языке бармен только поднял на меня глаза и, не торопясь выполнить просьбу клиента, продолжал протирать бокал бумажной салфеткой.
Официант, как раз успевший немного задремать, вздрогнул и, бросив нескрываемо злой взгляд на мужчину, потянулся, было, к бару, намереваясь исполнить просьбу клиента… однако, внезапный приступ ярости помешал ему это сделать.
по просьбе клиента — с английского на русский
См. также в других словарях:
ЗАКОН ОБ ЭЛЕКТРОННОЙ СИСТЕМЕ ПЕРЕВОДА ПЛАТЕЖЕЙ — ELECTRONIC FUND TRANSFER ACTРаздел ХХ ЗАКОНА О КОНТРОЛЕ ЗА РЕГУЛИРОВАНИЕМ ФИНАНСОВЫХ УЧРЕЖДЕНИЙ И ПРОЦЕНТНЫХ СТАВОК 1978 г., подписанный президентом 10 ноября 1978 г. (P.L., 95 630). Вступил в силу 1,5 года спустя после принятия, за исключением… … Энциклопедия банковского дела и финансов
Сбербанк России — (Sberbank of Russia) Сбербанк России, история банка, деятельность банка Сбербанк России, история банка, деятельность банка, руководство банка Содержание Содержание Сберба́нк Росси́и Собственники и руководство Деятельность… … Энциклопедия инвестора
Банковский чек — (Bank check) Определение банковского чека, виды чеков, содержание чека Информация об определении банковского чека, виды чеков, содержание чека Содержание Содержание Определение Виды и Понятие и юридическая природа чека Содержание чека Отношения… … Энциклопедия инвестора
заказ — сущ., м., употр. сравн. часто Морфология: (нет) чего? заказа, чему? заказу, (вижу) что? заказ, чем? заказом, о чём? о заказе; мн. что? заказы, (нет) чего? заказов, чему? заказам, (вижу) что? заказы, чем? заказами, о чём? о заказах 1. Заказом… … Толковый словарь Дмитриева
Тратта — (Tratta) Тратта это документ, использующийся главным образом врасчетах по внешней торговле Тратта это письменный приказ одного лица трассанта другому лицу трассату уплатить определенную суммы денег третьему лицу; переводный вексель. Содержание… … Энциклопедия инвестора
банковская гарантия — Способ обеспечения исполнения обязательств, при котором банк, иное кредитное учреждение или страховая организация (гарант) дают по просьбе другого лица (принципала) письменное обязательство уплатить кредитору принципала (бенефициару) в… … Справочник технического переводчика
МЕЖДУНАРОДНЫЕ РАСЧЕТЫ — (англ. international settlements) – регулирование платежей по денежным требованиям и обязательствам, возникающим в связи с экономическими, политическими и культурными отношениями между юридическими лицами и гражданами разных стран. М.р. включают… … Финансово-кредитный энциклопедический словарь
Аккредитив — – обязательство банка, предоставляемое по просьбе клиента, заплатить третьему лицу при предоставлении получателем платежа в банк, исполняющий аккредитив, документов, предусмотренных условиями аккредитива. Компанию клиента, по поручению которой… … Банковская энциклопедия
Дефицит — (Deficit) Термин, означающий недостачу, недостаточность Превышение объёма импорта над объёмом экспорта; недостаток, нехватка чего либо Содержание Содержание Определение Товарный Дефицит в СССР Внутренние источники Внешние источники Требования к… … Энциклопедия инвестора
БАНКОВСКАЯ ТРАТТА — переводный вексель, где векселедателем и плательщиком выступает один и тот же банк. Б.т. инструмент расчетов, который по степени ликвидности близок к наличным деньгам. Она не является чеком, так как здесь векселедатель и плательщик одно и то же… … Юридический словарь
Кассирский чек — чек, выписанный банком по просьбе клиента от имени банка и обеспечивающий выплату обозначенной в чеке суммы получателю. По английски: Cashiers check См. также: Банковские чеки Финансовый словарь Финам … Финансовый словарь
Книги
- Бойд слишком быстр, Картер Браун. Брутальный и обаятельный сыщик Дэнни Бойд берется за дело с большой охотой, если в качестве клиента выступает красивая молодая женщина. Он не может отказать красотке Луизе д’Авенди в просьбе… Подробнее Купить за 129 руб электронная книга
- Кто последний к маньяку?, Марина Серова. Серия убийств, совершенных, как предполагает милиция, одним и тем же человеком, лихорадит город. Все погибшие — молодые богатые женщины. Кто этот маньяк-убийца? И кто будет очередной жертвой?… Подробнее Купить за 99.8 руб электронная книга
по просьбе клиента — с русского на английский
См. также в других словарях:
ЗАКОН ОБ ЭЛЕКТРОННОЙ СИСТЕМЕ ПЕРЕВОДА ПЛАТЕЖЕЙ — ELECTRONIC FUND TRANSFER ACTРаздел ХХ ЗАКОНА О КОНТРОЛЕ ЗА РЕГУЛИРОВАНИЕМ ФИНАНСОВЫХ УЧРЕЖДЕНИЙ И ПРОЦЕНТНЫХ СТАВОК 1978 г., подписанный президентом 10 ноября 1978 г. (P.L., 95 630). Вступил в силу 1,5 года спустя после принятия, за исключением… … Энциклопедия банковского дела и финансов
Сбербанк России — (Sberbank of Russia) Сбербанк России, история банка, деятельность банка Сбербанк России, история банка, деятельность банка, руководство банка Содержание Содержание Сберба́нк Росси́и Собственники и руководство Деятельность… … Энциклопедия инвестора
Банковский чек — (Bank check) Определение банковского чека, виды чеков, содержание чека Информация об определении банковского чека, виды чеков, содержание чека Содержание Содержание Определение Виды и Понятие и юридическая природа чека Содержание чека Отношения… … Энциклопедия инвестора
заказ — сущ., м., употр. сравн. часто Морфология: (нет) чего? заказа, чему? заказу, (вижу) что? заказ, чем? заказом, о чём? о заказе; мн. что? заказы, (нет) чего? заказов, чему? заказам, (вижу) что? заказы, чем? заказами, о чём? о заказах 1. Заказом… … Толковый словарь Дмитриева
Тратта — (Tratta) Тратта это документ, использующийся главным образом врасчетах по внешней торговле Тратта это письменный приказ одного лица трассанта другому лицу трассату уплатить определенную суммы денег третьему лицу; переводный вексель. Содержание… … Энциклопедия инвестора
банковская гарантия — Способ обеспечения исполнения обязательств, при котором банк, иное кредитное учреждение или страховая организация (гарант) дают по просьбе другого лица (принципала) письменное обязательство уплатить кредитору принципала (бенефициару) в… … Справочник технического переводчика
МЕЖДУНАРОДНЫЕ РАСЧЕТЫ — (англ. international settlements) – регулирование платежей по денежным требованиям и обязательствам, возникающим в связи с экономическими, политическими и культурными отношениями между юридическими лицами и гражданами разных стран. М.р. включают… … Финансово-кредитный энциклопедический словарь
Аккредитив — – обязательство банка, предоставляемое по просьбе клиента, заплатить третьему лицу при предоставлении получателем платежа в банк, исполняющий аккредитив, документов, предусмотренных условиями аккредитива. Компанию клиента, по поручению которой… … Банковская энциклопедия
Дефицит — (Deficit) Термин, означающий недостачу, недостаточность Превышение объёма импорта над объёмом экспорта; недостаток, нехватка чего либо Содержание Содержание Определение Товарный Дефицит в СССР Внутренние источники Внешние источники Требования к… … Энциклопедия инвестора
БАНКОВСКАЯ ТРАТТА — переводный вексель, где векселедателем и плательщиком выступает один и тот же банк. Б.т. инструмент расчетов, который по степени ликвидности близок к наличным деньгам. Она не является чеком, так как здесь векселедатель и плательщик одно и то же… … Юридический словарь
Кассирский чек — чек, выписанный банком по просьбе клиента от имени банка и обеспечивающий выплату обозначенной в чеке суммы получателю. По английски: Cashiers check См. также: Банковские чеки Финансовый словарь Финам … Финансовый словарь
Книги
- Бойд слишком быстр, Картер Браун. Брутальный и обаятельный сыщик Дэнни Бойд берется за дело с большой охотой, если в качестве клиента выступает красивая молодая женщина. Он не может отказать красотке Луизе д’Авенди в просьбе… Подробнее Купить за 129 руб электронная книга
- Кто последний к маньяку?, Марина Серова. Серия убийств, совершенных, как предполагает милиция, одним и тем же человеком, лихорадит город. Все погибшие — молодые богатые женщины. Кто этот маньяк-убийца? И кто будет очередной жертвой?… Подробнее Купить за 99.8 руб электронная книга
по просьбе клиента — Перевод на английский — примеры русский
На основании Вашего запроса эти примеры могут содержать грубую лексику.
На основании Вашего запроса эти примеры могут содержать разговорную лексику.
Дата выполнения следующего задания перенесена по просьбе клиента.
Нарушение правил дорожного движения по просьбе клиента не допускается.
Новый номер не указывается по просьбе клиента.
Я уничтожил его по просьбе клиента.
Некоторые девушки получают работу в барах и ресторанах, где, как правило, предполагается, что по просьбе клиента могут быть предоставлены и иные услуги.
Some girls are given work in bars and restaurants which is mostly based on the understanding that other services are also made available at the client’s request.
Доставка в выходные и праздничные дни — эта услуга позволяет, по просьбе клиента, доставить груз в выходные или праздничные дни.
Weekend & Holidays — This service allows for goods to be delivered on weekends and holidays upon special request.
После урегулирования всех требований, возникающих в связи с контрактом, фирма «Wirtschaftsprüfer» по просьбе клиента обязана вернуть все подтверждающие документы и записи, полученные от клиента или от его имени в порядке выполнения контракта.
After the settlement of his claims arising from the engagement, the Wirtschaftsprüfer, upon the request of the client, must return all supporting documents and records obtained from him or for him by reason of his work on the engagement.
Пример 1-8: Юрист, бухгалтер или иной специалист по просьбе клиента подготавливает документы, касающиеся сделки, сведений относительно которой этот специалист не имеет или которую он не понимает и которая лишена экономического или какого-либо другого смысла.
Illustration 1-8: A lawyer, accountant or other professional prepares documents at the request of a client regarding a transaction that the professional does not inquire into or does not understand, and that does not make economic or other sense.
Ь) по инструкции другого банка, учреждения или лица («инструктирующей стороны»), действующего по просьбе клиента («принципала/приказодателя») этой инструктирующей стороны; или
(b) On the instruction of another bank, institution or person («instructing party») that acts at the request of the customer («principal/ applicant») of that instructing party; or
По просьбе клиента можно обеспечить съёмки и в Европе.
По просьбе клиента можно организовать любые дополнительные съёмки.
Any additional coverage can be arranged.
Если автомобиль находится в работе более десяти часов, то на каждый последующий час, мы можем по просьбе Клиента, предоставить скидку 20 % — если данная аренда автомобиля укладывается в одновременный заказ и длится не более 24 часов.
If the car works more than ten hours we can give the 20 % discount on each next hour, under the request of the Client — of course if this rent of the car is within the concurrent order and it lasts not more than 24 hours.
Заверение переводов делается по просьбе клиента, для этого мы всегда сотрудничаем с общественными нотариусами.
В случае изменения объема работ, по нашей просьбе или по просьбе клиента цена услуг пересчитывается.
In case of the changes in scope of activity, the price is recalculated by our or client’s demand.
Спектр наших услуг включает работу с внутренним транспортом, доставку грузов со склада до конечных получателей, хранение грузов, комплектование заказов на груз, дополнительные услуги по просьбе клиента.
После урегулирования всех требований, возникающих в связи с контрактом, фирма «Wirtschaftsprüfer» по просьбе клиента обязана вернуть все подтверждающие документы и записи, полученные от клиента или от его имени в порядке выполнения контракта.
As a result of the above described procedures and excluding the impacts from exchange rate fluctuations in 2003, we noted minor overexpenditures within single budget lines.
Предложить пример
Другие результаты
По просьбе клиентов мы постоянно добавляем новые валютные пары.
Дополнительные футболки, плакаты, листовки и транспаранты были выпущены по просьбе клиентов
Делегации интересовались причинами отступления от правила, предусматривающего шестинедельный срок выпуска документов, но их заверили, что это делалось по просьбам клиентов.
Delegations queried the reasons for departures from the six-week document issuance rule but were assured that it responded to client requests.
Первоначально задуманная только для переводческой деятельности, компания в очень короткое время переросла во многоотраслевой бизнес, и продолжает развивать новые виды услуг по просьбе клиентов.
Initially conceived as a solely translating/interpreting operation, the company in a very short time has grown into a multi-service business, and still adding new services per customer demand.
по просьбе клиентов — Translation into English — examples Russian
These examples may contain rude words based on your search.
These examples may contain colloquial words based on your search.
Дополнительные футболки, плакаты, листовки и транспаранты были выпущены по просьбе клиентов
Кроме того, сфера корпоративного управления по-прежнему находится в динамике, даже в развитых странах, при этом все шире принимается в расчет социальная ответственность, нередко по просьбе клиентов.
In addition, the corporate governance field is still in evolution even in developed economies, with social responsibility increasingly taken in consideration, at times at the request of clients.
а) осуществлять переводы средств в иностранной валюте по просьбе клиентов иностранного учреждения на их счета за пределами Коста-Рики.
По просьбе клиентов мы постоянно добавляем новые валютные пары.
Первоначально задуманная только для переводческой деятельности, компания в очень короткое время переросла во многоотраслевой бизнес, и продолжает развивать новые виды услуг по просьбе клиентов.
Initially conceived as a solely translating/interpreting operation, the company in a very short time has grown into a multi-service business, and still adding new services per customer demand.
Обслуживание общеорганизационной прикладной системы бюджетирования, включая внесение усовершенствований по просьбе клиентов, поддержку пользователей и профессиональную подготовку
Нашими поставщиками являются в частности: Кнауф, Атлас, Долина Ниды, Лафарж, Цекол, Кёльнер и многие другие. По просьбе клиентов, выполняем специальные заказы по поставкам нишевой продукции.
In the beginning we have been expanding our sales activities throughout the polish market, but for the last few years we have established cooperation with other European building materials markets.
Suggest an example
Other results
Дата выполнения следующего задания перенесена по просьбе клиента.
Нарушение правил дорожного движения по просьбе клиента не допускается.
Новый номер не указывается по просьбе клиента.
Я уничтожил его по просьбе клиента.
По просьбе клиента можно обеспечить съёмки и в Европе.
По просьбе клиента можно организовать любые дополнительные съёмки.
Any additional coverage can be arranged.
Делегации интересовались причинами отступления от правила, предусматривающего шестинедельный срок выпуска документов, но их заверили, что это делалось по просьбам клиентов.
Delegations queried the reasons for departures from the six-week document issuance rule but were assured that it responded to client requests.
Заверение переводов делается по просьбе клиента, для этого мы всегда сотрудничаем с общественными нотариусами.
Примерами таких «разовых покупателей» являются книжные магазины, которые заказывают книги по просьбам клиентов и коммерческих и некоммерческих организаций, использующих данную информацию для конкретных проектов.
Examples of such one-time buyers include bookstores which order on the request of customers and commercial and non-profit entities who use the information for a specific project.
Некоторые девушки получают работу в барах и ресторанах, где, как правило, предполагается, что по просьбе клиента могут быть предоставлены и иные услуги.
Some girls are given work in bars and restaurants which is mostly based on the understanding that other services are also made available at the client’s request.
После урегулирования всех требований, возникающих в связи с контрактом, фирма «Wirtschaftsprüfer» по просьбе клиента обязана вернуть все подтверждающие документы и записи, полученные от клиента или от его имени в порядке выполнения контракта.
As a result of the above described procedures and excluding the impacts from exchange rate fluctuations in 2003, we noted minor overexpenditures within single budget lines.
В случае изменения объема работ, по нашей просьбе или по просьбе клиента цена услуг пересчитывается.
In case of the changes in scope of activity, the price is recalculated by our or client’s demand.
Спектр наших услуг включает работу с внутренним транспортом, доставку грузов со склада до конечных получателей, хранение грузов, комплектование заказов на груз, дополнительные услуги по просьбе клиента.
просьбе клиента — Translation into English — examples Russian
These examples may contain rude words based on your search.
These examples may contain colloquial words based on your search.
Нарушение правил дорожного движения по просьбе клиента не допускается.
Дата выполнения следующего задания перенесена по просьбе клиента.
Некоторые девушки получают работу в барах и ресторанах, где, как правило, предполагается, что по просьбе клиента могут быть предоставлены и иные услуги.
Some girls are given work in bars and restaurants which is mostly based on the understanding that other services are also made available at the client’s request.
Новый номер не указывается по просьбе клиента.
The new number is unpublished at the subscriber’s request.
Я уничтожил его по просьбе клиента.
По просьбе клиента можно обеспечить съёмки и в Европе.
По просьбе клиента можно организовать любые дополнительные съёмки.
Any additional coverage can be arranged.
Доставка в выходные и праздничные дни — эта услуга позволяет, по просьбе клиента, доставить груз в выходные или праздничные дни.
Weekend & Holidays — This service allows for goods to be delivered on weekends and holidays upon special request.
После урегулирования всех требований, возникающих в связи с контрактом, фирма «Wirtschaftsprüfer» по просьбе клиента обязана вернуть все подтверждающие документы и записи, полученные от клиента или от его имени в порядке выполнения контракта.
After the settlement of his claims arising from the engagement, the Wirtschaftsprüfer, upon the request of the client, must return all supporting documents and records obtained from him or for him by reason of his work on the engagement.
Пример 1-8: Юрист, бухгалтер или иной специалист по просьбе клиента подготавливает документы, касающиеся сделки, сведений относительно которой этот специалист не имеет или которую он не понимает и которая лишена экономического или какого-либо другого смысла.
Illustration 1-8: A lawyer, accountant or other professional prepares documents at the request of a client regarding a transaction that the professional does not inquire into or does not understand, and that does not make economic or other sense.
Ь) по инструкции другого банка, учреждения или лица («инструктирующей стороны»), действующего по просьбе клиента («принципала/приказодателя») этой инструктирующей стороны; или
(b) On the instruction of another bank, institution or person («instructing party») that acts at the request of the customer («principal/ applicant») of that instructing party; or
Если автомобиль находится в работе более десяти часов, то на каждый последующий час, мы можем по просьбе Клиента, предоставить скидку 20 % — если данная аренда автомобиля укладывается в одновременный заказ и длится не более 24 часов.
If the car works more than ten hours we can give the 20 % discount on each next hour, under the request of the Client — of course if this rent of the car is within the concurrent order and it lasts not more than 24 hours.
Заверение переводов делается по просьбе клиента, для этого мы всегда сотрудничаем с общественными нотариусами.
We are providing translation services in and from any worldwide spoken language and also in and from most of the regional spoken languages.
Спектр наших услуг включает работу с внутренним транспортом, доставку грузов со склада до конечных получателей, хранение грузов, комплектование заказов на груз, дополнительные услуги по просьбе клиента.
В случае изменения объема работ, по нашей просьбе или по просьбе клиента цена услуг пересчитывается.
In case of the changes in scope of activity, the price is recalculated by our or client’s demand.
Кроме того, официантка утверждает, что передала заказ согласно просьбе клиента: без арахисового соуса.
Also, our waitress swears that she put in the order exactly the way the vic specified — without peanut dressing.
После урегулирования всех требований, возникающих в связи с контрактом, фирма «Wirtschaftsprüfer» по просьбе клиента обязана вернуть все подтверждающие документы и записи, полученные от клиента или от его имени в порядке выполнения контракта.
As a result of the above described procedures and excluding the impacts from exchange rate fluctuations in 2003, we noted minor overexpenditures within single budget lines.
HTTP / 1.1: Connections
HTTP / 1.1: Connections
часть протокола передачи гипертекста — HTTP / 1.1RFC 2616 Fielding, et al.
8 подключений
8.1 Постоянные соединения
8.1.1 Назначение
До постоянных подключений отдельное TCP-подключение было
установлен для получения каждого URL, увеличивая нагрузку на HTTP-серверы
и вызывая перегрузку в Интернете. Использование встроенных изображений и
другие связанные данные часто требуют, чтобы клиент сделал несколько
запросы одного и того же сервера за короткий промежуток времени.Анализ
эти проблемы с производительностью и результаты прототипа
реализации доступны [26] [30]. Опыт внедрения и
измерения реальных реализаций HTTP / 1.1 (RFC 2068) показывают хорошие
результаты [39]. Также были изучены альтернативы, например,
T / TCP [27].
Постоянные HTTP-соединения имеют ряд преимуществ:
- За счет открытия и закрытия меньшего количества TCP-соединений экономится время ЦП в маршрутизаторах и хостах (клиенты, серверы, прокси, шлюзы, туннели или кеши) и память, используемая для управления протоколом TCP блоки могут быть сохранены в hosts.
- HTTP-запросы и ответы могут передаваться по конвейеру в соединении. Конвейерная обработка позволяет клиенту делать несколько запросов без ожидая каждого ответа, разрешая одно TCP-соединение с использоваться намного эффективнее, с гораздо меньшим затраченным временем.
- Перегрузка сети снижается за счет уменьшения количества пакетов вызвано открытием TCP и предоставлением TCP достаточно времени для определить состояние перегрузки сети.
- Задержка при последующих запросах уменьшена, так как нет времени потрачено на рукопожатие открытия TCP-соединения.
- HTTP может развиваться более изящно, поскольку можно сообщать об ошибках без штрафа за закрытие TCP-соединения. Клиенты, использующие будущие версии HTTP могут оптимистично попробовать новую функцию, но если вы общаетесь со старым сервером, повторите попытку со старым семантика после сообщения об ошибке.
Реализации HTTP ДОЛЖНЫ реализовывать постоянные соединения.
8.1.2 Общая работа
Существенная разница между HTTP / 1.1 и более ранними версиями
HTTP заключается в том, что постоянные соединения являются поведением по умолчанию любого
HTTP-соединение. То есть, если не указано иное, клиент
СЛЕДУЕТ предполагать, что сервер будет поддерживать постоянное соединение,
даже после сообщений об ошибках от сервера.
Постоянные соединения обеспечивают механизм, с помощью которого клиент и
сервер может сигнализировать о закрытии TCP-соединения.Эта сигнализация занимает
разместите, используя поле заголовка соединения (раздел 14.10). После закрытия
был сигнализирован, клиент НЕ ДОЛЖЕН отправлять больше запросов на этом
подключение.
8.1.2.1 Переговоры
Сервер HTTP / 1.1 МОЖЕТ предполагать, что клиент HTTP / 1.1 намеревается
поддерживать постоянное соединение, если заголовок соединения не включает
в запросе был отправлен токен соединения «закрыть». Если сервер
решает закрыть соединение сразу после отправки
ответ, он ДОЛЖЕН отправить заголовок соединения, включая
токен подключения закрыть.
Клиент HTTP / 1.1 МОЖЕТ ожидать, что соединение останется открытым, но будет
решите оставить его открытым в зависимости от того, будет ли ответ от сервера
содержит заголовок соединения с закрытым токеном соединения. В случае
клиент не хочет поддерживать соединение больше, чем это
запрос, он ДОЛЖЕН отправить заголовок соединения, включая
токен подключения закрыть.
Если клиент или сервер отправляет токен закрытия в
Заголовок соединения, этот запрос становится последним для
подключение.
Клиентам и серверам НЕ СЛЕДУЕТ предполагать, что постоянное соединение
поддерживается для версий HTTP ниже 1.1, если это не указано явно
сигнализировал. См. Раздел 19.6.2 для получения дополнительной информации об обратном
совместимость с клиентами HTTP / 1.0.
Чтобы оставаться постоянными, все сообщения в соединении ДОЛЖНЫ
иметь самоопределяемую длину сообщения (то есть, не определенную закрытием
соединения), как описано в разделе 4.4.
8.1.2.2 Конвейерная обработка
Клиент, поддерживающий постоянные соединения, МОЖЕТ «конвейерно»
запросов (т.е. отправлять несколько запросов, не дожидаясь каждого
ответ). Сервер ДОЛЖЕН отправлять свои ответы на эти запросы в
в том же порядке, в котором были получены запросы.
Клиенты, которые предполагают постоянные соединения и конвейер немедленно
после установления соединения СЛЕДУЕТ быть готовым к повторной попытке
соединение, если первая конвейерная попытка не удалась.Если клиент
такая повторная попытка НЕ ДОЛЖНА быть конвейерной, пока не узнает, что соединение
стойкий. Клиенты ДОЛЖНЫ быть готовы повторно отправить свои запросы, если
сервер закрывает соединение перед отправкой всех
соответствующие ответы.
Клиентам НЕ СЛЕДУЕТ конвейерные запросы с использованием неидемпотентных методов или
неидемпотентные последовательности методов (см. раздел 9.1.2). В противном случае
преждевременное прекращение транспортного сообщения могло привести к
неопределенные результаты.Клиент, желающий отправить неидемпотентный
request СЛЕДУЕТ дождаться отправки этого запроса, пока он не получит
статус ответа на предыдущий запрос.
8.1.3 Прокси-серверы
Особенно важно, чтобы прокси правильно реализовали
свойства поля заголовка соединения, как указано в разделе
14.10.
Прокси-сервер ДОЛЖЕН сигнализировать о постоянных соединениях отдельно с
своих клиентов и исходных серверов (или других прокси-серверов), которые он
подключается к.Каждое постоянное соединение применяется только к одному транспорту
ссылка.
Прокси-сервер НЕ ДОЛЖЕН устанавливать постоянное соединение HTTP / 1.1.
с клиентом HTTP / 1.0 (но см. RFC 2068 [33] для информации и
обсуждение проблем с заголовком Keep-Alive, реализованных
многие клиенты HTTP / 1.0).
8.1.4 Практические соображения
Серверы обычно имеют некоторое время ожидания, по истечении которого они будут
больше не поддерживать неактивное соединение.Прокси-серверы могут сделать
это более высокое значение, поскольку вполне вероятно, что клиент будет делать
больше подключений через тот же сервер. Использование стойких
соединений не предъявляет требований к длине (или наличию)
этот тайм-аут для клиента или сервера.
Когда клиент или сервер желают истечь тайм-аут, он ДОЛЖЕН выдать изящный
Рядом транспортное сообщение. Клиенты и серверы ДОЛЖНЫ
постоянно следите за тем, чтобы другая сторона транспорта не приближалась, и
ответьте на него соответствующим образом.Если клиент или сервер не обнаруживает
быстрое закрытие другой стороны может вызвать ненужный ресурс
сток в сети.
Клиент, сервер или прокси МОГУТ закрыть транспортное соединение в любой момент.
время. Например, клиент мог начать отправлять новый запрос.
при этом сервер решил закрыть «холостой»
подключение. С точки зрения сервера, соединение
закрывается, пока он простаивает, но с точки зрения клиента
запрос в процессе.
Это означает, что клиенты, серверы и прокси ДОЛЖНЫ иметь возможность восстанавливать
от асинхронных событий закрытия. Клиентское программное обеспечение ДОЛЖНО снова открыть
транспортное соединение и повторно передать прерванную последовательность запросов
без взаимодействия с пользователем, если последовательность запросов
идемпотентный (см. раздел 9.1.2). Неидемпотентные методы или последовательности
НЕ ДОЛЖЕН повторяться автоматически, хотя пользовательские агенты МОГУТ предлагать
человек-оператор выбор повторной попытки запроса (ов).Подтверждение
ПО user-agent с семантическим пониманием приложения
МОЖЕТ заменить подтверждение пользователя. Автоматический повтор НЕ ДОЛЖЕН
повторяться, если вторая последовательность запросов не удалась.
Серверы ДОЛЖНЫ всегда отвечать хотя бы на один запрос на каждое соединение,
если вообще возможно. Серверам НЕ СЛЕДУЕТ закрывать соединение в
середина передачи ответа, кроме сбоя сети или клиента
подозревается.
Клиентам, использующим постоянные соединения, СЛЕДУЕТ ограничить количество
одновременные соединения, которые они поддерживают с данным сервером.А
однопользовательский клиент НЕ ДОЛЖЕН поддерживать более 2 соединений с
любой сервер или прокси. Прокси-сервер ДОЛЖЕН использовать до 2 * N подключений к
другой сервер или прокси, где N — количество одновременно
активные пользователи. Эти рекомендации предназначены для улучшения ответа HTTP.
раз и избегайте заторов.
8.2 Требования к передаче сообщений
8.2.1 Постоянные соединения и управление потоком
Серверы HTTP / 1.1 ДОЛЖНЫ поддерживать постоянные соединения и использовать TCP
механизмы управления потоком для устранения временных перегрузок, а не
завершение соединений с ожиданием, что клиенты попытаются повторить попытку.Последний метод может усугубить перегрузку сети.
8.2.2 Мониторинг соединений для сообщений об ошибках
Клиент HTTP / 1.1 (или новее), отправляющий тело сообщения, ДОЛЖЕН отслеживать
сетевое соединение для статуса ошибки во время передачи
запрос. Если клиент видит статус ошибки, он ДОЛЖЕН
немедленно прекратите передачу тела. Если тело отправляется
используя «фрагментированное» кодирование (раздел 3.6), фрагмент нулевой длины и
пустой трейлер МОЖЕТ использоваться для преждевременной отметки конца сообщения.Если телу предшествовал заголовок Content-Length, клиент ДОЛЖЕН
закрыть соединение.
8.2.3 Использование 100 (продолжить) Статус
Статус 100 (Продолжить) (см. Раздел 10.1.1) предназначен для
разрешить клиенту, который отправляет сообщение запроса с телом запроса
чтобы определить, готов ли исходный сервер принять запрос
(на основе заголовков запроса) до того, как клиент отправит запрос
тело. В некоторых случаях это может быть неприемлемо или крайне
неэффективно для клиента отправлять тело, если сервер отклонит
сообщение, не глядя на тело.
Требования к клиентам HTTP / 1.1:
- Если клиент будет ждать ответа 100 (Продолжить) раньше отправляя тело запроса, он ДОЛЖЕН отправить заголовок запроса Expect поле (раздел 14.20) с ожиданием «100-continue».
- Клиент НЕ ДОЛЖЕН отправлять поле заголовка запроса Expect (раздел 14.20) с ожиданием «100-continue», если он не намерен отправить тело запроса.
Из-за наличия более старых реализаций протокол позволяет
неоднозначные ситуации, в которых клиент может отправить «Ожидайте: 100-
продолжить »без получения статуса 417 (ожидание не выполнено)
или статус 100 (Продолжить). Следовательно, когда клиент отправляет это
поле заголовка на исходный сервер (возможно, через прокси), с которого он
никогда не видел статуса 100 (Продолжить), клиент НЕ ДОЛЖЕН ждать
на неопределенный срок перед отправкой тела запроса.
Требования к исходным серверам HTTP / 1.1:
- После получения запроса, который включает заголовок запроса Expect. поле с ожиданием "100-continue", исходный сервер ДОЛЖЕН либо ответьте статусом 100 (Продолжить) и продолжайте читать из входного потока или ответьте окончательным кодом состояния. В исходный сервер НЕ ДОЛЖЕН ждать тела запроса перед отправкой ответ 100 (Продолжить).Если он отвечает с окончательным статусом код, он МОЖЕТ закрыть транспортное соединение или МОЖЕТ продолжить
, чтобы прочитать и отклонить остальную часть запроса. НЕ ДОЛЖЕН выполнить запрошенный метод, если он возвращает окончательный код состояния.
- Исходный сервер НЕ ДОЛЖЕН отправлять ответ 100 (Продолжить), если сообщение запроса не включает заголовок запроса Expect поле с ожиданием "100-continue" и НЕ ДОЛЖЕН отправлять 100 (Продолжить) ответ, если такой запрос исходит от HTTP / 1.0 (или более ранний) клиент. Есть исключение из этого правила: для совместимость с RFC 2068, сервер МОЖЕТ отправить 100 (Продолжить) статус в ответ на запрос HTTP / 1.1 PUT или POST, который не включать поле заголовка запроса Expect с "100- продолжить "ожидание. Это исключение, цель которого чтобы свести к минимуму любые задержки обработки клиентов, связанные с необъявленное ожидание статуса 100 (Продолжить), применяется только к HTTP / 1.1, а не на запросы с любыми другими HTTP- значение версии.
- Исходный сервер МОЖЕТ пропустить ответ 100 (Продолжить), если он уже получил часть или все тело запроса для соответствующий запрос.
- Исходный сервер, который отправляет ответ 100 (продолжить), ДОЛЖЕН в конечном итоге отправить окончательный код состояния, как только тело запроса получены и обработаны, если это не прекращает транспортировку подключение преждевременно.
- Если исходный сервер получает запрос, который не включает Ожидайте поле заголовка запроса с ожиданием "100-continue", запрос включает тело запроса, и сервер отвечает с окончательным кодом состояния перед чтением всего тела запроса из транспортного соединения, то сервер НЕ ДОЛЖЕН закрываться транспортное соединение, пока не будет прочитан весь запрос, или пока клиент не закроет соединение.В противном случае клиент может не получить ответное сообщение. Однако это требование не должно толковаться как препятствие серверу защищаясь от атак типа "отказ в обслуживании" или от сильно сломанные клиентские реализации.
Требования к прокси HTTP / 1.1:
- Если прокси-сервер получает запрос, включающий запрос ожидания - поле заголовка с ожиданием "100-continue" и прокси либо знает, что сервер следующего перехода соответствует HTTP / 1.1 или выше или не знает HTTP-версию следующего перехода сервер, он ДОЛЖЕН пересылать запрос, включая заголовок Expect. поле.
- Если прокси-сервер знает, что версия сервера следующего перехода HTTP / 1.0 или ниже, он НЕ ДОЛЖЕН пересылать запрос и ДОЛЖЕН ответить статусом 417 (ожидание не выполнено).
- Прокси-серверы ДОЛЖНЫ поддерживать кеш-запись версии HTTP. числа, полученные от серверов следующего перехода, на которые недавно ссылались.
- Прокси-сервер НЕ ДОЛЖЕН пересылать ответ 100 (Продолжить), если сообщение с запросом было получено от HTTP / 1.0 (или более ранней версии) клиент и не включал поле заголовка запроса Expect с ожидание "100 продолжений". Это требование отменяет общее правило пересылки ответов 1xx (см. раздел 10.1).
8.2.4 Поведение клиента, если сервер преждевременно закрывает соединение
Если HTTP / 1.1 клиент отправляет запрос, который включает тело запроса,
но который не включает поле заголовка запроса Expect с
Ожидание «100-продолжения», и если клиент не напрямую
подключен к исходному серверу HTTP / 1.1, и если клиент видит
соединение закрывается до получения статуса от сервера,
клиент ДОЛЖЕН повторить запрос. Если клиент все же попытается это сделать
запрос, он МОЖЕТ использовать следующую «двоичную экспоненциальную отсрочку»
алгоритм, чтобы быть уверенным в получении надежного ответа:
1.Инициировать новое соединение с сервером
2. Передать заголовки запроса.
3. Инициализируйте переменную R равным расчетному времени двустороннего обращения к сервер (например, в зависимости от времени, необходимого для установки соединение), или на постоянное значение 5 секунд, если время поездки недоступно.
4. Вычислить T = R * (2 ** N), где N - количество предыдущих повторные попытки этого запроса.
5. Дождитесь либо сообщения об ошибке от сервера, либо T секунды (что наступит раньше)
6. Если сообщение об ошибке не получено, через T секунд передайте сообщение тело запроса.
7. Если клиент видит, что соединение преждевременно закрыто, повторять с шага 1 до тех пор, пока запрос не будет принят, ошибка получен ответ, или пользователь становится нетерпеливым и завершает процесс повтора.
Если в какой-то момент получен статус ошибки, клиент
- НЕ ДОЛЖЕН продолжать и
- СЛЕДУЕТ закрыть соединение, если оно не завершило отправку сообщение-запрос.
.
перенаправлений, запросы POST и GET, а также «потерянные» данные
У нас есть веб-приложение, которое должно принимать POST-запросы от клиентов.
Перед этим приложением есть прокси-сервис, независимо от того, какой — сначала мы столкнулись с проблемами в AWS Application Load Balancer, затем я воспроизвел их с помощью NGINX, и он будет «работать» для любой другой прокси-системы.
Помимо проксирования — эта служба также выполняет перенаправление HTTP (80) на HTTPS (443).
Проблема точно проявляется при таком редиректе:
- клиент отправляет
POST
запросов через HTTP - прокси возвращает 301 или 302 перенаправление на HTTPS
- затем клиент отправляет запрос через HTTPS, но:
- в некоторых случаях этот
POST
становитсяGET
- или все равно будет
POST
, но все его данные будут «потеряны»
- в некоторых случаях этот
Настройка среды тестирования
Для тестирования воспользуемся следующей конфигурацией:
- NINGX принимает API-запросы
- NGINX передает через
proxy_pass
по HTTP в серверную службу- для воспроизведения проблемы
POST
—GET
— будет использоваться серверная часть с приложением Go в контейнере Docker - для воспроизведения «потерянных» данных и пустого
Длина содержимого
— скрипт Python будет использоваться для работы в качестве веб-сервера
- для воспроизведения проблемы
NGINX
Обычный конфиг — NGINX, слушает на 80, перенаправляет на HTTPS:
сервер { слушать 80; server_name dev.poc.example.com; место расположения / { возврат 302 https: //dev.poc.example.com$request_uri; } } ...
И сервер 443 {}
— также обычная конфигурация с proxy_pass
к бэкэнду на порту 8081:
... server { слушайте 443 ssl; имя_сервера dev.poc.example.com; ... место расположения / { proxy_pass http: // localhost: 8081; proxy_set_header Host $ host; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Схема X-Forwarded-Proto $; } }
Go-приложение в Docker
У нас там несколько контейнеров в стеке, но в настоящее время нас интересует go-queue-consumer с локальным NGINX (вся исходная система все еще находится в состоянии Proof of Concept, так что не стоит задумываться о слишком большом количестве NGINX здесь).
Нас просто интересуют его журналы с методами POST
или GET
.
Веб-сервер Python
И еще один веб-сервер, который играет роль бэкенда, чтобы увидеть проблему с длиной данных — быстро погуглил скрипт Python:
#! / Usr / bin / env python3 "" " Очень простой HTTP-сервер на Python для регистрации запросов Применение:: ./server.py [<порт>] "" " из http.server импортировать BaseHTTPRequestHandler, HTTPServer импорт журнала класс S (BaseHTTPRequestHandler): def _set_response (самостоятельно): я.send_response (200) self.send_header ('Content-type', 'текст / html') self.end_headers () def do_GET (сам): logging.info ("Запрос GET, \ nPath:% s \ nHeaders: \ n% s \ n", str (self.path), str (self.headers)) self._set_response () self.wfile.write ("Запрос GET для {}". формат (self.path) .encode ('utf-8')) def do_POST (сам): content_length = int (self.headers ['Content-Length']) # <--- Получает размер данных post_data = себя.rfile.read (content_length) # <--- Получает сами данные logging.info ("Запрос POST, \ nPath:% s \ nHeaders: \ n% s \ n \ nBody: \ n% s \ n", str (self.path), str (self.headers), post_data.decode ('utf-8')) self._set_response () self.wfile.write ("POST-запрос для {}". формат (self.path) .encode ('utf-8')) def run (server_class = HTTPServer, handler_class = S, порт = 8081): logging.basicConfig (уровень = logging.INFO) server_address = ('', порт) httpd = класс_сервера (адрес_сервера, класс_обработчика) Ведение журнала.info ('Запуск httpd ... \ n') пытаться: httpd.serve_forever () кроме KeyboardInterrupt: проходить httpd.server_close () logging.info ('Остановка httpd ... \ n') если __name__ == '__main__': из sys import argv если len (argv) == 2: запустить (порт = int (argv [1])) еще: запустить ()
Примеры: воспроизвести проблему
A POST
потеряли данные после перенаправления
Первое, с чем мы столкнулись, это то, что после перенаправления HTTP на HTTPS наши POST-запросы теряют свои данные.
Для его воспроизведения воспользуемся сценарием Python, упомянутым выше.
Запустите его на 8081 порт:
root @ ip-10-0-15-118: / home / admin # ./test_post.py 8081
ИНФОРМАЦИЯ: root: Запуск httpd ...
И запустите curl
с POST
и некоторыми данными в --data
:
curl -vL -X POST http://dev.poc.example.com/ -d "param1 = value1 & param2 = value2"
...
* Попытка 52. ***. ***. 224: 80 ...
...
> Content-Length: 27
...
... ... > POST / HTTP / 1.1 > Хост: dev.poc.example.com > User-Agent: curl / 7.67.0 > Принять: * / * > * Отметить пакет как не поддерживающий многоразовый ... Давайте посмотрим, что здесь происходит: В логах NGINX мы видим стандартный HTTP ... ==> /var/log/nginx/dev.poc.example.com-error.log <== 2019/11/23 09:52:41 [ошибка] 19793 # 19793: * 51100 восходящий поток преждевременно закрытое соединение при чтении заголовка ответа из восходящего потока, клиент: 194. ***. ***. 26, сервер: dev.poc.example.com, запрос: «POST / HTTP / 1.1», исходящий: «http: / /127.0.0.1:8081/ ", хост:" dev.poc.example.com " ==> /var/log/nginx/dev.poc.example.com-access.log <== 194. ***. ***. 26 - - [23 / ноя / 2019: 09: 52: 41 +0000] "POST / HTTP / 1.1 "502 173" - "" локон / 7,67,0 " ... Но давайте посмотрим на stderr запущенного Python-сервера: ... Исключительная ситуация при обработке запроса от ('127.0.0.1', 38224) Traceback (последний вызов последний): Файл "/usr/lib/python3.5/socketserver.py", строка 313, в _handle_request_noblock self.process_request (request, client_address) Файл "/usr/lib/python3.5/socketserver.py", строка 341, в process_request self.finish_request (request, client_address) Файл "/usr/lib/python3.5/socketserver.py", строка 354, в finish_request self.RequestHandlerClass (request, client_address, self) Файл "/ usr / lib / python3.5 / socketserver.py ", строка 681, в __init__ self.handle () Файл" /usr/lib/python3.5/http/server.py ", строка 422, в дескрипторе self. handle_one_request () Файл "/usr/lib/python3.5/http/server.py", строка 410, в handle_one_request method () File "./test_post.py ", строка 22, в do_POST content_length = int (self.headers ['Content-Length']) # <--- Получает размер данных TypeError: аргумент int () должен быть строкой , Байтовый объект или число, а не NoneType ... Обратите внимание на эти строки: … . E.g., приложение получило пустое / отсутствующее поле Content-Length . Тем не менее, если отправить новый запрос напрямую через HTTP (с отключенным перенаправлением на NGINX) или через HTTPS - все будет работать, как и ожидалось: curl -vL -X POST https://dev.poc.example.com/ -d "param1 = value1 & param2 = value2" ... > POST / HTTP / 1.1 > Host: dev.poc. example.com > User-Agent: curl / 7.67.0 > Accept: * / * > Content-Length: 27 > Content-Type: application / x-www-form-urlencoded > * загрузка полностью отправлена: 27 из 27 байтов * Пометить пакет как не поддерживающий многоразовый <Сервер: nginx / 1.10.3 <Дата: Сб, 23 ноя 2019 09:55:07 GMT < Соединение: keep-alive < * Соединение №0 с хостом dev.poc.example.com осталось неизменным Запрос POST для / И стандартный вывод приложения Python: ... ИНФОРМАЦИЯ: root: запрос POST, Путь: / Заголовки: Хост: dev.poc.example.com X-Real-IP: 194. ***. ***. 26 X-Forwarded-For: 194. ***. ***. 26 X-Forwarded-Proto : Https Подключение: закрыть Content-Length: 27 User-Agent: curl / 7.67.0 Accept: * / * Content-Type: application / x-www-form-urlencoded Body : param1 = value1 & param2 = value2 127.0.0.1 - - [23 / ноя / 2019 09:55:07] «POST / HTTP / 1.0» 200 - А теперь перейдем к следующей второй задаче. Во время отладки проблемы, о которой говорилось выше, когда серверная часть не получала данные во время Давайте посмотрим, как наш запрос Детали и первопричина будут рассмотрены позже в этом посте, а теперь давайте воспроизведем проблему с использованием двух HTTP-клиентов - Запустите запрос с типом В этом случае мы используем не скрипт Python, который использовался выше, а наш реальный внутренний контейнер Docker, чтобы продемонстрировать его работу и проверить его логи. Сами данные, как и любые ошибки, здесь не имеют значения - нас интересуют только используемые методы запросов - curl -vL -X POST http: // dev.poc.example.com/skin/api/v1/receipt -d "{}" ... > POST / skin / api / v1 / чек HTTP / 1.1 > Хост: dev.poc.example. com > User-Agent: curl / 7.67.0 > Accept: * / * > * Отметить пакет как не поддерживающий многоразовый <Дата: сб, 23 ноября 2019 г., 10:07:37 GMT < * Соединение №1 с хостом dev.poc.example.com оставлен без изменений {"message": "Ошибка проверки: невозможно проанализировать тело json"} Еще раз - не смотрите здесь на ошибки - вместо этого давайте вернемся к журналам NGINX: ==> /var/log/nginx/dev.poc.example.com-access.log <== 194. ***. ***. 26 - - [23 ноября 2019 г .: 10:07 : 37 +0000] "POST / skin / api / v1 / квитанция HTTP / 1.1" 400 58 "-" "curl / 7.67.0" Кажется, здесь все хорошо? Отправлено Просто для проверки - давайте запустим curl -L -X GET http://dev.poc.example.com/skin/api/v1/receipt -d "{}" Страница 404 не найдена и журналы NGINX с этим ==> /var/log/nginx/dev.poc.example.com-access.log <== 194. ***. ***. 26 - - [23 ноября 2019 г .: 10:07 : 37 +0000] "POST / skin / api / v1 / получение HTTP / 1.1 "400 58" - "" curl / 7.67.0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 09: 57 +0000]" GET / skin / api / v1 / квитанция HTTP / 1.1 "404 18" - "" curl / 7.67.0 " Все хорошо, вроде все правильно - никаких проблем, а? А теперь давайте воспользуемся Postman для отправки того же запроса к той же конечной точке: POST А?… И - теперь давайте посмотрим логи NGINX: ==> / var / log / nginx / dev.poc.example.com-access.log <== 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 07: 37 +0000] "POST / skin / api / v1 / receive HTTP / 1.1 "400 58" - "" curl / 7.67.0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 09: 57 +0000]" GET / skin / api / v1 / receive HTTP / 1.1 "404 18" - "" curl / 7.67.0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 11: 44 +0000] "GET / skin / api / v1 / receive HTTP / 1.1" 404 18 "http://dev.poc.example.com/skin/api/v1/receipt" "PostmanRuntime / 7.19.0" Errr… Что?!? Но я отправил явно указанный запрос Еще раз: Что ж, теперь мы можем понять, куда ушли наши данные - потому что наш На самом деле, обе проблемы вызваны одной и той же причиной. Давайте начнем наше расследование с чтения описания кода 301 в RFC 2616 - https://tools.ietf.org/html/rfc2616#section-10.3.2, особенно его Note : Примечание. При автоматическом перенаправлении запроса POST после того, как То есть, некоторые клиенты после отправки Но это только начало! При дальнейшем чтении в описании кода 302 в том же RFC 2016 - https://tools.ietf.org/html/rfc2616#section-10.3.3 мы увидим еще одну заметку : Примечание. RFC 1945 и RFC 2068 указывают, что клиенту не разрешено RFC 1945 про 3хх редиректов - https: // tools.ietf.org/html/rfc1945#section-9.3 RFC 2068 около 3хх редиректов - https://tools.ietf.org/html/rfc2068#section-10.3.2 То есть, RFC 1945 и RFC 2068 заявляют, что у клиента нет типа изменения для перенаправленного запроса, но большинство из них будет рассматривать код 302 как… 303 ! Перейдем к следующей части и прочитаем о коде 303 - https://tools.ietf.org/html/rfc2616#section-10.3.4: Ответ на запрос можно найти под другим URI, и То есть, когда клиент считает, что он получил код 303 - он всегда выполнит GET . Итак, что мы видели в случае с Postman (и нашими клиентами мобильного приложения, в которых мы впервые столкнулись с этой проблемой): Я нашел решение после прочтения документации Mozilla (хотя в примечаниях RFC 2016 для 302 была подсказка), в которой говорится о перенаправлениях 301 и 302 : Поэтому рекомендуется установить код 302 только в качестве ответа для методов GET или HEAD , а для использовать временное перенаправление 307 вместо , поскольку в этом случае изменение метода явно запрещено. Хорошо, давайте обновим наш NGINX и изменим код 302 на 307 : Перезагрузить конфиги и повторить запрос от curl -L -X POST http://dev.poc.example.com/skin/api/v1/receipt -d "{}" {"message": "Ошибка проверки: поля 'hardware_id' и 'квитанция 'Обязательны "} И мы получили действительный ответ от бэкэнда, который теперь просто запрашивает нормальные данные. Редирект сработал, получен запрос И журнал NGINX: ==> /var/log/nginx/dev.poc.example.com-access.log <== 194. ***. ***. 26 - - [23 ноября 2019 г .: 10:07 : 37 +0000] "POST / skin / api / v1 / квитанция HTTP / 1.1" 400 58 "-" "curl / 7.67.0" 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 09: 57 +0000] "GET / skin / api / v1 / receive HTTP / 1.1" 404 18 "-" "curl / 7.67.0" 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 11: 44 +0000] «GET / skin / api / v1 / получение HTTP / 1.1 "404 18" http://dev.poc.example.com/skin/api/v1/receipt "" PostmanRuntime / 7.19.0 " 194. ***. ***. 26 - - [23 / Ноя / 2019: 10: 35: 51 +0000] "POST / skin / api / v1 / квитанция HTTP / 1.1" 422 81 "-" "curl / 7.67.0" 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 36: 00 +0000] "POST / skin / api / v1 / квитанция HTTP / 1.1" 422 81 "-" "curl / 7.67.0" Повторите запрос от Почтальона: Журналы NGINX: ==> /var/log/nginx/dev.poc.example.com-access.log <== 194.***. ***. 26 - - [23 / ноя / 2019: 10: 07: 37 +0000] "POST / skin / api / v1 / квитанция HTTP / 1.1" 400 58 "-" "curl / 7.67. 0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 09: 57 +0000]" GET / skin / api / v1 / квитанция HTTP / 1.1 "404 18" - "" Curl / 7.67.0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 11: 44 +0000]" GET / skin / api / v1 / квитанция HTTP / 1.1 "404 18" http://dev.poc.example.com/skin/api/v1/receipt "" PostmanRuntime / 7.19.0 " 194. ***. ***. 26 - - [23 / Ноя / 2019: 10: 35: 51 +0000] "POST / skin / api / v1 / квитанция HTTP / 1.1" 422 81 "-" "curl / 7.67.0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 36: 00 +0000]" POST / skin / api / v1 / квитанция HTTP / 1.1 "422 81" - "" Curl / 7.67.0 " 194. ***. ***. 26 - - [23 / ноя / 2019: 10: 37: 57 +0000]" POST / skin / api / v1 / квитанция HTTP / 1.1 "422 81" http://dev.poc.example.com/skin/api/v1/receipt "" PostmanRuntime / 7.19.0 " Все работает, как положено. К сожалению, я не смог найти, как установить 307 при использовании AWS ALB: Вот и все, ребята! . Узнайте о заголовках HTTP в запросах и ответах EWS и REST, которые могут помочь вам отслеживать и устранять неполадки в приложении Exchange. Это когда-нибудь случалось с вами? Пользователь вашего приложения сообщает о непредвиденной ошибке. Вы хотите исследовать, но не можете воспроизвести это. Ошибка исчезла для пользователя, и у вас осталось очень мало данных для действий. Обидно, не правда ли? Давайте посмотрим, как вы можете заранее подготовиться к этому сценарию и, надеюсь, избежать разочарований в будущем. Мы рекомендуем добавлять к запросам дополнительные заголовки HTTP, чтобы облегчить устранение неполадок.Вам следует где-нибудь сохранить запись этой информации (например, в файле журнала), чтобы вы могли получить ее позже, если вам нужно. Это полезно при проверке сетевого трафика, а также при обращении в службу поддержки Microsoft за помощью. Таблица 1. Заголовки запросов для поиска и устранения неисправностей Использование одного и того же значения для всех запросов, отправляемых вашим приложением, позволяет Microsoft помочь в устранении неполадок при вызовах, если они возникнут. Мы рекомендуем использовать GUID.Этот уникальный идентификатор предназначен для использования для сопоставления действий двух систем в случае, если что-то пойдет не так. Это можно использовать для корреляции запросов и ответов в трассировках сети или трассировках управляемого API EWS. Так же, как ваш клиент может добавлять дополнительные инструменты к отправляемым запросам, Exchange добавляет дополнительные инструменты к ответам в форме заголовков HTTP.Ваш клиент должен фиксировать эту информацию, чтобы сопровождать информацию об инструментах запроса. Примечание Если вы используете управляемый API EWS, прямого эквивалента для заголовков HTTP нет. Однако ко всем заголовкам ответов HTTP можно получить доступ через свойство ExchangeService.HttpResponseHeaders. Таблица 2. Заголовки ответа HTTP Этот заголовок присутствует только в том случае, если запрос содержит заголовок return-client-request-id со значением true . Он содержит явный код ошибки, который указывает, почему не удалось выполнить аутентификацию OAuth. Принимает следующий формат: Поле причины представляет собой удобочитаемое описание ошибки. Поле errorId является целым числом, а поле error_type является строковым представлением этого целого числа, как показано ниже: Если ваше приложение использует управляемый API EWS или EWS для подключения к Exchange Online, вы можете сообщить о задержке в запросах EWS напрямую в Microsoft.Информация передается через заголовок запроса X-ClientStatistics. Если вы используете управляемый API EWS, все, что вам нужно сделать, это установить для свойства ExchangeService.SendClientLatencies значение true . Если вы используете EWS, вам необходимо измерить время между отправкой запроса и получением ответа, а затем добавить заголовок X-ClientStatistics к следующему запросу EWS, отправляемому вашим приложением, в следующем формате. Мы ведем отчеты об этих задержках и используем их для постоянного улучшения служб EWS в Exchange Online. После добавления клиентского инструментария в приложение лучше подготовиться, если что-то пойдет не так. Если это произойдет, вы можете использовать свои инструментальные данные для устранения неполадок в приложении. . В этом документе описаны некоторые из дополнительных функций Requests. Объект Session позволяет сохранять определенные параметры в Объект сеанса имеет все методы основного API запросов. Давайте сохраним некоторые файлы cookie между запросами: Сеансы также могут использоваться для предоставления данных по умолчанию для методов запроса. Эта Любые словари, которые вы передаете методу запроса, будут объединены с Обратите внимание, однако, что параметры уровня метода , а не будут сохраняться в Если вы хотите вручную добавить файлы cookie в сеанс, используйте Сеансы также могут использоваться как менеджеры контекста: Это обеспечит закрытие сеанса, как только блок Удалить значение из параметра Dict Иногда вам нужно опустить ключи уровня сеанса в параметре dict. Чтобы Все значения, содержащиеся в сеансе, доступны вам напрямую. Каждый раз при обращении к Если мы хотим получить доступ к заголовкам, которые сервер отправил нам, мы делаем это: Однако, если мы хотим получить заголовки, которые мы отправили серверу, мы просто обращаемся к Каждый раз, когда вы получаете объект Поскольку вы не делаете ничего особенного с объектом Однако приведенный выше код потеряет некоторые преимущества наличия запроса . POST запрос
отправляется через HTTP, Content-Length: 27 POST запрос
отправляется через HTTPS, Content-Length: 173 POST
:
content_length = int (self.headers [‘ Content-Length ‘])
TypeError: аргумент int () должен быть строкой, байтовым объектом или числом, а не « NoneType ‘ A
POST
стал GET
POST
, я обнаружил еще одно «захватывающее» поведение запроса во время HTTP-редиректов. POST
превратится в ... запрос GET
! curl,
и Postman.
локон
POST
через HTTP с -L
, чтобы выполнить перенаправление на HTTPS. POST
и GET
. POST
- получено POST
. curl
с явно указанным типом GET
, чтобы увидеть ответ серверной части и журналы NGINX в этом случае: GET
: Почтальон
через HTTP для запуска и выполнения перенаправления на HTTPS: POST
? curl
, HTTP => HTTPS перенаправление выполнено, POST
в журналах - все хорошо GET
в логах - WTF ??? POST, GET и «потерянные» данные
POST
стал GET
. Основная причина, перенаправления 3xx и HTTP RFC
получил код состояния 301, некоторые существующие пользовательские агенты HTTP / 1.0 ,
, , ошибочно изменят его на запрос GET . POST
и получения 301 - изменят тип запроса на GET
.
изменять метод в перенаправленном запросе.Однако большинство
существующих реализаций пользовательского агента обрабатывают 302, как если бы это был ответ 303
, выполняет GET для значения поля Location независимо от
исходного метода запроса. Коды состояния 303 и 307 были добавлены
для серверов, которые хотят однозначно указать, какой тип реакции
ожидается от клиента.
ДОЛЖЕН быть получен с использованием метода GET для этого ресурса. POST
по HTTP GET
, «теряя» все исходные данные Решение
сервер {
слушать 80;
...
место расположения / {
# return 302 https: //dev.poc.example.com$request_uri;
возврат 307 https: //dev.poc.example.com$request_uri;
}
}
...
curl
: POST
. AWS Application Load Balancer перенаправляет
Полезные ссылки
Те проблемы на других сайтах
Помогло найти решение
Также опубликовано на Medium. Инструментирование клиентских запросов для EWS и REST в Exchange
В этой статье
Добавить КИПиА в запросы
HTTP-заголовок (EWS) Эквивалент управляемого API EWS Банкноты Пользовательский агент ExchangeService.UserAgent Установите уникальное значение, которое идентифицирует ваше клиентское приложение. идентификатор запроса клиента ExchangeService.ClientRequestId Установите другое уникальное значение для каждого запроса, отправляемого вашим приложением. возврат-идентификатор-запроса-клиента ExchangeService.ReturnClientRequestId Установите значение true , чтобы сообщить серверу Exchange, что он должен вернуть значение вашего client-request-id в соответствующем ответе. X-ClientStatistics ExchangeService.SendClientLatencies Используется для сообщения Microsoft о задержках EWS, если ваше приложение обращается к Exchange Online или Exchange Online как часть Office 365. Журнал информации из ответов
HTTP-заголовок Описание идентификатор запроса Сгенерированный сервером идентификатор запроса, соответствующего этому ответу. идентификатор запроса клиента Значение заголовка client-request-id в запросе. X-FEServer Полное доменное имя сервера клиентского доступа, обработавшего запрос. X-TargetBEServer Полное доменное имя сервера почтовых ящиков, обработавшего запрос. X-DiagInfo Дополнительная диагностическая информация, в зависимости от запроса. x-ms-диагностика Этот заголовок применим только в том случае, если в запросе используется аутентификация OAuth. errorId; причина = "причина" error_type = "тип ошибки"
Сообщить о задержке EWS в Microsoft
X-ClientStatistics: MessageId = <значение заголовка идентификатора запроса>, ResponseTime = <время в миллисекундах>, SoapAction = <операция EWS>
Следующие шаги
См. Также
Advanced Usage - Requests 2.24.0 документация
Объекты сеанса
Запросы. Он также сохраняет файлы cookie во всех запросах, сделанных из
Экземпляр сеанса и будет использовать пул соединений urllib3
. Так что если
вы делаете несколько запросов к одному и тому же хосту, базовый TCP
соединение будет использоваться повторно, что может привести к значительной производительности
увеличение (см. постоянное соединение HTTP). с = запросы.Session ()
s.get ('https://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get ('https://httpbin.org/cookies')
печать (r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'
выполняется путем предоставления данных свойствам объекта сеанса: с = запросы.Сессия ()
s.auth = ('пользователь', 'пройти')
s.headers.update ({'x-test': 'true'})
# отправляются оба 'x-test' и 'x-test2'
s.get ('https://httpbin.org/headers', headers = {'x-test2': 'true'})
установленные значения уровня сеанса. Параметры уровня метода переопределяют сеанс
параметры.
запросы, даже если используется сеанс. В этом примере будут отправлены только файлы cookie
с первым запросом, но не вторым: с = запросы.Сессия ()
r = s.get ('https://httpbin.org/cookies', cookies = {'from-my': 'browser'})
печать (r.text)
# '{"cookies": {"from-my": "browser"}}'
r = s.get ('https://httpbin.org/cookies')
печать (r.text)
# '{"печенье": {}}'
Служебные функции cookie для управления
Session.cookies
. с помощью requests.Session () как s:
s.get ('https://httpbin.org/cookies/set/sessioncookie/123456789')
с
будет
завершился, даже если произошли необработанные исключения.
для этого вы просто устанавливаете значение этого ключа на Нет
на уровне метода
параметр. Он будет автоматически пропущен.
См. Документацию по API сеанса, чтобы узнать больше. Объекты запроса и ответа
запросам.get ()
и друзья, вы делаете два
главные вещи. Сначала вы создаете объект Request
, который будет
отправляется на сервер для запроса или запроса какого-либо ресурса. Во-вторых, ответ
объект создается после того, как Requests получает ответ от сервера.
Объект Response
содержит всю информацию, возвращаемую сервером и
также содержит созданный вами изначально объект Request
. Вот простой
запрос на получение очень важной информации с серверов Википедии: >>> r = запросы.получить ('https://en.wikipedia.org/wiki/Monty_Python')
>>> r.headers
{'content-length': '56170', 'x-content-type-options': 'nosniff', 'x-cache':
'HIT из cp1006.eqiad.wmnet, MISS из cp1010.eqiad.wmnet', 'content-encoding':
'gzip', 'age': '3080', 'content-language': 'en', 'варьировать': 'Accept-Encoding, Cookie',
'server': 'Apache', 'last-modified': 'среда, 13 июня 2012 г., 01:33:50 GMT',
'connection': 'close', 'cache-control': 'private, s-maxage = 0, max-age = 0,
must-revalidate ',' date ':' Thu, 14 Jun 2012 12:59:39 GMT ',' content-type ':
'text / html; charset = UTF-8 ',' x-cache-lookup ':' HIT из cp1006.eqiad.wmnet: 3128,
MISS из cp1010.eqiad.wmnet: 80 '}
запрос, а затем заголовки запроса: >>> r.request.headers
{'Accept-Encoding': 'identity, deflate, compress, gzip',
'Accept': '* / *', 'User-Agent': 'python-requests / 1.2.0'}
Подготовленных запросов
Response
из вызова API или вызова сеанса атрибут запроса фактически является
PreparedRequest
, который был использован.В некоторых случаях вы можете захотеть сделать дополнительные
работать с телом или заголовками (или чем-то еще) перед отправкой
запрос. Вот простой рецепт: из запросов на импорт Запрос, сеанс
s = Сессия ()
req = Запрос ('POST', url, data = data, headers = headers)
prepped = req.prepare ()
# сделать что-нибудь с prepped.body
prepped.body = 'Нет, я хочу именно это как тело.'
# сделать что-нибудь с prepped.headers
del prepped.headers ['Content-Type']
resp = s.send (подготовлено,
stream = поток,
verify = проверить,
прокси = прокси,
сертификат = сертификат,
timeout = время ожидания
)
печать (соотв.status_code)
Request
, вы
немедленно подготовьте его и измените объект PreparedRequest
. Ты тогда
отправьте это с другими параметрами, которые вы бы отправили на запросов. *
или
Сессия. *
.
Сессия
объект. В частности,
Сессия
-уровневое состояние, такое как файлы cookie
не попадать на ваш запрос.Чтобы получить