HTTP请求 的相关事宜

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的区别:

  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的区别

    原文作者:HTTP
    原文地址: https://segmentfault.com/a/1190000008559575
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