zoukankan      html  css  js  c++  java
  • 《HTTP权威指南》学习笔记——HTTP报文

    HTTP报文

    HTTP:互联网的信使

    HTTP报文:信使用来搬东西的包裹

    1.报文流

    HTTP报文:HTTP应用程序之间发送的数据块

    组成:元信息开头(文本形式,描述报文的内容和含义)+可选的数据部分。

    2.报文的组成部分

    三部分组成:

    • 起始行(描述报文)
    • 首部块(属性)
    • 主体部分(主体)

    报文的语法:

    两类:请求报文和响应报文

    请求报文格式:

    <method><request-URL><version>
    <headers>
    <entity-body>
    

    响应报文格式:

    <version><status><reason-phrase>
    <headers>
    <entity-body>
    
    • 方法 对资源执行的动作 如GET、POST等
    • 请求URL
    • 版本 HTTP版本,如HTTP/1.1
    • 状态码 status-code 描述请求过程中发生的情况
    • 原因短语
    • 首部
    • 实体的主体部分

    起始行

    请求行:说明要做些什么

    响应行:说明发生了什么

    方法:告诉服务器做什么事情

    状态码:告诉客户端发生了什么

    常见状态码:
    200 OK 成功
    404 Not Found 未找到

    原因短语:文本形式的解释,如HTTP/1.0 200 OK,OK就是原因短语

    版本号:HTTP/x.y 告知对方自己所遵循的协议版本

    首部

    起始行后面跟着0,1或多个HTTP首部字段

    HTTP首部字段向请求和响应报文中添加一些附加信息

    本质是键值对的列表

    方法

    安全方法

    HTTP请求不会在服务器上产生结果,GET方法和HEAD方法就是安全方法

    GET

    用于请求服务器发送某个资源

    HEAD

    与GET方法类似,服务器在响应中只返回首部

    PUT

    向服务器写入文档(GET是从服务器读取文档)

    POST

    向服务器输入数据,用它来支持HTML表单

    POST用于向服务器发送数据,PUT用于向服务器上的资源中存储数据

    TRACE

    允许客户端在最终将请求发送给服务器时,看看它变成什么样子

    3.状态码

    HTTP状态码被分成了五大类

    3.1 100——199 信息性状态码

    HTTP/1.1向协议中引入信息性状态码,这些状态码相对较新,由于复杂性和感知价值存在一些争议,而受到限制。

    3.2 200——299 成功状态码

    3.3 300——399 重定向状态码

    重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。

    304 Not Modified 若客户端发起GET请求,而最近资源未被修改的话
    就应该用这个状态码来说明资源未被修改。带有这个状态码的响应不应该包含实体的主体部分。

    3.4 400——499 客户端错误状态码

    客户端发送一些服务端无法处理的东西,如格式错误的请求报文,不存在的URL


    3.5 500——599 服务器错误状态码

    客户端发送有效请求,服务器却出错。

    首部

    首部和方法配合工作,共同决定客户端和服务器能做什么事情。

    在请求报文和响应报文中都可以用首部来提供信息。

    首部可以分为5个类型:

    • 通用首部 客户端和服务器都可以使用的通用首部,提供一些通用功能
      Date:Sat, 13 Feb 2016 12:09:32 GMT
    • 请求首部 请求报文特有的,为服务器提供一些额外的信息
      Accept:image/webp,image/*,*/*;q=0.8
    • 响应首部
    • 实体首部 用于应对实体主体部分的首部
      Content-Type:text/plain; charset=utf-8
    • 拓展首部 非标准的首部,由应用程序开发者创建。
  • 相关阅读:
    【LGOJ4147】玉蟾宫
    【BJWC2012】冻结
    【JSOI2016】最佳团体
    TCP三次握手是什么?为什么要进行三次握手?两次,四次握手可以吗?
    TCP 和 UDP的最完整的区别
    素数环问题为什么不能是奇数?
    malloc、calloc、new的区别
    请实现两个函数,分别用来序列化和反序列化二叉树
    int* &p 讲解
    c++中常用容器讲解
  • 原文地址:https://www.cnblogs.com/JohnTsai/p/5188356.html
Copyright © 2011-2022 走看看