网络之HTTP总结

HTTP

头部

  • 请求

    • GET/aboutHTTP/1.1
    • 信息类:User-Agent(应用程序)、Host(主机名和端口号)、Referer(当前请求的url)
    • 请求实体相关:Accept,Accept-Language、Accept-Encoding、Range
    • 缓存控制:Cache-Control、if-None-Match(如果提供的实体标记和当前文档标记不同,就获取文档)、If-Modified-Since(在这个指定时间后修改了,否则就限制这个请求)
    • 会话:Cookie
    • 跨域:Origin
  • 响应

    • HTTP/1.1 200OK
    • 信息:Server Date
    • 实体信息:Location,Content-Length、Content-Encoding、Content-Language
    • 缓存:Etag、Last-Modified、Cache-Control、Expires(实体不再有效)
    • 跨域:Access-Control-Allow-Orgin,-Language

状态码

  • 1XX信息性状态码

    • 100 Continue
  • 2XX成功状态码

    • 200 OK
    • 204 No Content

      • 响应报文没有主体部分
    • 206 PartialContent

      • 成功执行了Range请求,必须包含Content-Range首部
  • 3XX重定向状态码

    • 301 Moved Permanently

      • 原URL已被移除,使用响应的Location纸箱的URL
    • 302 Found

      • 未移除,但临时用Location的URL来临时定位资源
    • 304 No MOdified

      • 协商缓存
  • 4XX客户端错误代码

    • 400 Bad Request

      • 客户端发送了错误请求
    • 401 Unauthorized

      • 需要认证身份
    • 403 Forbidden

      • 被服务器拒绝
    • 404 Not Found

      • 无法找到请求的url
    • 405 Method Not Allowed

      • 使用了不支持的方法
  • 5XX服务端错误状态代码

    • 500 Internal Server Error

      • 服务器出错
    • 504 Gateway Timeout

      • 网关等待服务器的响应超时

GET、POST

  • 区别

    • 1.GET方法没有消息体,数据只能放在UPL中,而URL有长度限制,POST有消息体
    • 2.GET请求能缓存,而POST不能
    • 3.GET语义是获取/查询资源信息,POST为提交数据。

缓存问题

  • Cache-Control【优先】

    • max-age
    • no-cache

      • 告知代理服务器不直接使用缓存,向原服务器发起请求
      • 有可能存下来,但是不用
    • no-store

      • 所有内容都不保存到缓存
  • Expires

    • GMT时间
    • 缺点:服务器时间可能不准,跨时区
  • 304和200的区别

    • 200为强缓存

      • 如果设置协商缓存,但没有设置Cache-Control,该值默认为Private;缓存系统可以(但不一定要)对一个成功的响应返回200OK
    • 304为协商缓存

  • 不同刷新行为的区别

    • UPL输入地址栏然后回车、直接点击链接

      • 200
    • F5、点击刷新、右键菜单重新加载

      • 此行为让浏览器无论如何都要发送一个HTTP Request

        • 304
        • 200
    • ctr+f5

      • 无视缓存,并刷新相关的缓存时间
  • Etag【优先】和Last-Modified

    • ETag

      • 配合If-None-Match使用
      • 根据文件实体内容产生一段hash字符串(类似于MD5):inode+mtime

        • Inode:文件的元信息
        • mtime:文件内容上一次变动时间
      • 包括但不限于文件内容(还包括读写权限,拥有者UserID等)

      • 缺点

        • 同一文件不同物理机的inode不同,导致304失效
        • 计算ETag需要性能消耗
        • 因为通常是使用CDN,所以问题不会太大
    • Last-Modified

      • 配合if-modefied-since
      • 格式为GET时间
      • 缺点:精确到秒,1s内频繁变化无法识别,周期性改变但内容无变化的资源也要重新请求
  • 关于from memory cache 和from disk cache(只反映缓存存放的位置,有200和304)

    • 高版本的chorme新增
    • from memory cache

      • 与渲染线程绑定,通常就是tab对应
      • 从内存中读取,通常0ms
    • from disk cache

      • 从磁盘读取,通常几十ms

无状态

  • 不保存每次提交的信息
  • 优点:不用为每个客户端连接分配内存来记忆大量状态,也不用再失去连接时清理内存
  • 缺点:若以来先前信息,客户端需要重传
  • 会话追踪技术

    • cookie

      • 七个字段

        • namevalue
        • domain
        • path

          • 默认响应时的URL
        • max-age=

        • secure
        • Http-only
    • session

      • 写在服务器的session中,分配sid,将sid写入cookie中
    • URL重写

      • 动态写sessionID,类似于token
    • 作为隐藏域嵌入HTML表单中

      • 页面由表单提交而动态产生时可使用

1.0和1.1区别

  • 1.默认持久连接和流水线传输。默认connection:keep-alive除非提出断开,否则以后保持。且默认使用流水线的方式发送(即不用再等上一个响应再发下一个)

    • 若要关闭,Connection:closed
  • 2.状态码100,POST时大于1024,先询问是否能接受

  • 3.多了HOST域

    • 一个物理主机多个虚拟主机共享一个主机
  • 4.可分块传输数据:Transfer-Encoding:chunked

    • 否则动态生成的响应,要把响应整个缓存才知道长度,才能填写Content-Length
本文结束啦感谢您的阅读
undefined