zoukankan      html  css  js  c++  java
  • HTTP协议类

     
    一次完整的HTTP请求所经历的7个步骤
    1. 域名解析
    2. 发起TCP的3次握手(建立TCP连接
    3. 建立TCP连接后发起http请求(HTTP Request
    4. 服务器端响应http请求,浏览器得到html代码 (服务器端HTTP响应(HTTP Response)请求(Web服务器发送应答头信息 )
    5. 浏览器解析html代码,并请求html代码中的资源
    6. 浏览器对页面进行渲染呈现给用户
    7.web 服务器关闭TCP连接(如果浏览器或服务器在头部加入Connection:keep-alive ,就会保持连接状态,节约实际和带宽)
     
    HTTP协议类:

    http协议的主要特点:
    简单快速 灵活 无连接 无状态
     
    Http报文的组成部分
    • 请求报文 (强求行 请求头 空行 请求体)
      • 请求行包含: http方法,页面地址,http协议,以及版本
      • 请求头包含: key 和value值,告诉服务端要哪些内容
    • 响应报文 (状态行 响应头 空行 响应体)
      • 状态行包含协议、版本 状态码 状态信息
    http方法
    GET(获取资源)、POST(传输资源)、PUT(更新资源)、DELETE(删除资源)、HEAD(获取报文首部)
    POST和GET的区别
    • get比post不安全,因为get参数直接暴露在url上
    • get请求url中传送的参数长度有限的,而post没有长度限制
    • get产生的url可以被收藏,post不会
    • get请求只能进行url编码,而post支持多种编码方式
    • get的请求被完整保流在浏览器历史记录里,而post中的参数不会被保留
    • get参数通过url传递, post放在Request body中
    HTTP状态码
    • 1 XX : 指示信息-表示请求已接收,继续处理
    • 2XX: 成功-表示请求已被成功接收
    • 3XX: 重定向- 要完成请求必须进行更进一步的操作
    • 4XX: 客户端错误-请求有语法错误或请求无法实现
    • 5XX:服务器错误-服务器未能实现合法的请求
    • 200 OK: 客户端请求成功
    • 206: Partial Content: 客户端发送了一个带有Range头的get请求,服务器完成了它
    • 301 Moved Permanently: 所请求的页面已经转移至新的url
    • 302 Found: 所请求的页面已经临时转移至新的url
    • 304 Not Modified: 客户端有缓冲的文档并发出了一个条件性的请求,服务器告诉客户,原来缓冲的文档还可以继续使用
    • 400 Bad Request: 客户端请求有语法错误,不能被服务器所理解
    • 401 Unauthorized :请求未经授权,
    • 403  Forbidden: 被请求页面的访问被禁止
    • 404 Not Found: 请求资源不存在
    • 500 Internal Server Error: 服务器发生错误
    • 503 Server Unavailable: 服务器临时过载或当机
    什么是持久连接(长连接)
    http是支持持久连接的,1.1版本的支持, 当使用keep-Alive模式是可以持久连接,数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;
    使用普通模式即非Keep-Alive模式时,每个请求/应答客户和服务器都要新建议一个连接,完成之后立即断开连接。(HTTP头部有了Keep-Alive这个值,代表客户端这次请求期望是长连接的。但是并不代表一定会使用长连接,服务器端都可以无视这个值,也就是不按标准来。这里需要后台服务器支持这个标准。)
     
    持久连接的好处有:
    1,同一个客户端可以使用这个长连接处理其他求情,避免http重新链接和断开所消耗的时间。
    2,服务器可以利用这个连接 主动推送 消息到客户端(这个才是我想要的)。
    什么是管线化
    也可以理解为流水线。在长连接的基础上,将客户端的其他请求都交给这一个连接去处理。
    在持久连接的情况下,仅http/1.1支持此技术,只有GET和HEAD请求 可以进行管线化,而POS则有所限制
    这里服务器需要注意一件事情。那就是这个请求的先后顺序是不能颠倒的
     
    某个连接上消息的传递类似于
    请求1 ->响应1 -> 请求2-> 响应2-> 请求3-> 响应3
    某个连接上的消息变成了类似这样
    请求1 -> 请求2->  请求3-> 响应1 ->响应2->响应3
  • 相关阅读:
    RedisHelper
    2010年:Socket实践问题求助解决一贴通
    React Hooks 父组件调用子组件的方法
    React Hooks 进入页面以后自动 focus 到某个输入框
    react hooks 太多的useState 显得很冗余,有没有什么规整的方法呢?
    react项目取消部分eslint检查
    使用useMemo优化性能
    react的useEffect 第二个参数
    如何使用 Postman Interceptor(可以拦截浏览器的请求到postman)
    react阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/chenyajie/p/8929318.html
Copyright © 2011-2022 走看看