zoukankan      html  css  js  c++  java
  • http协议简史

    https://blog.csdn.net/liujianfei526/article/details/53289350

    0.9

    协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。

    1.0

    首先,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。

    除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。

    1.0版规定,头信息必须是 ASCII 码(这也是为什么请求,特别是get请求url中有中文要encode的原因,get请求一般参数跟在url后面,在http中,而不是像post那样在body中),后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。

    如text/html   、application/json;charset=UTF-8

    这些数据类型总称为MIME type

    除了预定义的类型,厂商也可以自定义类型,即私有http协议,body部分自定义编解码二进制流 - netty pb协议设计

    客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

    由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。如Content-Encoding: gzip

    客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。Accept-Encoding: gzip, deflate

    有些浏览器在请求时,用了一个非标准的Connection字段。Connection: keep-alive,这个字段要求服务器不要关闭TCP连接,以便其他请求复用。服务器同样回应这个字段。但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

    1.1

    1.1 版的最大变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive

    客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。 Connection: close

    一个TCP连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-length字段的作用,声明本次回应的数据长度。

    Content-Length: 3495,上面代码告诉浏览器,本次回应的长度是3495个字节,后面的字节就属于下一个回应了。

    HTTP协议规定,HTTP首部(headers)和HTTP主体之间是以一个空行分割的。因为HTTP每一行(每一行是指一个头部字段)是以 结束的,一个空行的 ,再加上最后一行的结束符 ,一起是 ,也就是说,当检测到 四个字符时,下一个字符开始就是HTTP body的内容了。

     https://segmentfault.com/q/1010000004446930/a-1020000004447035

    ps:

    url中的中文各大浏览器都是编码为utf8,然后+%搞定的,而对于get请求的参数,则各有不同,比较混乱:

    所以建议的方法是:使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。

    而ajax对字符编码的函数其实也很混乱,所以我个人的建议是,参数放body里,由ContentType负责body部分的参数编码

    https://www.cnblogs.com/hannover/p/4657463.html)

    -=================-

    https://blog.csdn.net/L_X_Y_HH/article/details/82013508

    这里写图片描述

    这里写图片描述

  • 相关阅读:
    集合容器概述
    enum枚举类型
    this关键字、this()、super()
    重载与重写
    nginx报404的可能错误
    nginx常用命令
    vbs系统监控
    VBS windows监控
    Oracle SQL优化[转]
    shell /bin/bash^M: bad interpreter错误解决
  • 原文地址:https://www.cnblogs.com/silyvin/p/9708784.html
Copyright © 2011-2022 走看看