• http头详解


    http头详解

     

    HTTP Header 包含了一系列重要的信息

    例如状态码,响应类型,文件编码等...

    按字母顺序排列

    第一个HTTP Header 就是Accept

    Accept 只出现在Request中

    其含义是: 浏览器端可以接受的媒体类型


    例如 Accept: text/html  代表浏览器可以接受服务器回发的类型为 text/html  也就是我们常说的html文档

    如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)

    通配符 * 代表任意类型

    例如  Accept: */*  代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

    又例如 Accept: text/* 代表所有的text的子类都是可以被接受的

    Accept可以支持用,分隔的多个类型

    例如  Accept: audio/*; q=0.2, audio/basic  的大意是,  浏览器比较喜欢audio/basic的媒体类型, 不过如果没有这个类型的话 其他的audio类型也可以

    在这里出现了一个q=0.2 , 这是一个代表关联程度的值,默认值是一,按照从大到小排列

    例如  Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c

    可接受的类型优先级如下

    1) text/html text/x-c

    2)text/x-dvi

    3)text/plain

    q是一个0-1之间的数值, q的默认值是1, q=0代表不可接受(non acceptable)

    原文地址(英文): http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    第二个HTTP Header 就是Accept-Charset

    Accept-Charset 代表了浏览器支持的字符集

    例如: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

    代表这个浏览器比较喜欢以下的字符集

    1) 最喜欢  ISO-8859-1

    2) 然后是 utf-8

    3) 最后是 *    (所有字符串,不限制)

    对应的response http header 字段是 Content-Type

    如果浏览器请求的字符集是服务器无法响应的, 那么服务器应该返回406错误

    请注意这个只是一个标识位,服务器还要在程序上保证声明的字符集类型 和HTTP 正文中所使用的字符集必须是一致的

    例如在HTTP header中声明 Accept-Charset: utf-8

    可是正文用的是GB2312编码.....浏览器就乱码了 - -#

    第三个HTTP Header 就是Accept-Encoding

    Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型的

    常见的有

    Accept-Encoding: compress, gzip               //支持compress 和gzip类型        
    Accept-Encoding:                      //默认是identity        
    Accept-Encoding: *                     //支持所有类型        
    Accept-Encoding: compress;q=0.5, gzip;q=1.0         //按顺序支持 gzip , compress
    Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0       // 按顺序支持 gzip , identity 
    服务器返回的对应的类型编码header是 content-encoding
    服务器处理accept-encoding的规则如下所示
      1. 如果服务器可以返回定义在Accept-Encoding 中的任何一种Encoding类型, 那么处理成功(除非q的值等于0, 等于0代表不可接受)
      2. * 代表任意一种Encoding类型 (除了在Accept-Encoding中显示定义的类型)
      3.如果有多个Encoding同时匹配, 按照q值顺序排列
      4. identity总是可被接受的encoding类型(除非显示的标记这个类型q=0) ,   如果Accept-Encoding的值是空  那么只有identity是会被接受的类型
    如果Accept-Encoding中的所有类型服务器都没发返回, 那么应该返回406错误给客户端
    如果request中没有Accept-Encoding  那么服务器会假设所有的Encoding都是可以被接受的, 
    如果Accept-Encoding中有identity  那么应该优先返回identity (除非有q值的定义,或者你认为另外一种类型是更有意义的)
    注意:
    如果服务器不支持identity 并且浏览器没有发送Accept-Encoding,那么服务器应该倾向于使用HTTP1.0中的 "gzip" and "compress" ,  服务器可能按照客户端类型 发送更适合的encoding类型
    大部分HTTP1.0的客户端无法处理q值
    注意:这里的q其实表示的是优先级。

    第四个HTTP Header 就是Accept-Language

    Accept-Language 表示浏览器支持的语言和区域

    同样的 他也支持多个选项,并且支持q值

    例如 Accept-Language: en-US,en;q=0.8

    首选en-US,  然后是en

    注: en-US 是标准的美国英文表示方式, en代表语言是英文 US代表区域是美国

  • 相关阅读:
    CGO入门和OCR文字识别(非第三方API,有源码,效果好)实战
    Golang中如何正确的使用sarama包操作Kafka?
    音量强度转分贝db
    ShowDialog()弹出的窗体,关闭后,主窗体会闪烁的BUG
    小鱼提问3 static方法中可以访问某个类的私有变量吗(不通过反射的其他非正常手段)?什么情况下可以?
    “-="的陷阱
    c++ 从一个BYTE[] *filePtr 追加二进制文件
    Android解决程序切换后台被干掉,恢复状态问题
    Cookie
    dede后台搜索标签
  • 原文地址:https://www.cnblogs.com/sandianbaozi/p/3056169.html
Copyright © 2020-2023  润新知