Tarjan's algorithm finds all bridges in time using a single DFS traversal. The idea: run DFS, compute disc[v] and low[v] for each vertex. An edge is a bridge if low[v] > disc[u]. Why?
If low[v] > disc[u], then the subtree rooted at cannot reach any vertex discovered before or even itself. The edge is the only connection. Remove it, and the subtree becomes isolated.
Space complexity is for the data structures used.