type is a required attribute for style tag, while media is optional, and is supported by most of the browsers. I’ve seen it working on IE6 
More details - http://www.w3schools.com/tags/tag_style.asp
Now as for script tags, putting them in head has one disadvantage -
scripts get loaded sequentially (unlike images and css, which can be done parallel)
So browser would block rendering the page till a script is getting loaded.
While putting javascript of say google analytics after the body makes sense, as it wont choke the page rendering and would get executed in the end.
It seems it’s been a tradition to put them in head tag. While you’re right, they can be put anywhere in the document.
More discussions here.
There could be a situation where script tag might necessarily land up inside body. It happened in a case where I had this kind of scenario -
module1 —> module2 —> module3
module1 generated the header,
module2 contained the business logic and passed data to the main body’s template
module3 did the footer.
Now we wished the interface to fetch some data through ajax and render it into an ExtJS grid.
And the necessary information for the extjs grid generation was only available in module2’s python controller and not accessible from anywhere else.
In that case there was no option but to have the script tag inserted into the <body>
In those cases sometimes you wish to control the time of execution of the javascript, typically you wish it to execute when page has finished rendering, so that html elements are ready for manipulation.
In such cases, jQuery’s $(document).load( function(){}); and ExtJS’s Ext.on(‘load’… come to help, to make your code work at right time.
Anyways, thanks for bringing it up, was a refresher.