Il est vrai que le code HTML spécifications permettre à certaines balises être omis dans certains cas, mais en général, cela est imprudent.
Il a deux effets: la spec de plus en plus complexes, ce qui rend plus difficile pour navigateur les auteurs à écrire corriger les implémentations (comme démontré par IE se tromper).
Cela rend la probabilité de navigateur erreurs dans ces parties de la spécification de haut. Comme un site web de l'auteur vous pouvez éviter le problème en incluant ces balises - ainsi, alors que la spec ne veut pas dire que vous devez, ce qui réduit la chance de choses qui vont mal, qui est de bonnes pratiques d'ingénierie.
Qui plus est, la dernière HTML 5.1 GT spec actuellement dit (garder à l'esprit c'est un travail en cours et peut encore changer).
Un élément de corps de la balise de début peut être omis si l'élément est vide, ou
si la première chose à l'intérieur de l'élément de corps n'est pas un caractère d'espace ou
un commentaire, sauf si la première chose à l'intérieur de l'élément de corps est une
meta, link, script, style, ou un élément du modèle.
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
C'est un peu subtile. Vous pouvez omettre le corps et la tête, et le navigateur va alors en déduire où ces éléments doivent être insérés. Cela comporte le risque de ne pas être explicite, ce qui pourrait causer de la confusion.
Donc, ce
<html>
<h1>hello</h1>
<script ... >
...
résultats dans le script de l'élément enfant de l'élément de corps, mais présent
<html>
<script ... >
<h1>hello</h1>
le résultat serait dans la balise script d'être un enfant de l'élément de tête.
Vous pourriez être explicite en faisant cela
<html>
<body>
<script ... >
<h1>hello</h1>
et puis selon ce que vous avez tout d'abord, le script ou le h1, ils seront tous deux, de manière prévisible apparaissent dans le corps de l'élément. Ce sont des choses qui sont faciles à oublier tout de refactoring et de débogage de code. (disons par exemple, vous avez JS qui est à la recherche pour le 1er élément de script dans le corps - dans le deuxième extrait, il serait d'arrêt de travail).
En règle générale, être explicite sur les choses, c'est toujours mieux que de laisser les choses ouvertes à l'interprétation. À cet égard, le XHTML est meilleure car elle vous oblige à être complètement explicite au sujet de votre structure de l'élément dans votre code, ce qui rend plus simple, et donc moins sujettes à des erreurs d'interprétation.
Donc oui, vous pouvez les omettre et techniquement valable, mais il est généralement déconseillé de le faire.