http理解

http报文包括:request报文和response报文;每个request和respose构成一次事务;每个报文由三部分构成:起始行start line,首部header和主体data body。

常见请求类型

  • get:获得/查询某个资源,应该是安全和幂等的;
  • head:获取报文head,与get方法一样,但是不返回报文主体,通常用于确认url的有效性或者确认资源更新的日期时间;
  • post:向服务器传输数据,通常用来支持html的表单;
  • put:写入文档,类似于insert;
  • delete:删除资源
  • options:询问支持的方法

返回类型

  • 1XX: 信息状态码,很少用到;
  • 2XX: 成功
  • 3XX: 重定向状态码,资源被移动,一般附带Location首部,告知request新的位置;
    • 301 Move Permanently永久性重定向
    • 302 Found临时性重定向
    • 304 not Modified资源没有修改,client可以在cache中获取;
  • 4XX: 客户端错误状态码
    • 400 bad Request报文语法错误
    • 403 Forbidden访问被服务器拒绝
    • 404 Not Found
  • 5XX: 服务器本身发生错误
    • 500 Internal Server Error
    • 502 Bad Gateway 服务器遇到了上游的无效响应
    • 503 Service Univailable 服务器暂时无法处理请求

curl命令

curl提供了一个简单的方法来完全控制传出HTTP请求的HTTP头。你需要的这个参数是“-H” 或者 “–header”。

cookie和session都是用来解决http无状态的问题,可以记录用户的状态和个性化信息,实现持久化会话。
cookie存在client端,session存在服务端;
session会消耗server内存,不支持分布式,一般使用cookie;

cookie属性

  • String name;//cookie的名字,同一域下必须唯一
  • String value;//cookie的值,敏感信息不能穿明文
  • String domain;//cookie的作用域,不能跨域
  • int maxAge = -1;//默认有效期,只存在本次会话
  • String path;//作用的context,包括当前context以及其子context
  • boolean secure;//是否安全传输,如果为true的话,则只有在https时
    才发送cookie

持久连接

http事务结束之后,不会直接将其关闭,因为每次简历连接和启动连接时候都比较耗时,所以会keep-alive;

  • tcp slow start:tcp在启动时,会限制连接的最大速度,数据传输成功后随着时间而提高传输速度;
  • Keep-alive:在http事务结束后任然保持tcp连接打开状态,为后续事务重复利用,直到client和server关闭;keep-alive随request一起发送,如果某一次request没有带,服务器会在response之后关闭连接,response的keep-alive有两个参数:可保持最大连接数max和可保持最大时长timeout;
    • 代理Proxy: 位于client和cerver之间,对request和respose进行转发、包装或修改,例如nginx
  • 哑代理问题: 代理对请求直接转发,不进行处理,导致客户端传递的Proxy-connection无法被服务器端识别,从而服务器在返回信息时不带connection:keep-alive的头部;而崇明的代理会在代理层做解析,把Proxy-connection转化成服务器可以识别的connection:keep-alive;详细过程可以参考用暴走漫画理解HTTP-探探持久连接