Редирект Хаос Мтел част 2

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

Намери се едно огледално копие на Debian:
http://debian.mobiltel.bg/

На следния адрес:
http://w4.mtel.net
може да бъде намерен сайта на GPS.BG:
http://www.gps.bg

Сайта на една известна адвокатска кантора може да бъде видян по няколко начина:
http://mbridge.mtel.net/
http://ipabg.mtel.net/
http://balkandji.mtel.net/
http://dom.mtel.net/
http://marisimone.mtel.net/
http://a.mtel.net/

Тук и
http://w6.mtel.net/
има някакъв изоставен Tomcat, който за сметка на това също е добре индексиран.

Далеч по-интересното е какво се случва със останалите домейни на придобити компании през времето. Това са 3 компании – Близу, СпектърНет и МегаЛан.

Започваме със Близу:
$ curl -I blizoo.bg
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:43:57 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Location: http://www.blizoo.bg/
Content-Type: text/html; charset=iso-8859-1

$ curl -I www.blizoo.bg
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:43:59 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
X-Powered-By: PHP/7.0.17
Set-Cookie: PHPSESSID=vcpe31mj0lh1r66m3snkofrga4; path=/; domain=.blizoo.bg
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Location: https://www.a1.bg/blanding
Content-Type: text/html; charset=UTF-8

$ curl -I https://www.blizoo.bg
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:44:05 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
X-Powered-By: PHP/7.0.17
Set-Cookie: PHPSESSID=esk78doapo8ncgda4j1ddffj75; path=/; domain=.blizoo.bg
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Location: https://www.a1.bg/blanding
Content-Type: text/html; charset=UTF-8

$ curl -I https://blizoo.bg
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:44:08 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Location: http://www.blizoo.bg/
Content-Type: text/html; charset=iso-8859-1

Както виждаме има някакви редиректи и те работят по някакъв начин. Интересното е, че стария сайт обаче още работи:
$ curl -I www.blizoo.bg/images/Root/downloads/gt/p3_pricelist_blizoo.pdf
HTTP/1.1 200 OK
Date: Fri, 17 Aug 2018 11:43:38 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Last-Modified: Thu, 28 Jan 2016 09:52:29 GMT
ETag: "118c7c-52a61e06d3140"
Accept-Ranges: bytes
Content-Length: 1150076
Cache-Control: max-age=86400
Expires: Sat, 18 Aug 2018 11:43:38 GMT
Content-Type: application/pdf

$ curl -I https://www.blizoo.bg/images/Root/downloads/gt/p3_pricelist_blizoo.pdf
HTTP/1.1 200 OK
Date: Fri, 17 Aug 2018 11:54:25 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Last-Modified: Thu, 28 Jan 2016 09:52:29 GMT
ETag: "118c7c-52a61e06d3140"
Accept-Ranges: bytes
Content-Length: 1150076
Cache-Control: max-age=86400
Expires: Sat, 18 Aug 2018 11:54:25 GMT
Content-Type: application/pdf

Или поне някакви части от него са все още видими. За да бъде объркването пълно си има и напълно работещи редиректи вътре в самия сайт:
$ curl -I blizoo.bg/images/Root/downloads/gt/p3_pricelist_blizoo.pdf
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:54:13 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Location: http://www.blizoo.bg/images/Root/downloads/gt/p3_pricelist_blizoo.pdf
Cache-Control: max-age=2592000
Expires: Sun, 16 Sep 2018 11:54:13 GMT
Content-Type: text/html; charset=iso-8859-1

$ curl -I https://blizoo.bg/images/Root/downloads/gt/p3_pricelist_blizoo.pdf
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:54:20 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Location: http://www.blizoo.bg/images/Root/downloads/gt/p3_pricelist_blizoo.pdf
Cache-Control: max-age=2592000
Expires: Sun, 16 Sep 2018 11:54:20 GMT
Content-Type: text/html; charset=iso-8859-1

И ето още една част:

