Hacker News new | ask | show | jobs
by darawk 2959 days ago
> you have no right or way to dictate to me what program should I use to render the data

Why not? Why am I not allowed to say "If you want to consume my content, you need to view it in Firefox", if you don't want to agree to my terms, don't view my content. This is how all contracts work. This is how all business works. Why is the internet different?

1 comments

> Why is the internet different?

The Internet isn't really different, it's just people are bending over backwards to have their cake (send free content) and eat it too (tell people how they're supposed to view that content).

When you're serving stuff over HTTP, you're giving me data in response to a valid HTTP request. That data is a binary/text blob. The HTTP protocol does not include any technical or legal provision that allows you to control how I interpret that binary/text blob. You can say "only for Firefox" all you want, but the only way to make it meaningful is to not send the data unless you're sure I'll be using Firefox to view it.

I'm focusing on the protocol here for a reason. That protocol comes with the set of expectations; probably the most important is that you get to decide how you respond, but not what I do with that response. Understanding of that is necessary to draw correct analogies to other real-world practices.

So a real-world analogy would go like this: you've set up a stand on the street, with a big sign saying "FREE BOOK ABOUT CATS". I come to you, and ask if I can have that book (GET request). You give me a book (content) and a hat with a company logo (an ad). I leave you, and on my way discover that the first page of the book says, "you can only read this book if you're wearing the hat that was given to you".

It would be ridiculous of you to expect me to honor the request in that book. Hell, it would be ridiculous of you to require that I actually read the book. Maybe I only needed it as paperweight, or as starter fuel for a wood-burning stove. Oh, and I threw the cap you gave me away, without even looking at it.

The only implicit contract we had in this example was that I might get a free book if I ask nicely. That's also the only implicit contract that you get when you host a publicly routable HTTP server.

I’d add that there’s nothing stopping anyone from creating their own protocols and their own content browsers that can enforce whatever contract the software makers and content creators choose.

DRM and proprietary apps already do this.

The HTTP User Agent implies user agency when it comes to how and what content is rendered.

> So a real-world analogy would go like this: you've set up a stand on the street, with a big sign saying "FREE BOOK ABOUT CATS". I come to you, and ask if I can have that book (GET request).

I think the substance of our disagreement comes down to this. You think that a website is a sign that says "FREE CONTENT", whereas I don't believe the HTTP protocol represents any particular specification regarding the terms of access. The HTTP protocol allows you to access the data. However, a storefront allows you to access the goods inside, but that doesn't entitle you to take them without payment.

The HTTP doesn't just allow access to data. It mediates the entire exchange.

As others pointed out, a HTTP 200 response is an action that's explicitly defined to mean "here, have this data, we're done here". If a physical storefront was running on HTTP, then the 200 response would contain just the image of the storefront (I get to view it how I like - maybe through glasses, maybe through rose-tinted glasses, or maybe via touch if I'm blind; and I definitely get to not look at advertisements if I don't like them). If I ask the store clerk for an item, they would usually respond with something like 402 Payment Required or 403 Forbidden, and that response would not contain the item I asked for. This would indicate I need to meet extra conditions to access the resource (like giving them cash along with my request).

Fundamentally it all boils down to this: on the Internet, if you send some data, you give it away. You can't, by default, dictate what I do with that data. The time to make those demands is before you hand over the data.