• 需要知道的HTTP 知识


    一、TCP/IP网络模型

    TCP/IP模型借鉴于OSI七层网络模型,将会话层、表示层、应用层合并到应用层

    img

    各层之间传输数据时,会按照各自的协议进行封包和解包。发送端传输时打上该层所属的首部信息,接收端每经过一层则将对应首部信息去除

    二、HTTP 报文结构

    (一)请求报文

    img

    1595055957760

    请求行

    请求方法 /请求文件URI路径 /HTTP版本

    GET /home HTTP/1.1
    

    (二)响应报文

    img

    1595056191700

    状态行

    HTTP版本 /状态码 /原因短语

    HTTP/1.1 200 OK
    

    三、HTTP 的请求方法

    http/1.1规定以下请求方法

    • GET: 通常用于获取资源
    • POST: 提交数据,即上传数据
    • HEAD: 获取资源的元信息
      • 与GET方法相同,但不返回报文主体
      • 用于确认 URI 的有效性及资源更新的日期时间等
    • PUT: 用来传输文件,但HTTP/1.1不带验证机制
      • 请求报文的主体中包含文件内容
      • 将文件保存到请求URI中
    • DELETE:删除资源,但HTTP/1.1不带验证机制
    • OPTIONS:查询资源支持的请求方法
    • CONNECT: 建立连接隧道,用于代理服务器
    • TRACE: 追踪请求-响应的传输路径

    GET 和 POST 有什么区别

    • 语义的角度
      • GET请求资源,POST提交数据
    • 参数的角度
      • GET参数通过URL传递,POST放在Request body中更适合传递敏感信息
      • GET请求在URL中传送的参数是有长度限制的(2k),而POST没有
    • 编码的角度
      • GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制
    • 幂等性的角度
      • GET是幂等的,而POST不是 (表示执行相同的操作,结果也是相同的)
    • 浏览器行为的角度
      • GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会
      • GET产生的URL地址可以被Bookmark,而POST不可以
      • GET在浏览器回退时是无害的,而POST会再次提交请求
    • TCP的角度
      • GET产生一个TCP数据包,POST产生两个TCP数据包
        • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据
        • 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok 返回数据
        • 火狐浏览器除外,POST 请求只发一个 TCP 包

    四、理解URI

    URI全称为(Uniform Resource Identifier), 也就是统一资源标识符。用于区分互联网上的资源

    (一)URI 的结构

    img

    • http 和 https 的默认端口分别为80、443

    (二)URI 编码

    • URI 只能使用ASCII, ASCII 之外的字符是不支持显示的
    • URI 引入了编码机制,将所有非 ASCII 码字符界定符转为十六进制字节值,然后在前面加个%

    五、理解 HTTP 状态码

    (一) 1XX Informational (信息性状态码)

    表示临时响应并需要请求者继续执行操作

    100 Continue 继续

    请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分

    101 Switching Protocols 切换协议

    请求者已要求服务器切换协议,服务器已确认并准备切换

    (二) 2XX Success(成功状态码)

    表示成功处理了请求的状态码

    200 OK 成功

    服务器已经成功处理请求。通常表示服务器提供了请求的网页

    201 Created 已创建

    请求成功并且服务器创建了新的资源

    202 Accepted 已接受

    服务器已接受请求,但尚未处理

    203 Non-Authoritative Information 未授权信息

    服务器已经成功处理了请求,但返回的信息可能来自另一来源

    204 No Content 无内容

    请求成功处理,客户端请求的资源存在,但其表示是空的

    若服务器拒绝对PUT、POST或者DELETE请求返回任何状态信息或表示,通常采用此响应代码

    205 Reset Content 重置内容

    与204类似,表明客户端应重置数据源的视图或数据结构

    206 Partial Content 部分内容

    表示客户端进行范围请求,服务端成功执行

    用于对部分GET请求(即使用Range请求报头的GET请求)的响应,常用于大型二进制文件的断点续传

    (三) 3XX Redirection(重定向状态码)

    表示要完成请求,需要进一步操作。通常用来重定向

    300 Multiple Choices 多重选择

    被请求的资源在服务器端存在多个表示,而服务器不知道客户端想要的是哪一个表示时,发送这个响应代码

    301 Moved Permanently 永久移动

    请求的网页已永久移动到新位置。对GET或HEAD请求的响应服务器返回此响应时,会自动将请求者转到新位置

    302 Found 临时移动

    服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

    比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回301,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址
    而如果只是暂时不可用,那么直接返回302即可,和301不同的是,浏览器并不会做缓存优化

    303 See Other 查看其它位置

    请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码

    请求已经被处理,但服务器不是直接返回一个响应文档,而是返回一个响应文档的URI

    304 Not Modified 未修改

    自动上次请求后,请求的网页未修改过。服务器返回此响应,不会返回网页的内容

    305 Use Proxy 使用代理

    请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理

    307 Temporary Redirect 临时性重定向

    服务器目前从不同位置的网页响应请求,但请求者应继续使用原有的位置来进行以后的请求

    (四) 4XX Client Error(客户端错误状态码)

    表示请求可能出错,妨碍了服务器的处理

    400 Bad Request 错误请求

    服务器不理解请求的语法

    401 Unauthorized 未授权

    请求要求身份验证。对于需要登录的网页,服务器可能返回此响应

    403 Forbidden 禁止

    客户端请求的结构正确,但服务器拒绝请求

    404 Not Found 未找到

    服务器找不到请求的网页

    405 Method Not Allowd 方法禁用

    禁用请求中指定的方法

    406 Not Acceptable 不接受

    当客户端对表示有太多要求,以至于服务器无法提供满足要求的表示

    407 Proxy Authentication Required 需要代理授权

    此状态码与401(未授权)类似,但指定请求者应当授权使用代理

    408 Reqeust Timeout 请求超时

    服务器等候请求时发生超时

    409 Conflict 冲突

    请求的操作会导致服务器的资源处于一种不可能或不一致的状态

    服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息

    410 已删除

    如果请求的资源已永久删除,服务器就会返回此响应

    411 需要有效长度

    服务器不接受不含有效内容长度标头字段的请求

    412 未满足前提条件

    服务器未满足请求者在请求者设置的其中一个前提条件

    413 Request Entity Too Large 请求实体过大

    服务器无法处理请求,因为请求实体过大,超出了服务器的处理能力

    414 Request-URI Too Long: 请求的URI过长

    请求的URI(通常为网址)过长,服务器无法处理

    415 不支持媒体类型

    请求的格式不受请求页面的支持

    416 请求范围不符合要求

    如果页面无法提供请求的范围,则服务器会返回此状态码

    417 未满足期望值

    服务器未满足“期望”请求标头字段的要求

    (五) 5XX Server Error(服务器错误状态码)

    表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错

    500 Internal Server Error 服务器内部错误

    服务器遇到错误,无法完成请求

    501 Not Implemented 尚未实施

    服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码

    502 Bad Gateway 错误网关

    服务器作为网关或代理,从上游服务器无法收到无效响应

    503 Service Unavailable 服务器不可用

    服务器目前无法使用(由于超载或者停机维护)。通常,这只是暂时状态

    504 网关超时

    服务器作为网关代理,但是没有及时从上游服务器收到请求

    505 HTTP版本不受支持

    服务器不支持请求中所用的HTTP协议版本

    https://juejin.im/entry/586b5b7dac502e12d62b4f33

    https://juejin.im/post/5e76bd516fb9a07cce750746#heading-10

  • 相关阅读:
    构造函数和属性初始化
    C#3.0新增功能06 对象和集合初始值设定项
    C#动态操作DataTable(新增行、列、查询行、列等)
    快速排序
    HTML5原生拖放实例分析
    从web移动端布局到react native布局
    Chrome浏览器Network面板http请求时间分析
    CSS3之3D变换实例详解
    移动端行列布局
    SVG描边动画原理
  • 原文地址:https://www.cnblogs.com/zengbin13/p/13336204.html
Copyright © 2020-2023  润新知