$ curl -I https://www.blizoo.bg/images/Root/downloads/gt/
HTTP/1.1 403 Forbidden
Date: Fri, 17 Aug 2018 11:56:31 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Content-Type: text/html; charset=iso-8859-1

$ curl -I http://www.blizoo.bg/images/Root/downloads/gt/
HTTP/1.1 403 Forbidden
Date: Fri, 17 Aug 2018 11:56:45 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Content-Type: text/html; charset=iso-8859-1< $ curl -I https://blizoo.bg/images/Root/downloads/gt/
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:56:37 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Location: http://www.blizoo.bg/images/Root/downloads/gt/
Content-Type: text/html; charset=iso-8859-1

$ curl -I http://blizoo.bg/images/Root/downloads/gt/
HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Aug 2018 11:56:42 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Location: http://www.blizoo.bg/images/Root/downloads/gt/
Content-Type: text/html; charset=iso-8859-1
/code>

И още един файл който е важен:
$ curl -I http://www.blizoo.bg/robots.txt
HTTP/1.1 200 OK
Date: Fri, 17 Aug 2018 12:02:53 GMT
Server: Apache/2.4.25 (FreeBSD) OpenSSL/1.0.2k-freebsd PHP/7.0.17
Last-Modified: Tue, 04 Dec 2012 15:52:37 GMT
ETag: "18-4d008dadbdb40"
Accept-Ranges: bytes
Content-Length: 24
Content-Type: text/plain

Това допълнително обърква роботите и те продължават да се опитват да индексират стария сайт на Близу.
Затова навсякъде се казва когато се прави миграция на домейн към друг да се прави цялостен 301 редирект от стария към новия.

Втората закупена компания е Мегалан:
curl -I megalan.bg
HTTP/1.1 302 Redirect
Content-Length: 145
Content-Type: text/html; charset=UTF-8
Location: https://www.megalan.bg
Server: Microsoft-IIS/8.5
Date: Fri, 17 Aug 2018 12:07:41 GMT

$ curl -I www.megalan.bg -L
curl: (7) Failed to connect to www.megalan.bg port 80: Operation timed out

$ curl -I https://www.megalan.bg -L
curl: (7) Failed to connect to www.megalan.bg port 443: Network is unreachable

$ curl -I megalan.bg/robots.txt -L
HTTP/1.1 302 Redirect
Content-Length: 145
Content-Type: text/html; charset=UTF-8
Location: https://www.megalan.bg
Server: Microsoft-IIS/8.5
Date: Fri, 17 Aug 2018 12:25:26 GMT

За жалост тук не виждаме никакъв реализиран редирект и не можем да осъществим връзка със www.megalan.bg.
Което по същество си е още една пропусната възможност защото домейна беше много добре индексиран във миналото като интернет доставчик за София.

И последния участник е Спектърнет. По стар народен обичай за тукашните ширини те са използвали 2 домейна като основни:
spnet.net
spectrumnet.bg
а година преди придобиването им от МТел бяха закупили и небезизвестните Орбител:
orbitel.bg
заедно със хитовия им проект тогава
hit.bg

Но нека да започнем по реда им:
$ curl spnet.net -I
HTTP/1.1 403 Forbidden
Date: Fri, 17 Aug 2018 12:37:57 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Content-Type: text/html; charset=iso-8859-1

$ curl www.spnet.net -I
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Fri, 17 Aug 2018 12:38:00 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/spnet
Vary: Accept-Encoding

$ curl https://spnet.net -I
HTTP/1.1 403 Forbidden
Date: Fri, 17 Aug 2018 12:39:04 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
Accept-Ranges: bytes
Content-Length: 4897
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Content-Type: text/html; charset=UTF-8

$ curl https://www.spnet.net -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Fri, 17 Aug 2018 12:39:11 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/spnet
Vary: Accept-Encoding

Тук вече редиректите са реализирани, но само на ниво www. Когато се достъпва домейна без www се връща грешка 403.
Интересното е, че на този домейн е вързано и огледалното копие на Debian:
http://debian.spnet.net/
но то може да се достъпи и ето така:
http://bbgra.spnet.net

