zoukankan      html  css  js  c++  java
  • HTTP报文 「HTTP

    HTTP的报文分为请求报文和响应报文,结构基本相同,由三大部分组成:

    1. 起始行(start line):描述请求或响应的基本信息;
    2. 头部字段集合(header):使用key-value形式更详细地说明报文;
    3. 消息正文(entity):实际传输数据,不一定是纯文本,可以实图片,视频等二进制数据。

    HTTP协议起始行和头部是必须要有的,正文可以没有,头部结束有一个空行作为头部的结束。

    起始行

    请求报文里的起始行叫做请求行,简要的描述了客户端想要如何操作服务器端的资源

    响应报文里的起始行叫做状态行,描述了服务器响应的状态

    请求行

    先看例子

    GET / HTTP/1.1
    
    

    请求行由三部分组成:

    1. 请求方法:如GET/POST,表示对资源的操作;
    2. 请求目标:通常是一个URI,标记了请求方法要操作的资源;
    3. 版本号:表示报文使用的HTTP协议版本。

    这三部分通常使用空格来分割,最后使用换行结束。

    这个请求行里,GET是请求方法,之后跟了一个空格,接下来/是请求目标,又跟了个空格,接下来HTTP/1.1是版本号,接下来是/r/n换行。

    HTTP/1.1规定了八种方法:

    1. GET:获取资源,可以理解为读取或者下载数据;
    2. HEAD:获取资源的元信息;
    3. POST:向资源提交数据,相当于写入或上传数据;
    4. PUT:类似 POST;
    5. DELETE:删除资源;
    6. CONNECT:建立特殊的连接隧道;
    7. OPTIONS:列出可对资源实行的方法;
    8. TRACE:追踪请求 - 响应的传输路径。

    其中GET,POST,HEAD,PUT为常用方法。

    URI里只能使用ASCII码,那要是需要使用汉语咋办呢,按照URI转义会把非ASCII码字符转换成十六进制,然后在每个十六进制字节前加上%,一个十六进制是四位,一个字节八位,所以类似于%E4%A7这样。

    状态行

    同样先看例子

    HTTP/1.1 200 OK
    
    

    状态行也由三部分组成:

    1. 版本号:表示报文使用的HTTP协议版本;
    2. 状态码:三位数字,用代码表示处理的结果;
    3. 原因:数字状态码的补充。

    这个状态行里,HTTP/1.1是版本号,空格,200是状态码表示成功,空格,OK是原因作为对状态码200的补充,换行。

    头部

    请求行/状态行加上头部的字段就构成了HTTP报文的请求头/响应头

    请求头/响应头的字段的类型可能不同,但是结构是相同的,都是字段名 :字段值 换行,字段名不区分大小写,字段名里不允许出现空格,字段名后面必须紧跟着:不能有空格。

    头部字段基本可以分为四大类:

    1. 通用字段:在请求头和响应头里都可以出现;
    2. 请求字段:仅出现在请求头里;
    3. 响应字段:仅能出现在响应头里;
    4. 实体字段:属于通用字段,描述body的额外信息。

    Host字段

    属于请求字段,HTTP/1.1规范要求必须出现的字段。

    Host字段告诉服务器这个请求应该由哪个主机来处理。

    User-Agent字段

    属于请求字段,使用一个字符串来描述发起HTTP请求的客户端,服务器可以一句它来返回最合适此浏览器显示的页面。

    Date字段

    属于通用字段,表示HTTP报文创建的时间。

    Server字段

    属于相应字段,告诉客户端当前正在提供WEB服务的软件名称和版本号,不是必须要出现的字段,也不一定要是真实的信息,可以是完全无关的描述信息。

    Content-Length字段

    属于实体字段,表示报文里body的长度。

    参考自极客时间透视HTTP协议

  • 相关阅读:
    原生Js自适应浏览器宽度的瀑布流布局
    Fixed Gear DIY整车配色 JavaScript版制作过程
    DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动
    盒模型 块级元素与行内元素 浮动元素
    Js 页面元素 简单震动效果
    CSS引入的方式有哪些? link和@import的区别?
    一道Web前端面试题 DIV放大
    js在IE和Firefox下不同之处
    Doctype? 严格模式与混杂模式如何触发这两种模式,区分它们有何意义?
    JavaScript document属性和方法
  • 原文地址:https://www.cnblogs.com/ljsh/p/13957775.html
Copyright © 2011-2022 走看看