美文网首页
详解HTTP

详解HTTP

作者: Love小六六 | 来源:发表于2018-06-10 18:46 被阅读0次

HTTP

网络协议分层

  • 经典五层模型


  • 物理层主要作用是定义物理设备如何传输数据(硬件设备相关——网卡端口、网线、光缆)

  • 数据链路层在通信的实体间建立数据链路连接(创建链路连接0101)

  • 网络层为数据在节点之间传输创建逻辑链路(寻找服务器网络地址)

  • 传输层向用户提供可靠的端到端(End-to-End)服务,向高层屏蔽了下层数据通信的细节

    • TCP/IP协议
    • UDP协议
  • 应用层为应用软件提供服务,构建于TCP协议之上,屏蔽网络传输相关细节

HTTP发展历史

  • HTTP/0.9
    • 只有一个命令GET
    • 没有header等描述数据的信息
    • 服务器发送完毕,就关闭TCP连接
  • HTTP/1.0
    • 增加了POST等命令
    • 增加status code和header
    • 多字符集支持、多部分发送、权限、缓存等
  • HTTP/1.1
    • 持久连接
    • pipeline
    • 增加host和其他一些命令
  • HTTP2
    • 所有数据以二进制传输
    • 同一个连接里面发送多个请求不再需要按照顺序来
    • 头信息压缩以及推送等提高效率的功能

HTTP三次握手

  • 规避网络延迟导致的数据开销浪费

URI/URL/URN

  • URI(Uniform Resource Identifier)统一资源标志符,用来唯一表示互联网上的信息资源,包括url和urn
  • URL(Uniform Resource Locator)统一资源定位器
    • http://host.com:80/path?query=string#hash
    • http:skema 协议,https/ftp等
    • host.com:定位资源服务器所在位置,可以是ip也可以是域名
    • 80:端口,一个服务器可以起多个web服务,通过端口区分,默认为80
    • path:路由
    • query=string:传参
    • hash:哈希作为锚点
  • URN 永久统一资源定位符,在资源移动之后还能被找到

HTTP报文

  • 请求报文
//起始行
GET /test/hi-there.txt HTTP/1.0
/* 
GET:方法
/test/hi-there.txt:请求资源地址
HTTP/1.0:协议版本
*/
//头部
Accept:text/*
Accept-Language:en,fr

  • 响应报文
//起始行
HTTP/1.0 200 OK
/*
HTTP/1.0:协议版本
200:Status Code
OK:Status Message
*/
// 头部
Content-type:text/plain
Content-length:19

// 主体
Hi!I am a message!

HTTP方法

  • HTTP方法:用来定义对资源的操作
  • 常用有GET/POST等
  • HTTP Code
    • 定义服务器对请求的处理结果
    • 各个区间的CODE有各自的语义

HTTP特性

  • curl -v url

  • 跨域

    • 允许方法:GET/HEAD/POST

    • 允许Conent-Type

      • text/plain
      • multipart/form-data
      • application/x-www-form-urlencoded
    • 其他限制

      • 请求头限制
      • XMLHttpRequstUpload对象均没有注册任何事件监听器
      • 请求中没有使用ReadableStream对象
    • 突破浏览器跨域限制的方法

      • jsonp
        • <script src="">src引入需要访问的服务器函数
      • 响应头控制,浏览器会发送method为optios的预请求来验证
      'Access-Control-Allow-Origin':'*',
      'Access-Control-Allow-Headers':'X-Test-Cors',// 自定义响应头
      'Access-Control-Allow-Methods':'POST,PUT,DELETE',
      'Access-Control-Max-Age':'1000',
      
  • 缓存cache-control

    • 可缓存性
      • public:返回内容所经过的任何路径当中http代理服务器、客户端浏览器都可对返回内容进行缓存
      • private:发起请求的浏览器可进行缓存
      • no-cache:可以缓存,但是需要在服务器验证可使用缓存,才能使用缓存
      • no-store:任何节点均不作缓存
    • 到期
      • max-age= xx秒
      • s-maxage= xx秒(在代理服务器生效)
    • 重新验证
      • must-revalidate(过期必须去原服务端重新请求)
      • proxy-revalidate(在代理服务器生效)
  • 缓存验证

    • 验证头
      • Last-Modified
        • 上次修改时间
        • 配合If-Modified-Since使用
        • 对比上次修改时间以验证资源是否需要更新
      • E-tag
        • 数据签名:资源对内容产生唯一的数据签名(Hash计算)
        • 配合If-Match使用
        • 对比资源的签名判断是否使用缓存
  • cookie和session

    • cookie
      • 通过Set-Cookie设置
      • 下次请求会自动带上
      • 是键值对,可以设置多个
    • cookie属性
      • max-age和expires设置过期时间
      • secure属性代表只在https的时候发送
      • HttpOnly无法通过documents.cookie访问