Има обаче проблем при достъпа на spectrumnet.bg:
$ curl -I http://www.spectrumnet.bg/
curl: (7) Failed to connect to www.spectrumnet.bg port 80: Operation timed out
$ curl -I http://spectrumnet.bg/
curl: (7) Failed to connect to spectrumnet.bg port 80: Operation timed out
$ curl -I https://www.spectrumnet.bg/
curl: (7) Failed to connect to www.spectrumnet.bg port 443: Operation timed out
$ curl -I https://spectrumnet.bg/
curl: (7) Failed to connect to spectrumnet.bg port 443: Operation timed out

Така, че този домейн също попада във графата "пропуснати възможности".

Нека да видим и какво се случва със Орбител:
$ curl -I orbitel.bg
curl: (6) Could not resolve host: orbitel.bg
$ curl -I www.orbitel.bg
curl: (6) Could not resolve host: www.orbitel.bg

И Хит:
$ curl -I hit.bg
curl: (7) Failed to connect to hit.bg port 80: Operation timed out
$ curl -I www.hit.bg
curl: (7) Failed to connect to www.hit.bg port 80: Operation timed out

Още една "пропусната възможност".

Накратко както виждате сами вместо да се направят хубави редиректи и да се усили силата основния домейн (вече) А1.
Редиректите където са направени или са половинчато направени като допълнително объркват ботовете или самите домейни не работят поради някаква причина.

Може би мениджърите на А1 отговорни за онлайн дейностите би било хубаво да направят един хубав одит на сайтовете си преди да продължат напред със развиването на основния си сайт.

Редирект Хаос Мтел

Сега ще ви покажа как неправилни редиректи може да ви навредят много.

Както знаете Мтел вече не съществува и имаме А1. Нека да видим какво се случва със редиректите на сайта им?

Започваме със https://mobiltel.bg

$ curl https://mobiltel.bg/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:02:33 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:02:33 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:02:33 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "181300-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

И проблема лъсна – сайта на A1 може да се гледа и под HTTP. Продължаваме със http

$ curl http://mobiltel.bg/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:03:32 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:03:32 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:03:32 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "182509-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

И добавяме и www със и без HTTPS
$ curl http://www.mobiltel.bg/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:04:49 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:04:49 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:04:50 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "181300-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

$ curl https://www.mobiltel.bg/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:04:55 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:04:55 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:04:55 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "182509-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

Интересното е, че редиректа работи само към основната страница. Ако се зададе вътрешна страница линка се предава към последващия редирект.

$ curl https://www.mobiltel.bg/robots.txt -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:09:00 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/robots.txt
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:09:00 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/robots.txt
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:09:00 GMT
Content-Type: text/plain
Connection: close
Last-Modified: Thu, 17 May 2018 12:29:47 GMT
ETag: "183f09-4b8-56c65fdaca4c0"
Accept-Ranges: bytes
Content-Length: 1208
Vary: Accept-Encoding

Продължаваме със един друг домейн mtel.net

$ curl http://www.mtel.net/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:11:17 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:11:17 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:11:17 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "182509-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

$ curl http://mtel.net/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:11:46 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mtel.bg/
Vary: Accept-Encoding

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:11:46 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:11:46 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "182509-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

Същия резултат е и под HTTPS със или без www отпред.

Следващия домейн е mtel.bg койо май издържа най-дълго:
$ curl http://www.mtel.bg/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:21:34 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:21:34 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "182509-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

$ curl http://mtel.bg/ -L -I -k
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:21:41 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/mtel-stava-A1/
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:21:41 GMT
Content-Type: text/html
Connection: close
Last-Modified: Tue, 07 Aug 2018 08:31:39 GMT
ETag: "246b22-e8b2-572d43907d0c0"
Accept-Ranges: bytes
Content-Length: 59570
Vary: Accept-Encoding

Същия резултат е и под HTTPS със или без WWW.

Доста по-интересно е тук:
http://www.a1.bg/sitemap.xml
където линковете са към:
http://www.mtel.bg/sitemap_www.xml
http://www.mtel.bg/sitemap_products.xml
и изглежда генерирането им е спряло някъде през Май 2018та.

Влизаме във сайтмапа със продуктите където също сочат към mtel.bg и си харесваме първия:
https://www.mtel.bg/ustroystva/laptopi/acer/travelmate-x349.3370
и отваряме сорса. Намираме още 2 линка към mtel.bg:
http://mtel.bg/public/file/id/ebd9dc98957b723ce7be035e56dfcfe9/acer-travelmate-x349-product.png
https://media.mtel.bg/newsite2015/images/mega-menu/myki.jpg

Втория домейн може да се зареди със или без HTTPS разбира се. По-фрапантното е, че същата снимка може да се намери и тук:
http://media.a1.bg/newsite2015/images/mega-menu/myki.jpg
https://media.a1.bg/newsite2015/images/mega-menu/myki.jpg

Разбира се този хаос има и една приятна новина – все пак логването минава задължително през HTTPS:
$ curl -I http://a1.bg/moyat-a1-upravlyavay-sam-svoite-uslugi -L
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:31:39 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/moyat-a1-upravlyavay-sam-svoite-uslugi
Vary: Accept-Encoding

HTTP/1.1 302 Found
Server: nginx
Date: Thu, 16 Aug 2018 12:31:39 GMT
Content-Type: text/html
Connection: close
Set-Cookie: PHPSESSID=i7hoh0m33jdqkf36rldg41vlo6; path=/; domain=www.a1.bg; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=dss9df9253jluc4jbejkpjtqa3; path=/; domain=www.a1.bg; HttpOnly
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:31:39 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:31:39 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:31:39 GMT; path=/; domain=.a1.bg
Location: https://www.a1.bg/moyat-a1-upravlyavay-sam-svoite-uslugi
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:31:41 GMT
Content-Type: text/html
Connection: close
Set-Cookie: PHPSESSID=kl0lfvrmpp4pa4182fm77mrfm3; path=/; domain=www.a1.bg; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=v3a01obe7oocra81c2hceir6e1; path=/; domain=www.a1.bg; HttpOnly
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:31:41 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:31:41 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:31:41 GMT; path=/; domain=.a1.bg
Vary: Accept-Encoding

$ curl -I http://www.a1.bg/moyat-a1-upravlyavay-sam-svoite-uslugi -L
HTTP/1.1 302 Found
Server: nginx
Date: Thu, 16 Aug 2018 12:32:04 GMT
Content-Type: text/html
Connection: close
Set-Cookie: PHPSESSID=q36aqoaea4udfln23p4p5mms00; path=/; domain=www.a1.bg; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=t8nns92n1i1qjme3b55dgnoq03; path=/; domain=www.a1.bg; HttpOnly
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:32:04 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:32:04 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:32:04 GMT; path=/; domain=.a1.bg
Location: https://www.a1.bg/moyat-a1-upravlyavay-sam-svoite-uslugi
Vary: Accept-Encoding

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Aug 2018 12:32:05 GMT
Content-Type: text/html
Connection: close
Set-Cookie: PHPSESSID=bl1fub9vcmqlnjmug87nsam4a7; path=/; domain=www.a1.bg; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=di8qdhfdkd56rg68ca8757kta4; path=/; domain=www.a1.bg; HttpOnly
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:32:04 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:32:04 GMT; path=/; domain=.a1.bg
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:32:04 GMT; path=/; domain=.a1.bg
Vary: Accept-Encoding

Обаче защо със 302 редирект?

И последен тест със новия домейн А1:

$ curl -I http://a1.bg/test -L
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:37:21 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/test
Vary: Accept-Encoding

HTTP/1.1 404 Not Found
Server: nginx
Date: Thu, 16 Aug 2018 12:37:21 GMT
Content-Type: text/html
Connection: close
Set-Cookie: PHPSESSID=em2uptm6ja7735d74ons6srka1; path=/; domain=www.a1.bg; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=bjfopn6pgd82glq69cp9sumt97; path=/; domain=www.a1.bg; HttpOnly
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:37:21 GMT; path=/; domain=.a1.bg
Vary: Accept-Encoding

$ curl -I https://a1.bg/test -L
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 16 Aug 2018 12:36:41 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.a1.bg/test
Vary: Accept-Encoding

HTTP/1.1 404 Not Found
Server: nginx
Date: Thu, 16 Aug 2018 12:36:41 GMT
Content-Type: text/html
Connection: close
Set-Cookie: PHPSESSID=rurlb92cva9hkr3tac8mf95l81; path=/; domain=www.a1.bg; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=u9190l2kanjvkbl1jajm2s3b33; path=/; domain=www.a1.bg; HttpOnly
Set-Cookie: device=desktop; expires=Sun, 13-Aug-2028 12:36:41 GMT; path=/; domain=.a1.bg
Vary: Accept-Encoding

Разбира се за да бъде хаоса пълен canonical на техните адреси сочи към HTTPS://WWW което допълнително обърква бота кой е основния домейн.

Накратко ако правите редиректи не правете като тях. Това е и основната причина сайта все още да се вижда така:
site:mtel.bg
site:mobiltel.bg
site:mtel.net
и новия A1 да е частично индексиран близо 3 месеца след пускането му.

Статията има допълнение което може да бъде прочетено ето тук.

PHP7 Mac

Ако сте на Мак и не ви се ползват Портовете или Самоварките (ports/homebrew) обаче PHP 7 ви липсва…

https://php-osx.liip.ch

Поддържа се всичко от PHP 5.3 до 7.3 и работи на всички macOS 10.6 до 10.13.

Node.js and npm update

Наложи ми се да обновя на macOS някакъв остарял node.js и ето конкретните стъпки
1. Пишем npm version и виждаме това:
{ npm: ‘3.10.3’,
ares: ‘1.10.1-DEV’,
http_parser: ‘2.7.0’,
icu: ‘57.1’,
modules: ’48’,
node: ‘6.5.0’,
openssl: ‘1.0.2h’,
uv: ‘1.9.1’,
v8: ‘5.1.281.81’,
zlib: ‘1.2.8’ }
2. Пишем node -V и виждаме това:
v6.5.0

Които са инсталирани някъде 2015 или 2016та и са праисторически спрямо днешните стандарти.

Обновяванието става лесно:
1. sudo npm install -g npm
2. npm version вече връща това:
{ npm: ‘6.1.0’,
ares: ‘1.14.0’,
cldr: ‘33.0’,
http_parser: ‘2.8.0’,
icu: ‘61.1’,
modules: ’64’,
napi: ‘3’,
nghttp2: ‘1.32.0’,
node: ‘10.6.0’,
openssl: ‘1.1.0h’,
tz: ‘2018c’,
unicode: ‘10.0’,
uv: ‘1.21.0’,
v8: ‘6.7.288.46-node.13’,
zlib: ‘1.2.11’ }
3. sudo npm cache clean -f
4. sudo npm install -g n
5. И вече можем да напишем sudo n latest или sudo n stable. Изчакваме малко
6. node -v вече връща
v10.6.0

Оттук насетне обновяването към последните версии е само:
1. sudo npm install -g npm
2. sudo npm cache clean -f
3. sudo n stable (или latest)

Прескачане на paywalls

Един от най-хитрите начини за прескачане на платените механизми на сайтовете са следните два кода
javascript:window.location="https://m.facebook.com/l.php?u="+encodeURIComponent(window.location.href);
или
javascript:window.location="https://www.google.com/url?rct=j&url="+encodeURIComponent(window.location.href);

Как работят?

Маркирате един от тях и го завлачвате във лентата за отметките. Когато някой сайт започне да мрънка как не сте си платили за да видите статията избирате отметката записана по рано и си я прочитате без проблем. Защото тези paywalls всъщност внимават когато посетител дойде от Facebook или Google и им показва цялата статия. Със помоща на тези 2 кода вие излъгвате сайта, че идвате  баш от тях.

смъкване снимки

Как да смъкнем картинки от Google Images Search?

Ако някога ви се е налагало да смъквате много картинки от Google по зададена ключова дума трябва да сте били отегчени до смърт от цялото това кликане и записване. Наскоро и на мен ми се наложи и точно поради това намерих един скрипт и ще ви покажа как да го използвате.

var cont=document.getElementsByTagName("body")[0];
var imgs=document.getElementsByTagName("a");
var i=0;var divv= document.createElement("div");
var aray=new Array();var j=-1;
while(++i<imgs.length){

  if(imgs[i].href.indexOf("/imgres?imgurl=http")>0){
divv.appendChild(document.createElement("br"));
aray[++j]=decodeURIComponent(imgs[i].href).split(/=|%|&/)[1].split("?imgref")[0];
divv.appendChild(document.createTextNode(aray[j]));
}
}
cont.insertBefore(divv,cont.childNodes[0]);

Как  да го използваме?

  1. Отваряме любимия си браузър и започваме да търсим по картинка.
  2. Когато се заредят снимките натискаме нейде десен бутон на мишката -> Inspect Element и отиваме на таба „Console“
  3. Копираме  скрипта отгоре и го поставяме там. Натискаме Enter. На някой браузъри може първите няколко резултата да са подпъхнати под хедъра. Махаме хедъра който пречи.
  4. Намираме всички линкове, копираме ги във нов текстов файл. Запазваме текстовия файл примерно като list.txt
  5. Изпълняваме една от следните команди във команден ред:
    wget -i list.txt
    cat file-with-list-of-urls.txt | xargs -n 1 curl -LO
    cat file-with-list-of-urls.txt | xargs -n 1 -P 10 curl -LO
    .
    Резултата и от трите команди е, че файловете се смъкват локално на компютъра. Ако първите две смъкват файл по файл то последната смъква по 10 файла наведнъж.

Така процеса е полу-автоматизиран и много по-бърз.

Допълнение от Владимир Василев за което се бях сетил, но съм го пропуснал:
Внимавайте за лицензите! Това, че смъквате изображенията не означава, че имате права върху тях самите. Ако искате да ви бъдат показани само такива изображения със съотвените лицензи ползвайте инструментите на търсачката. Безразборното използване на чужди изображения без необходимите права върху тях може да ви докара правни проблеми със собственниците на правата.

google images лицензи

Затова ако ще използвате снимките някъде проверете лицензите преди това.

SaveSave

Страната на съветите

От много време все някой ме спира или иска съвет по нещо си. Което е изморително от психическа гледна точка, защото трябва да изслушаш човека, да вникнеш във проблема му и чак тогава да му дадеш съвет. Което разбира се отнема време, но все пак се почва „аз само за малко“. Та винаги се сещам за бруталния руски виц:

Мальчик пас стадо баранов, а когда он заснул,бараны разбежались. Мальчик пошел искать стадо и у подножия горы увидел пожилого человека.“Не видели ли вы,дедушка моих баранов?““Нет,мальчик,не видел,но я дам тебе совет-поднимись выше в гору, там сидит мой отец,он все знает…“ Мальчик поднялся выше и,увидев следующего старика, спросил и у него о баранах. „Нет,дорогой, я их не видел.Но я тоже дам тебе совет- поднимись еще выше…“На самой вершине горы сидел глубокий старик.“Нет ли здесь моих баранов?“-спросил мальчик. „Нет, баранов нет, но есть добрый совет….“ „Что вы все мне даете советы? Мне нужны бараны,а не советы!“ „Дорогой , ты забыл , в какой стране живешь! У нас не страна баранов, а Страна Советов!“

Та се превръщам във страната на съветите.

Xcode documentation error

От известно време виждам само това докато се опитвам да инсталирам документацията:

Could not download and install Guides and Sample Code. An unexpected error occurred while moving files to the final destination.

А решението се оказа много просто

