网络-3 【HTTP报文、请求方式、GET与POST】

一.HTTP报文

(1).概念基础

  1. HTTP基于TCP/IP通信协议来传递数据
  2. HTTP基于客户端/服务端(C/S)架构模型
  3. 通过一个可靠得连接来交换信息,是一个无状态得请求/响应协议
  4. 限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
  5. 只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的MIME-type内容类型
  6. Miltipurpose Internet Mail Extensions type 多用途互联网邮件扩展类型
  7. 协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快
  8. HTTP报文定义:在客户端与服务器之间发送的数据块。这些数据块以一些文本的元信息开头,描述了报文的内容及含义,后面跟着可选的数据部分,这些报文在客户端,服务器和代理之间流动。所以HTTP报文的发送也叫报文流
  9. 每条HTTP报文包含一个客户端请求和服务端响应
  10. 请求报文Request和响应报文Response

(2).HTTP报文传输流程图
网络-3 【HTTP报文、请求方式、GET与POST】

(3).HTTP报文的组成部分

  1. 对报文进行描述的起始行
  2. 包含属性的首部/头部(header)
  3. 包含数据的主体(body)

    网络-3 【HTTP报文、请求方式、GET与POST】

(4).HTTP报文基本格式

网络-3 【HTTP报文、请求方式、GET与POST】

(5).报文种类

  1. 通用报
  2. 请求头
  3. 响应头
  4. 请求体
  5. 响应体

二.请求方式

(1).种类

8种

  1. GET/POST
  2. PUT:向指定资源位置上传其最新内容(form表单不支持)
  3. DELETE:请求服务器删除Request-URI所标识的资源(form表单不支持)
  4. Head:返回与GET请求相一致的响应,响应体被返回
  5. Trace:回显服务器收到的请求,主要用于测试或诊断
  6. Connect:连接改为管道方式的代理服务器
  7. Options:返回服务器针对特定资源所支持的HTTP请求方法

(2).put/delete

  1. put: 上传资源,Form表单不支持,提交即存储的原则(无验证机制,有安全漏洞),需配置服务器支持put方式转发打给后端操作
  2. delete:删除资源,Form表单不支持,提交即删除的原则(无验证机制,有安全漏洞),需配置服务器支持put方式转发打给后端操作
  3. post:修改资源
  4. get:获取资源
  5. 4种不同的请求方式是为了分清楚不同请求的目的,但是并不代表用了post就一定要修改数据,用get就不能修改资源

三.GET与POST

(1)GET/POST

  1. GET主要用来获取数据
  2. GET的数据在请求体中是查询字符串参数(Query String Parameters)
  3. POST主要用于传输数据到后端进行增加,删除,更新数据,提交表单
  4. POST的数据在请求体中是表单数据(Form Data)
  5. GET/POST: view source中仍然是url参数键值对形式a=1&b=2

(2).两者区别

  1. POST更安全
  2. 不会作为url的一部分,不会被缓存,保存在服务器日志和浏览器记录中
  3. POST发送的数据量更大(GET有url长度限制)
  4. POST能发送更多的数据类型(GET只能发送ASCII字符)
  5. POST比GET速度慢

1.POST请求包含更多的请求头
网络-3 【HTTP报文、请求方式、GET与POST】

2.POST接收数据之前会先将请求头发送给服务器确认,然后发送数据

POST过程

1.第三次握手,浏览器确认并发送post请求头

2.服务器返回状态码100后,continue响应

3.浏览器开始发送数据

4.服务器返回200 ok开始响应

GET过程

1.第三次握手,浏览器确认并发送请求头和数据

2.服务器返回200 ok开始响应

3.GET会进行数据缓存POST不会
网络-3 【HTTP报文、请求方式、GET与POST】

4.POST不能进行管道化传输

1.串行连接 处理完一次连接断开一次重新TCP连接
网络-3 【HTTP报文、请求方式、GET与POST】

2.持久化连接:(connection:keep-alive)连接不会关闭
网络-3 【HTTP报文、请求方式、GET与POST】

3.管道持久化连接(把所有请求放到发送队列里,不等响应,一个一个发送请求的同时接收相应的响应)
网络-3 【HTTP报文、请求方式、GET与POST】

(3).幂等

数学中的幂等

x的y次方=x  x=0||1

幂等性

一个HTTP请求中,不会对数据或状态做修改,并且每次请求都会返回同样的结果

必要性

GET请求必须遵守幂等性,从HTTP请求上来看,GET只能获取数据

POST请求一般做增删改的操作,所以一般不遵守幂等性

管道化传输不可以用非幂等性请求的原因

一个管道中有10个请求,发送了9个,但是连接关闭了,即使收到了9个响应,这9个响应内容也被清空,那么客户端将会重新发起这9个请求,但是9个响应收到就证明服务器已经做了相应的操作,如果是非幂等的请求,则会出现操作的错误(支付和增删改会出问题)

所以管道化传输不支持非幂等的请求,POST是幂等或非幂等请求,都不支持管道化传输

除去欧鹏浏览器要实现管道化持久要单另配置