Клуб API Карт

Запрос KML с сервера

Пост в архиве.

яндексом имеет параметр

X-REAL-IP: ::ffff:xxx.xxx.xxx.xxx

гдe xxx.xxx.xxx.xxx - адрес клиента, запросившего у яндекса файл.

 

Проблема в том, что этот заголовок 100% укладывает сервер  Lighttpd с ошибкой парсинга:

ttp_req.c.284: (trace) parsing failed at token ((null) [3]), header: GET /wp-c/uploads/event-documents/45/1339061474---6-8.05.2012.kml HTTP/1.1
Host: www.ykoctpa.ru
Accept: */*
Accept-Encoding: gzip,deflate
X-REAL-IP: ::ffff:xxx.xxx.xxx.xxx
Connection: Keep-Alive

 

ибо для его парсера ":" вне кавычек может быть только разделителем между именем и значением поля заголовка. В результате яндекс получает ошибку 500, а юзер остается без трека.

Нельзя ли вообще убрать эту искусственно прилепленную часть ipv6?

 

5 комментариев

вобщем-то я уже сам сделал транслятор трека в полилинию для показа на карте яндекса в случае ошибки geoXml.load, да еще и дугласом с паркером прошелся - но все же...

Это нормальный маппинг v4 через v6.

Аналогично запросы у вас будут фэйлится, если клиент придет с честного ipv6.

Lighttpd1.4 запрос обрабатывает корректно:

 

Escape character is '^]'.
GET /wp-c/uploads/event-documents/45/1339061474---6-8.05.2012.kml HTTP/1.1
Host: www.ykoctpa.ru
Accept: */*
Accept-Encoding: gzip,deflate
X-REAL-IP: ::ffff:127.0.0.1
Connection: Keep-Alive

HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 345
Date: Wed, 13 Mar 2013 16:36:10 GMT
Server: lighttpd/1.4.19


         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
  404 - Not Found
 
 
 

404 - Not Found


 

Connection closed by foreign host.

 

 

Понятное дело что маппинг - непонятно зачем. Честных ipv6 настолько мало, что ими можно пренебречь.

1.4 может и отрабатывает, только вот у меня 1.5 по весьма веским причинам (требование движка), а его лог я дал.Убираю из запроса сие безобразие - и все работает.

Неужто нельзя сделать параметр запроса geoXml.load, позволяющий убрать этот маппинг?

 

1.5  - нестабильная и заброшенная автором ветка lighttpd, увы.

В данном случае все происходит по rfc4291, если сервер слушает на v6, то он обязан транслировать ::ffff: в приложение, которое уже и делает запросы к вам.

Ipv6 не так уж мало и их количество будет расти. Возможно, вам имеет смысл задуматься о смене http-сервера или патче на текущую версию 1.5 (можно бэкпортировать код из 1.4).

 

Вобщем-то долгое время весь лайти выглядел заброшенным :) Однако пока еще на 1.5 есть фичи, которые не реализованы даже в последнем билде ветки 1.4 - например, только на 1.5 работает многопоточный аплоад файлов. А мне это важнее - как я уже говорил, трек я за пару часов научился и сам показывать.

Патчить вебсервер - вариант последний, мне пока хватает возни с сотней мб движка.

Так что спасибо за соучастие, но похоже код показатора треков придется выносить из обработки ошибок яндекса - и ставить вместо попытки загрузки парсером яндекса...