HTTP请求 的相关事宜

HTTP请求

HTTP请求由三部分组成:html

  • 请求行:包含请求方法、地址和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的区别:

  1. get的数据在url上,post在request body上
  2. get只能进行url编码,post有多种编码方式
  3. get是tcp/ip一次,post是两次
  4. 对get的参数有字符限制,而post没有(浏览器对URL的长度有限制,因此GET请求不能代替POST请求发送大量数据)
  5. get请求会被浏览器缓存,可是post不会,除非手动设置
  6. 当浏览器回退时,get是没有影响的,可是post会再次提交请求
  7. 对参数的数据类型,get只能是ASCII字符,可是post没有限制
  8. 对于第三点中的:get只产生一个TCP数据包,post是两个数据包。get请求中会把header和data一并发送,可是post会先发送header,浏览器响应100 continue以后,再发送data。
  9. 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 协议规范也没有进行大小限制,出于安全考虑,服务器软件在实现时会作必定限制

    参考连接:网络

99%的人都理解错了HTTP中GET与POST的区别并发

相关文章
相关标签/搜索