Showing posts from March, 2020

Introduction to webshare API (navigator.share)

navigator.share is a JavaScript API providing a sharing interface similar to native apps
webshare API is supported on most updated mobile browsers Including Google chrome for Android
Sharing is done by passing an Object with parameters "url", "text" or "title" to navigator.share function.
For a webshare request to succeed you must supply at lest one of the parameters
navigator.share returns a Promise upon being called "upon
    "url": document.location,
    "text": "I'm an example",
    "title": document.title
.then(resp =>"Successfully shared"))
.catch(errors => console.error(errors))

How to stop moz dotbot from accessing your website

DotBot is Moz's web crawler, it gathers web data for the Moz Link Index
Dotbot obeys robots.txt rules before accessing your host machine so the easiest way to stop dotbot is by adding robots.txt rules that limit dotbot activities
To forbid a directory let's say "login" add;
User-agent: dotbot
Disallow: /login/
Upon reading and parsing directives above moz dotbot won't dare access you sites login sub directory in it's craw routine
To forbid an entire website's access include directives below;
User-agent: dotbot
Disallow: /
Alternatively you can limit crawl rate by adding directives below "time is probably in seconds"
User-agent: dotbot
Crawl-delay: 10
I've attached an nginx log it's a trail left by dotbot along with it's ip and moz support e-mail address; - - [19/Mar/2020:15:16:29 +0000] "GET /index.html HTTP/1.1" 200 13433 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.o…

How to set content disposition header for nginx server to force content download

Nginx (pronounced as engine x) is an HTTP server, reverse proxy server, as well as a mail proxy server
Nginx is well known for its high performance, stability, efficiency, rich feature set, simple configuration, and low resource consumption.
content disposition headers direct web browsers to save content instead of attempting to render it
To set content disposition open your desired server configuration in "/etc/nginx/sites-available/"
within your configuration add code below within your server {block}

location ~* (mp3|ogg|wav)$ {     add_header Content-Disposition "attachment"; }
mp3, ogg and wav are example file extensions matched by regular expressions rules
Test configuration by acessing mp3, ogg and wav files from your webserver
Alternatively you can force custom filenames as shown below "$1" substitutes filenames sent to clients. As an example its value corresponds to the requested file's extension
location ~* (mp3|ogg|wav)$ {     add_header C…

Reasons why you shouldn't consider hosting on github pages

Github pages is a service for deployment of static websites normally software documentation and blogs
Github pages is available on all public github repositories and on premium accounts it extends to private repositories as well.
So what's not to like about it. hmmmm think about it. that's too good to be true It's not a secret that "the only free cheese is served on a mouse trap"
1. "Downtime due to maintenance" Every now and then github pages websites undergo an annoying and imaginary maintenance that causes undesirable user experience especially for professional websites.
2. "Slow deployment"
I've been using github pages to host my static website with less than 10,000 pages deployment process knocked my entire site offline for 10 mins again that's unnecessary downtime sometimes it extended to days
3. "uninvited cloners"
So you put your site out there few days later 50 clones uninvited unwelcome and unnecessary
4. "Limi…

How to set content disposition headers for express nodejs apps

In express nodejs apps you can force the user agent "browser" to rather download content instead of displaying or attempting to render given content within the browser.

In this example assuming you're using express.static to serve content pass an Object as second argument to express.static function

An Object with configuration parameters; const config = {
setHeaders: res => res.set('Content-disposition',  'attachment')

In your code replace "path/to/media/" with the path pointing to the static content.

app.use('/media/', express.static('path/to/media/', config))
To test try accessing content at /media/*