若有什么建议和错误还请指出
HTTP协议:
HTTP是超文本传输协议,是一个基于请求与响应模式的,无状态的,应用层的协议,常基于TCP的连接方式(新手可以理解为传输网页的协议吧233)
**无状态:**对于事务处理没有记忆能力,每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况
HTTP报文:
图片来源于https://www.cnblogs.com/klguang/p/4618526.html
报文可以bp抓包自己查看,bp yyds好吧
HTTP请求方法:
1.GET
用于获取请求页面的指定消息,如果请求资源为动态脚本(非HTML),返回的是web容器解析后的源代码
2.HEAD
与GET相似,但服务器不能在响应里返回消息主体
3.POST
与GET相似但GET无请求内容,POST有请求内容
4.PUT
用于请求服务器把请求中的实体储存在请求资源下
5.DELETE
用于请求源服务器删除指定资源
6.TRACE
用于激发一个远程的应用层的请求消息回路,回显服务器请求
7.CONNECT
用于动态切换到隧道的代理(HTTP 1.1)
8.OPTIONS
请求获得有URI标识的资源在请求/响应的通信过程中可以使用的功能选项,可以在采取具体请求资源请求之前决定对该资源采取何种必要措施,或者了解服务器性能
HTTP消息
1.HOST
请求报头域主要用于被请求资源的Internet主机和端口号
2.User-Agent
请求报头域允许客户端将他的操作系统,浏览器和其他属性告诉服务器
3.Referer
代表当前访问的url的上一个url
4.cookie
常用于表示请求者身份
5.Range
请求实体部分的内容
6.x-forward-for
代表请求端的IP
7.Accept
用于指定客户端接收哪些MIME类型的信息
8.Accept-Charset
指定客户端接收的字符集
响应头
1.Server
服务器所用web服务器的名称
2.Set-Cookie
查看服务器向客户端发送的cookie信息
3.Last-Modified
告诉浏览器资源的最后修改时间
4.Location
服务器通过这个头告诉浏览器去访问哪个页面,浏览器接收这个请求,会立刻访问Location头所指向的页面
普通头
实体头
1.Content-Type
向接收方指示实体的介质类型
2.Content-Encoding
用于媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,需要采用相应的解码机制
3.Content-Length
指明实体正文长度,以字节方式储存的十进制数字来表示
4.Last-Modified
用于指示资源最后修改日期和时间
状态码
1xx:信息提示,表示请求已被成功接收,继续处理。其范围为100~101。
2xx:成功,服务器成功地处理了请求。其范围为200~206。
3xx:重定向,重定向状态码用于告诉浏览器客户端,它们访问的资源已被移动,并告诉客户端新的资源地址位置。这时,浏览器将重新对新资源发起请求。其范围为300~305。
4xx:客户端错误状态码,有时客户端会发送一些服务器无法处理的东西,比如格式错误的请求,或者最常见的是,请求一个不存在的URL。其范围为400~415。
5xx:有时候客户端发送了一条有效请求,但 Web服务器自身却出错了,可能是Web服务器运行出错了,或者网站都挂了。5XX就是用来描述服务器内部错误的,其范围为500~505。
200:客户端请求成功,是最常见的状态。
302:重定向。
404:请求资源不存在,是最常见的状态。
400:客户端请求有语法错误,不能被服务器所理解。
401:请求未经授权。
403:服务器收到请求,但是拒绝提供服务。
500:服务器内部错误,是最常见的状态。
503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
HTTPS
HTTPS是加密传输的HTTP,使用TLS/SSL加密,http端口是80,https是443
HTTP /2相对于HTTP /1.1的提升
- 二进制分帧:HTTP2.0 将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
- 请求与响应复用:客户端和服务器可以把HTTP 消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来
- 服务端推送:服务器可以对一个客户端的请求发送多个响应,比如一个请求只请求了html,服务器会把js等文件一起响应
- 头部压缩:在HTTP2.0中,我们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。