cd ~/Library/Developer/Shared/
rmdir Shared/
mkdir Shared
cd Shared/
mkdir Documentation
cd Documentation/
mkdir DocSets
cd DocSets/

И край на проблемите ми със инсталирането на документацията. Всичко само защото пътя до DocSets е бил със объркани права

използване на принтер от мобилно устройство

Принтиране от мобилно устройство

Използването на принтер от мобилно устройство било то таблет или телефон е лесно когато имате принтер със такава поддръжка. Обикновенно тези принтери разполагат със връзка към безжична мрежа и (ама разбира се!) съответно са малко по-скъпи. Проблема възниква когато разполагате със по-стар принтер който е или само жичен (USB или Centronics) или принтер със безжична поддръжка, но по-стар модел. Сега ще ви покажа как да се преборите със тази житейска несправедливост.

Печатане от Android

Под Android проблемите се решават сравнително по-лесно със Google Cloud Print. Изисква се браузър Chrome и регистриране на принтера във облака. Така можете да принтирате от целия свят на вашия принтер. Разбира се има уловка – трябва да се логнете във мобилното устройство и във Chrome със един и същи потребител. Ето и процедурата:

  • Регистрираме принтера на настолния компютър тук chrome://devices/
  • На мобилното устройство инсталираме Cloud Print

И общо взето е това. Има няколко благинки:

  • можем да използваме принтера от друг компютър. Хитрото е, че принтера тогава може да се намира във друг град, страна и даже континент. Разбира само от Chrome
  • можем да си закупим по-модерен принтер със поддръжка на Google Cloud Print. Текущите модели са налични ето тук
  • можем да наблюдаваме заявките през интернет оттук
  • можем да печатаме документи от Google Drive директно
  • можем да печатаме директно към CUPS под Linux със използване на специализиран драйвер за него. Кода на драйвера може да бъде взет оттук или да използвате прекомпилиран пакет оттук

И тъжната новина – връзката става само и единственно през интернет. Ако няма интернет дори и във същата стая да се намира принтера ако не е вързан със кабел към компютъра ще е просто неизползваем. Същото важи и за мобилното устройство – дори и да е във същата безжична мрежа. Ако няма интернет няма да може да използва принтера.

Печатане от iOS

Под iOS нещата са малко по-различни. Тук най-лесния и удобен начин е когато принтера поддържа AirPrint през протокола Bonjour. Ако нямаме такъв принтер разбира се ще си го емулираме:

  • инсталираме HandyPrint на macOS оттук. Под Windows ще трябва да се хакне ето така или оттук със по-новата версия. Отделно под Windows ще се наложи да инсталирате и Bonjour Print Services оттук.
  • на мобилното устройство избираме иконката за споделяне (share) и ако приложението поддържа AirPrint принтера ще се появи във списъка. Няма никакви настройки

Сега малко особенности:

  • принтера трябва да се намира във същата локална мрежа със мобилното устройство
  • няма функция печатане през интернет
  • може да се печата дори и когато интернет липсва във локалната мрежа
  • ако имате принтер свързан със AirPort Extreme или AirPort Express то самия принтер трябва да поддържа AirPrint за да можете да го ползвате. Официален списък на поддържаните принтери през AirPort има тук и неофициални тук и тук. Но ще трябва да проверите дали и принтера поддържа AirPrint иначе от мобилно устройство няма да можете да го видите и използвате
  • може да се ползва CUPS и да се емулира подобен принтер. За повече информация как – тук, тук и тук

Разбира се това са официалните начини. Има и алтернативи. Hewlett Packard поддържат стандарта ePrint използващ техните устройства. FedEx имат мобилно принтиране също тук – като след отпечатването можете да изберете да минете през техен офис за да го вземете или те да ви го доставят. Можете да използвате Printer Pro – оттук или някое от многобройните алтернативни приложения. Можете да видите дали производителя на принтера ви няма приложение: Samsung, Canon, Epson или други.

Както виждате – има богат избор вече на пазара. А само преди няколко години използването на принтер от мобилно устройство беше мит. Вече е реалност.