HTTP要求
HTTP要求由三部份构成:
- 要求行:包括要求要领、地点和HTTP的协定版本
- 音讯报头:包括一系列的键值对
- 要求正文(可选):和音讯报头之间有一个空行
信息报头中的主要信息有
- Host 是要求报头域,用于指定被要求资本的 Internet 主机和端口号,它一般从 HTTP URL 中提掏出来;
- Connection 示意衔接状况,keep-alive 示意该衔接是耐久连(persistent connection),即 TCP 衔接默许不封闭,能够被多个要求复用,假如客户端和效劳器发明对方有一段时刻没有运动,就能够主动封闭衔接;
- Cache-Control 用于指定缓存指令,它的值有 no-cache, no-store, max-age 等,max-age=秒示意资本在当地缓存若干秒;
- User-Agent 用于标识要求者的一些信息,比方浏览器范例和版本,操纵系统等; Accept
用于指定客户端愿望接收哪些范例的信息,比方 text/html, image/gif 等; - Accept-Encoding 用于指定可接收的内容编码;
- Accept-Language 用于指定可接收的自然语言;
- Cookie 用于保护状况,可做用户认证,效劳器磨练等,它是浏览器贮存在用户电脑上的文本片断;
HTTP的要求体式格局
HTTP要求体式格局一般有几种体式格局
- GET(SELECT):
从效劳器掏出资本(一项或多项),从效劳器猎取指定(要求地点)的资本信息,它一般只用于读取数据,就像数据库查询一样,不会对资本举行修正 - POST(CREATE):在效劳器新建一个资本。向指定资本提交数据(比方提交表单,上传文件),要求效劳器举行处置惩罚。数据被包括在要求正文中,这个要求可能会建立新的资本,或许更新现有的资本
- PUT(UPDATE): 在效劳器更新资本(客户端供应转变后的完全资本)。经由过程指定资本的唯一标识(在效劳器上的详细寄存位置),要求效劳器建立或更新资本。
- PATCH(UPDATE):在效劳器更新资本(客户端供应转变的属性)。
- DELETE(DELETE):从效劳器删除资本。
- HEAD:猎取资本的元数据
- OPTIONS:猎取信息,关于资本的哪些属性是客户端能够转变的。
GET和POST的区分:
- get的数据在url上,post在request body上
- get只能举行url编码,post有多种编码体式格局
- get是tcp/ip一次,post是两次
- 对get的参数有字符限定,而post没有(浏览器对URL的长度有限定,所以GET要求不能替代POST要求发送大批数据)
- get要求会被浏览器缓存,然则post不会,除非手动设置
- 当浏览器回退时,get是没有影响的,然则post会再次提交要求
- 对参数的数据范例,get只能是ASCII字符,然则post没有限定
- 关于第三点中的:get只发生一个TCP数据包,post是两个数据包。get要求中会把header和data一并发送,然则post会先发送header,浏览器相应100 continue以后,再发送data。
- GET要求是幂等的
举个例子:
GET只须要汽车跑一趟就能把货送到,而POST要跑两趟。第一趟先去和效劳器打个招呼“hi,我等下要送一批货,你们打开门驱逐我”,然后再转头把货送过去。
由于POST须要两步,时刻上斲丧的要多一点,看起来GET比POST更有用,然则不能随意转变两种要求体式格局
1.get和post都有本身的语义,不能随意混用
2.收集环境好的时刻,发一次包的时刻和发两次宝的时刻基础能够疏忽。然则在收集环境差的情况下,两次包的TCP在考证数据包完全性上,有非常大的长处
3.并非一切浏览器都会在POST中发送两次包,Firefox就只发送一次。
HTTP特性
- 客户端/效劳端形式
- 简朴疾速:客户端向效劳器要求效劳时,经由过程传送要求体式格局、要求地点和数据体(可选)即可
- 天真:许可传输恣意范例的数据对象,经由过程Content-Type标识
- 无状况:对事物处置惩罚没有影象才能
小结
- HTTP 是在收集上传输 HTML 的协定,用于浏览器和效劳器的通讯,默许运用 80 端口。
- URL 地点用于定位资本,HTTP 中的 GET, POST, PUT, DELETE 用于操纵资本,比方查询,增添,更新等
- GET, PUT, DELETE 是幂等的,POST 是不幂等的。
POST VS PUT
- 运用 PUT 建立资本须要供应资本的唯一标识(详细寄存位置),POST 不须要,POST 的数据寄存位置由效劳器本身决议 - 运用 PUT 更新某一资本,须要更新资本的悉数属性;而运用 POST,能够更新悉数或一部份值 - POST 是不幂等的,PUT 是幂等的,这是一个很主要的区分
- GET 可提交的数据量遭到 URL 长度的限定,HTTP 协定范例没有对 URL 长度举行限定,这个限定是特定的浏览器及效劳器对它的限定。
- 理论上讲,POST 是没有大小限定的,HTTP 协定范例也没有举行大小限定,出于平安斟酌,效劳器软件在完成时会做肯定限定
参考链接: