25.2、HTTP报文、请求方式GET和POST
2020-06-26 本文已影响0人
一土二月鸟
HTTP
- http是基于TCP/IP通信协议来传递数据的
- http是无状态的协议,tcp、web应用是有状态的协议。有状态的意思是每次连接请求都是基于上一次的连接请求决定的。
HTTP报文
- HTTP报文是客户端和服务器端之间通信的数据。通过报文客户端会告知服务端其请求的目的,服务端再通过报文将结果返回给客户端。
- MIME-type 代表传输数据的类型。
- http报文分为起始行、头部信息、主体信息
- 起始行存放http协议版本 请求地址 请求方式(get post)信息
- 头部信息存放配置信息
- 主体部分存放业务数据
-
浏览器network中的信息为浏览器加工后的http报文,非原报文信息
响应报文
- keep-alive: 代表长连接的意思,意味着在服务器规定的timeout时间内,如果无新的http请求,tcp将会断开连接。在timeout时间内,会重复使用tcp连接,无需重新创建tcp连接。
- keep-alive需要等待前面的http返回数据后,再发起另一个http请求。但管道化传输是不等待前面的http返回数据,直接按照顺序一个个发送请求。发送请求的同时接受响应。
- 目前只有欧朋默认支持管道化,其他浏览器都需要进行配置。
request header
- 请求头头部信息 是浏览器自动设置的 也可以在客户端手动设置
- accept:代表服务端可以返回哪些文件类型给客户端
response header
- content-encoding:压缩的形式
- content- type:返回的资源类型和编码格式
- date:服务器发送的时间
- server:服务器的名称
header-General
- General是从http报文中整理出来的一部分信息,会将请求地址、请求方法、服务器响应码、服务器ip地址等信息放置到general中。
Get和Post
- 重要区别:
- post要比get请求慢一些
- 在tcp第三次握手时,get会将请求的全部信息发送给服务器,但是post会先将request header发送至服务器进行确认,返回100后,再继续发送请求主体信息。该行为属于浏览器和服务器的内部机制,通过浏览器network无法看到。
- post要比get请求发送的请求头信息更多一些。
- get请求会缓存到浏览器本地、post不会
- post不能进行管道化传输
- 幂等性:数学中某个数无论多少次方,都等于它自己。这样的数称之为遵守幂等性。(0和1即为有幂等性)
- http请求中,get请求具有幂等性,post请求不具有幂等性。
- 管道化传输,如果有一个链接出现异常,会导致整个所有的链接重新请求,这样对于post请求会造成数据紊乱,因此post不支持管道化传输。
科学上网的原理
- 利用国外可访问的服务器做代理,访问真正要访问的网站。
疑惑
- 浏览器的最大并发连接数指的是tcp连接还是http连接?
- 现代浏览器资源下载是按顺序 还是同时?
按照keep-alive的规则,图二的请求开始时间不应该是图一的请求开始时间7.58s+右下角的3.86s才对么?为什么图二的请求开始时间和图一几乎是同时的
-1和1的答案见此链接