了解HTTP协议吗?golang HTTP库实现?
题目来源:字节跳动
答案:
HTTP是超文本传输协议(Hypertext Transfer Protocol)的英文缩写,是基于TCP/IP通讯协议之上用来传输HTML和图片文件的应用协议。
HTTP工作步骤:
- 用户输入地址后回车或点击链接
- 浏览器拼装 HTTP 报文并发送请求给服务器
- 服务器处理请求后发送响应报文给浏览器
- 浏览器解析响应报文并使用渲染引擎显示到界面
HTTP请求:HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。HTTP请求由状态行、请求头、请求正文三部分组成:
- 状态行:包括请求方式Method、资源路径URL、协议版本Version;
- 请求头:包括一些访问的域名、用户代理、Cookie等信息;
- 请求正文:就是HTTP请求的数据。
HTTP响应:服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。HTTP响应由三部分组成:状态行、响应头、响应正文;
状态行:包括协议版本Version、状态码Status Code、回应短语;
响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;
响应正文:就是响应的具体数据。
常见状态码的含义:
200—OK/请求已经正常处理完毕
301—/请求永久重定向
302—/请求临时重定向
304—/请求被重定向到客户端本地缓存
400—/客户端请求存在语法错误
401—/客户端请求没有经过授权
403—/客户端的请求被服务器拒绝,一般为客户端没有访问权限
404—/客户端请求的URL在服务端不存在
500—/服务端永久错误
503—/服务端发生临时错误
golang可用net/http库来实现http协议操作,net/http处理Http请求的基本流程:
- 服务端创建socket,绑定并监听指定的IP地址和端口;ListenAndServer(…)
- 客户端与Listen Socket连接,确认请求后,客户端得的Client Socket,客户端通过这个与Listen Socket通信;srv.Server(…)
- 服务端创建一个go程来处理客户端请求,读取header和数据,交给相应的handler处理,结果通过Client Socket交给客户端;c.server(…)