HTTP长连接

  • Connection:keep-alive 保持长连接
  • 并发数最多6个,即当保持长连接时,前6个同域请求的connectionId相同,即不需要重复创建TCP连接,减少时间损耗

HTTP数据协商

  • 分类
    • 请求
      • Accept:想要的数据类型
      • Accept-Encoding:限制服务端数据压缩
      • Accept-Language:返回的语言
      • User-Agent:浏览器信息
    • 返回
      • Content-Type:返回的数据格式
      • Content-Encoding:数据压缩方式声明
      • Content-Language:返回语言

HTTP Redirect

  • 在response Header中增加Location,responseCode可以是302(临时跳转),可以是301(永久跳转)

HTTP CSP(内容安全策略)

  • Content-Security-Policyontent-Security-Policy
    • 限制资源获取
    • 报告资源获取越权
  • 限制方式
    • defalut-src限制全局
    • 指定资源类型

HTTPS

  • http是明文传输的,因此不安全
  • https
    • 加密
      • 私钥 服务器通过私钥解密,只放在服务器
      • 公钥 放在互联网上所有人均可拿到的加密字符串,通过公钥加密数据
      • 握手过程:
        • 客户端生成随机数,然后传输到服务端,中间会带上客户端支持的加密套件
        • 服务端拿到随机数后存储,并且也生成一个随机数,该随机数和公钥一起传输给客户端
        • 客户端拿到随机数后存储,并根据拿到的公钥生成预主秘钥,并生成一个通过公钥加密的随机数,并传输给服务端
        • 服务器端通过私钥解密,拿到预主秘钥
        • 客服端和服务端同时对以上三个随机数进行算法操作,生成一个主秘钥,后期传输的数据均通过该主秘钥进行加密和解密

HTTP2

  • 优势
    • 信道复用
    • 分帧传输
    • Server Push

相关文章

  • HTTP Header

    HTTP Header 详解HTTP Header解析 HTTP(HyperTextTransferProtoco...

  • HTTP

    HTTP 来源:博客 HTTP详解 HTTP协议详解 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、...

  • HTTP协议详解

    参考:HTTP协议详解

  • 状态码详解

    HTTP状态码详解

  • Golang面试之HTTP

    引用 HTTP协议详解 HTTP协议原理详解及应用 LwIP应用开发笔记之八:LwIP无操作系统HTTP客户端 U...

  • Java----使用nioSocket获取和返回http报文

    参考博客:HTTP协议(一)之HTTP协议详解 HTTP协议 HTTP(HyperText Transfer Pr...

  • Http

    HTTP 协议 HTTP 协议详解 超文本传输协议(HTTP,HyperText Transfer Protoco...

  • HTTP协议之状态码详解

    HTTP协议之状态码详解 Hypertext Transfer Protocol -- HTTP/1.1

  • iOS学习笔记之HTTP协议,iOS缓存和CoreData

    一.HTTP协议: 参考资料: HTTP协议详解:HTTP协议详解 超文本传送协议(百度百科):超文本传送协议百度...

  • 详解HTTP

    HTTP 网络协议分层 经典五层模型 物理层主要作用是定义物理设备如何传输数据(硬件设备相关——网卡端口、网线、光...

网友评论

      本文标题:详解HTTP

      本文链接:https://www.haomeiwen.com/subject/jvkqeftx.html