Miasma is a cloud of purple stench that makes your dwarves unhappy. It only occurs in subterranean areas (specifically, "Dark Subterranean" tiles; whether a tile is "Inside" or "Outside" makes no difference), and is caused by rotting items. It does not pass through doors.
 Rotten items
A rotten item is a corpse, body part or an item of food that has spoiled, either from not being in a stockpile (if food) or just over time (if a corpse or body part).
Often a job in a kitchen, still or farmer's workshop will be canceled with the announcement "...needs unrotten (item)". That doesn't mean you only have rotten ones, it means there is not an appropriate item that is available. Items that are forbidden, marked for dumping, or that have no path will be disregarded for workshop tasks.
Body parts of living dwarves may also be marked as rotten if they are affected by a syndrome that causes necrosis. The afflicted body part produces miasma from time to time.
 Food rot
Prepared food will rot the same as meat, cheese, eggs, and prepared fish, but plants will wither instead of producing miasma. The only place where food will not rot is in a stockpile, in a trade depot, in the embark wagon, when used as a reaction component, or while being carried by a dwarf, caravan pack animal, or wagon. Additionally, eggs will not rot in a nest box. It does not matter if the food is in a container; a barrel or pot full of meat left in a corridor will rot.
While you'd expect milk, fat, and tallow to rot, it seems that they do not. Nor do any of the other categories of food, including flours, drinks, seeds, and rock nut paste. A raw fish will rot no matter where it is stored, which is why it's important to prepare fish as quickly as possible.
 Avoiding miasma
To avoid miasma, either keep anything rotten above ground or alternatively have a subterranean refuse pile on its own in a room with several doors; this should halt the miasma's advance (although the room itself will still stink up). It will also not spread diagonally, so one possible solution is to have the only entrance be diagonal.
Alternately, excavate the roof of your refuse pile/butcher's shop/fishery so that it is open to the surface, then build a floor over it. The tiles underneath will forever count as "Light Above Ground" and therefore will not generate miasma. See tile attributes for more information.
Another option is to have a long garbage chute where refuse is dumped down. If it is long enough the miasma will not be able to reach all the way to the top, preventing your dwarves from getting unhappy thoughts.
A creative way of constructing garbage chutes is to separate the garbage area and dumping area (where dwarves are) with hatches linked to a pressure plate. That way garbage will land on the hatch, which will open (triggered by dwarf returning to his duties stepping on a plate), letting it fall down and then close, keeping all the miasma inside. This allows one to construct a short, yet non-smelly chute.
Another option for a short non-smelly chute is to let the chute be seperated diagonally from the dumping square(s). Since miasma does not travel across corners, this allows a chute stretching across 2 z-levels to be completly miasma free, without needing additional mechanisms.
Example #1 WWWWWWW W=Wall WWWWWOW .=Floor ....-WW O=Channel WWWWWWW -=Floor with dumping zone
Example #2 WWWWWWW W=Regular Wall .=Regular floor WWWWMQW M=Wall with dumping zone ....--W Q=Channel with dumping zone WWWWWWW -=Floor with dumping zone
Of course, if you have easy access to magma, you can simply dump any unwanted garbage in there, destroying it before it has a chance to rot.
 Related bugs
Note that dwarves interrupted in the middle of a meal will abandon their food. Food abandoned in this manner can never be interacted with (picked up, stored, or dumped) by any dwarf ever again, including the dwarf who abandoned it. Bug:1299 If the food is abandoned underground, it will eventually rot and generate miasma. This is an especially frequent occurrence with soldiers, who will often be interrupted while consuming their rations when a training class begins. One workaround for soldiers is to use the military supplies tab to prevent them from carrying food.
The utility DFHack includes a command "cleanowned" to clear ownership and dump all owned items that are on the floor or rotting. This can help if you're dealing with miasma from this bug.