본관은 공암(孔巖: 지금의 서울시 양천구)이다. 초명은 허의(許儀), 자는 온궤(韞匱)이며, 추밀원부사(樞密院副使)를 지낸 허수(許遂)의 아들이다. 현종의 왕자인 대사(大師) 왕충(王冲)의 6대 외손으로, 어머니는 신정군부인 장씨(新定郡夫人 張氏)이며 합문지후(閤門祗候) 장극우(張克友)의 딸이다.
어려서부터 총명하고 재능이 뛰어났으며, 19세인 1251년(고종 38)에 성균시(成均試)에 합격하였고 23세에 문음(門蔭)으로 복두점녹사(幞頭店錄事)에 임명되었다. 1258년(고종 45)에 평장사(平章事) 최자(崔滋)의 문하에서 병과로 급제, 승선(承宣) 유경(柳敬)의 추천으로 최령(崔寧) · 원공식(元公植)과 함께 내시(內侍)에 보임되어 정사점필원(政事點筆員)이 되었다. 당시 사람들은 허공 · 최령 · 원공식을 정방 3걸(政房三傑)이라 불렀다.
이후 국학박사(國學博士)에 보임되었고 원종 초에는 합문지후(閤門祗候)에 제수되었다. 1267년(원종 8) 호부시랑(戶部侍郎)으로서 신종 · 희종 · 강종의 실록을 편찬하는 데 참여했고, 37세인 1269년(원종 10)에 우부승선 이부시랑 지어사대사(右副承宣吏部侍郎知御史臺事)로 진출하였다.
이 때 권신 임연(林衍)이 정권을 잡고 권력을 행사하고 있었는데 임연의 아들 임유무(林惟茂)를 자신의 딸과 혼인시키려 하는 것을 거절해 임연의 미움을 샀다. 그 해 임연이 왕을 폐하고 안경공 왕창(安慶公 王淐)을 옹립하였는데 이 때 많은 조신(朝臣)들이 살해되었으나, 마침 처의 장례로 양천(陽川)에 가 있어서 화를 면하였다.
40세인 1272년(원종 13)에 첨서추밀원사(詹書樞密院事)에 임명되었고, 곧 이어 추밀원부사(樞密院副使)에 올랐다. 1275년(충렬왕 1)에 고려는 중서문하성(中書門下省)과 상서성(尙書省)을 합쳐 첨의부(僉議府)라고 하는 등 관제가 제후국 급으로 격하되었는데, 이때에 감찰제헌(監察提憲)에 제수되었다. 1279년(충렬왕 5) 지첨의부사(知僉議府事)로 있을 때 원나라가 일본 정벌을 위해 전함의 건조를 명하자 경상도 도지휘사가 되어 이를 담당하였다.
당시 전라도 도지휘사 홍자번(洪子藩)이 일을 반도 마치지 못했을 때 이미 마치고 돌아와 허공의 유능함에 크게 탄복하였다. 1281년(충렬왕 7) 동지추밀원사(同知樞密院事)로서 성절사(聖節使)가 되어 원나라에 다녀왔다. 이듬해 밀직사사(密直司使)로서 지공거(知貢擧)가 되어 이익방(李益邦) 등 33인의 진사를 취하였다.
이어 세자조호(世子調護) 판밀직사사(判密直司事)를 제수받았다. 이듬해 참문학세자보(參文學世子保)가 되었고, 1284년(충렬왕 10) 수국사(修國史)가 되어 원부(元傅) · 한강(韓康) 등과 더불어 『고금록(古今錄)』을 편찬했다. 1287년(충렬왕 13)에 원나라 나얀[乃顔]의 반란이 있어 왕이 친히 출정하게 되었을 때에 호종하기를 재차 청하니, 왕이 돌아온 후 이를 가상히 여겨 첨의중찬(僉議中贊)에 임명되었다.
1290년(충렬왕 16) 왕이 원나라에 있을 때 합단(哈丹: 원의 반란군)이 침입했는데, 이 때 홍자번과 함께 서울을 수비하였다. 이후 적(賊)이 이미 가까이 들어왔다는 유언비어가 돌아 민심이 흉흉했고 조신들도 모두 강화로 피난할 것을 주장하였다.
하지만 홀로 “어찌 유언비어를 믿고 마음대로 국도(國都)를 옮기리오!” 하며 반대하였다. 이듬해 원나라가 합단을 토벌하려고 군사를 보내왔을 때 고려 군사를 이끌고 이에 참여하였다.
1291년(충렬왕 17) 6월에 가벼운 병이 들었는데, 점차 위독하여져서 8월에 집에서 죽었다. 향년 59세였다. 왕이 이를 듣고 슬퍼하여 셋째 아들 허관(許冠)에게 8품의 관직을 주었다.
보현원(普賢院) 서산 기슭에 장사지냈다. 이후 1310년(충선왕 복위 2) 충렬왕의 묘정에 배향됨으로써 배향공신으로 추증되었다. 문경(文敬)이라는 시호가 내려졌다.