I used to think that these were one in the same, but I could not have been more wrong.
A contractor is engaged by a customer to perform a set of services. Typically these services can be focussed around a particular skillset that would lend itself to solving a problem that the customer has.
A freelancer is engaged by a customer to solve a problem. They have a variety of skills which are made available to the customer that are to be used in identifying the problem before solving it.
Freelancers get involved to help with problem definition and identification, Contractors get involved after problem definition to assist with execution.
When done correctly, one will become an invaluable resource for identifying and solving problems for their customers, due to the time investment required, their customer count will remain quite low, possibly at the niche level. The other one will become an invaluable resource for project execution and delivery where their customer count could be quite higher relative to the other.
Both are great careers – the importance is in understanding the distinction and mapping your path from there.