概念
HTTP–Hyper Text Transfer Protocol,超文本传输协议;是一种建立在TCP上的无状态连接(短连接)。
整个基本的工作流程是:客户端发送一个HTTP请求(Request ),这个请求说明了客户端想要访问的资源;服务端收到请求之后,服务端开始处理请求,并根据请求运行相应的逻辑,然后访问资源,最后通过发送HTTP响应(Response)把结果返回给客户端。
其中一个请求的开始到一个响应的结束称为事务,当一个事务结束后会在服务端添加一条日志。
无状态:
http协议为了保证服务器的内存,不会维持客户端发过来的请求;即同一个客户端的这次请求和上次请求是没有对应关系。对于服务器来说,它并不知道这两个请求来自同一个客户端。例如:一个浏览器在短短几秒之内两次访问同一接口时,服务器不会因为已经给它发过应答报文而不接受第二次服务请求。
为了解决这个问题, Web程序引入了Cookie机制来维护状态。
短连接:
http1.0 默认使用短连接,就是:客户端和服务端每进行一次http操作,就建立一次连接,任务结束就中断连接。
建立连接–请求&响应–关闭连接
短连接中又包含:持久连接和非持久连接
非持久连接:
非持久连接有一个很大的缺点就是,每一个http请求都需要建立一个TCP连接 (http 1.0版本)
持久连接:
HTTP 1.1默认进行持久连接keep-alive,当TCP连接建立成功,并且在一次请求和响应完成后TCP不会立刻断开,会有一个超时时间keep-alive,在超时时间到期后TCP连接才会断开
一、URL结构
HTTP使用统一资源标识符(URL)来建立连接和传输数据,URL包含了用于查找某个资源的信息。
URL作用:通过URL可以到达任何一个地方寻找需要的资源,比如文件、音乐、图片等等;URL是Internet上的地址簿,定位网络资源的地址。
URL一般由以下部分构成:
https://code-api-pc.dao3.fun:443/map/tab/maps?offset=4&limit=32&tabKey1=mapPotential&orderBy=0
1.协议部分
该URL的协议部分为https:,表示网页用的是HTTPS协议,后面的//为分隔
2.域名部分
域名是code-api-pc.dao3.fun,发送请求时,需要向DNS服务器解析IP;解析之后会得到类似我们通过ping得到的ip地址,如192.168.16.106。极端情况下,如果为了优化请求,可以直接用IP作为域名使用
3.端口部分
域名后面的443表示端口,和域名之间用:分隔,端口不是一个URL的必须的部分。使用https协议时,如果端口是443,可以省略不写;与之相关联的是http的默认端口是80。
4.虚拟目录部分
从域名的第一个/开始到最后一个/为止,是虚拟目录的部分。其中,虚拟目录也不是URL必须的部分,本例中的虚拟目录是/map/tab/
5.文件名部分
从域名最后一个/开始到?为止,是文件名部分;本例中的文件名是maps
6.查询条件部分
从?开始到结束的部分是参数部分,又称为搜索部分、查询部分。本例中的参数是offset=4&limit=32&tabKey1=mapPotential&orderBy=0,例子中有多个参数,各个参数之间用&作为分隔符。
**7.扩展:**有的链接会携带锚点,其作用是定位到网页的某一个位置,例如通过链接直接定位到购物网站的秒杀活动的显示位置
二、HTTP 中 Request & Response 介绍
Request
HTTP的请求包括:请求行(request line)、请求头部(header)、空行 和 请求数据 四个部分组成
1.请求行
POST为请求类型,/ugc/creator/content/publish为要访问的资源,HTTP2.0是协议
2.请求头部
从第二行起为请求头部,Host指出请求的目的地(主机域名);User-Agent是客户端的信息,它是检测浏览器类型的重要信息,由浏览器定义,并且在每个请求中自动发送。
3.空行
请求头后面必须有一个空行
4.请求数据
请求的数据也叫请求体
Response
一般情况下,服务器收到客户端的请求后,就会有一个HTTP的响应消息,HTTP响应也由4部分组成,分别是:状态行、响应头、空行 和 响应体。
1.状态行
状态行由协议HTTP2.0、状态码200、状态消息OK组成
2.响应头
响应头是客户端可以使用的一些信息,如:date(生成响应的日期)、content-Type(类型及编码格式)等等
3.空行
响应头和响应体之间必须有一个空行
4.响应体
响应正文,例子中是键值对信息
三、HTTP状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。
响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误(500–599)
工作中常见的状态码:
100:unknownError
200:OK,请求成功
302:重定向;(临时)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
401:请求要求用户的身份认证
403:Forbidden服务器理客户端的请求,但是拒绝执行此请求(没有权限)
404:NotFound服务器无法根据客户端的请求找到资源(网页)
500:服务器内部错误,无法完成请求