http协议
https://juejin.im/post/5e8b4b69f265da47f25609ce
http协议是一个基于请求与响应模式的无连接,无状态,应用层的协议,支持c/s模式,简单快速,灵活
http有两种报文:请求报文和响应报文
请求报文
请求报文由请求行,请求报头,和请求数据组成
- 请求行:抓包第一行,包括请求方法,url和http版本
- 请求报头:指的就是题目中“里面的协议头部”
- 请求数据:指post方式提交的表单数据
响应报文
响应报文由状态行,响应报头,响应正文组成
- 状态行:状态码
- 响应报头:同请求报头
- 响应正文:服务器返回的资源数据
接下来是http头部,既请求报头和响应报头,统称消息报头,消息报头可以分为通用报头,请求报头,响应报头,实体报头等
通用报头和实体报头既可以出现在请求报头中,也可以出现在响应报头中
- 通用报头包含的字段如: Date Connection Cache-Control,
实体报头中有Content-Type Content-Length Content-Language Content-Encoding.
请求报头中包含的字段有: Host,User-Agent,Accept-Encoding,Accept-Language,Connection
- 响应报头包含的字段: Location,Server
http的get和post的区别
http是应用层的协议,==底层基于TCP/IP协议==,所以本质上,get和post请求都是TCP请求。所以二者的区别都是体现在应用层上(HTTP的规定和浏览器/服务器的限制)
- 参数的传输方式:GET参数通过URL传递,POST放在Request body中。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。不过要注意,并不是所有浏览器都会在POST中发送两次包,比如火狐
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
socket和http的区别:
TCP/IP是传输层协议,主要解决数据如何在网络中传输,tcp协议:对应于传输层、ip协议:对应与网络层
Http基于TCP/IP协议,是应用层协议。主要解决如何包装数据。 Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
- Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。
- socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。