@parallel in Julia is for executing separate parallel processes (true multi-tasking, with separate address spaces). @async is for "tasks", which are "green threads" and represent cooperative multitasking (within the same process and the same address space).
I/O in Julia is asynchronous — while one task is blocked waiting on I/O, another task will wake up and start running. (This is based on the libuv library, which is designed for high-performance asynchronous I/O.) The first question is whether you want to fetch URLs in separate OS processes, or you want to use green threads within the same process. It sounds like you want the latter, in which case @async is the right thing. The second question is whether something about the Requests.jl package is serializing things somehow; for that you might file an issue at Requests.jl.
