• http 报文


    一、报文格式:

    一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,具体格式如下;

    1.请求报文格式

    起始行

    <method>        

     空格     

    <request-url>       

     空格     

    <version>   

    首行

    <headers>

           
               
    主体

    <entity-body>

           

     2.响应报文格式

    起始行

    <version>

    空格      

    <status>   

    空格       

    <reason-phrase>           

    首行

    <headers>

           
               
    主体

    <entity-body>        

           

    二、起始行说明:

    起始行项

    内容

    说明
    method GET,POST  
    request-url

    http://localhost:8080/index

    请求地址
    version

    HTTP/<major>.<minor>

    HTTP/1.1

    status 200,404 状态吗
    reason-phreas OK 数字状态码

    二、首部字段 

    每个HTTP 首部都有一种简单的语法:名字后面跟着冒号(:),然后跟上可选的空格,再跟上字段值,最后是一个CRLF。(或者换行符);

    1.通用首部字段

    一般 请求首部和 响应首部 都支持;

    首部字段名说明备注
    Cache-Control 控制缓存的行为 请参考 缓存指令一览表
    Connection 连接的管理
    1. 控制不再转发给代理的首部字段
    2. 管理持久连接
    3. HTTP/1.1默认持久连接
    Date 创建报文的日期时间 Pragma: no-cache
    Pragma 报文指令  
    Trailer 报文末端的首部一览  
    Transfer-Encoding 指定报文主体的传输编码方式  
    Upgrade 升级为其他协议 使用首部字段 Upgrade 时,还需要额外指定Connection:Upgrade
    Via 代理服务器的相关信息  
    Warning 错误通知  

    2.请求首部字段

    首部字段名说明 
    Accept 用户代理可处理的媒体类型
     text/html,application/xhtml+xml,application/xml;q=0.9,
    image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    Accept-Charset 优先的字符集
    iso-8859-5, unicode-1-1;q=0.8
    
    Accept-Encoding 优先的内容编码
    gzip, deflate
    Accept-Language 优先的语言(自然语言)
    zh-cn,zh;q=0.7,en-us,en;q=0.3
    Authorization Web认证信息  
    Expect 期待服务器的特定行为  
    From 用户的电子邮箱地址  
    Host 请求资源所在服务器  
    If-Match 比较实体标记(ETag)条件请求 服务器会比对 If-Match 的字段值和资源的 ETag 值,仅当两者一致
    时,才会执行请求。反之,则返回状态码 412 Precondition Failed 的响
    If-Modified-Since 比较资源的更新时间  
    If-None-Match 比较实体标记(与 If-Match 相反)  
    If-Range 资源未更新时发送实体 Byte 的范围请求  
    If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)  
    Max-Forwards 最大传输逐跳数  
    Proxy-Authorization 代理服务器要求客户端的认证信息  
    Range 实体的字节范围请求  
    Referer 对请求中URI的原始获取方
    Referer: http://172.30.1.34:4200/
    首部字段 Referer 会告知服务器请求的原始资源的 URI。
    TE 传输编码的优先级  
    User-Agent HTTP客户端程序的信息 首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传
    达给服务器

    3.响应首部字段

    首部字段名说明 
    Accept-Ranges 是否接受字节范围请求  
    Age 推算资源创建经过时间 首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段值
    的单位为秒。
    ETag 资源的匹配信息 首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串
    形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag
    值。
    Location 令客户端重定向至指定URI 使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置
    不同的资源
    Proxy-Authenticate 代理服务器对客户端的认证信息  
    Retry-After 对再次发起请求的时机要求  
    Server HTTP服务器的安装信息  
    Vary 代理服务器缓存的管理信息  
    WWW-Authenticate 服务器对客户端的认证信息  

    4.缓存请求指令

    指令参数说明
    no-cache 强制向原服务器再次验证,不缓
    存过期的资源
    no-store 不缓存请求或响应的任何内容
    max-age = [ 秒] 必须 响应的最大Age值
    max-stale( = [ 秒]) 可省略 接收已过期的响应
    min-fresh = [ 秒] 必需 期望在指定的时间内的响应仍有效
    no-transform 代理不可更改媒体类型
    only-if-cached 代理不可更改媒体类型
    cache-extension - 新指令标记(token)

    5.缓存响应指令

    指令参数说明
    public 可向任意方提供响应的缓存
    private 可省略 仅向特定用户返回响应
    no-cache 可省略 缓存前必需先确认其有效性
    no-store 不缓存请求或响应的任何内容
    no-transform 代理不可更改媒体类型
    must-revalidate 可缓存但必须再向源服务器进行确认
    proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
    max-age=[秒] 必需 响应的最大Age值
    s-maxage=[秒] 必需 公共缓存服务器响应的最大Age值
    cache-extension - 新指令标记(token)

    6.实体首部字段

    说明:描述请求实体和响应实体的属性;一般请求首部和响应首部都含有;

    首部字段名说明 
    Allow 资源可支持的HTTP方法  
    Content-Encoding 实体主体适用的编码方式 告知客户端服务器对实体的主体部分选
    用的内容编码方式
    Content-Language 实体主体的自然语言
    zh-CN
    Content-Length 实体主体的大小(单位:字节)  
    Content-Location 替代对应资源的URI  
    Content-MD5 实体主体的报文摘要  
    Content-Range 实体主体的位置范围  
    Content-Type 实体主体的媒体类型  
    Expires 实体主体过期的日期时间  
    Last-Modified 资源的最后修改日期时间  

    HttpServletRequest 获取起始行信息

    方法声明功能描述
    String  getMethod 该方法用于获取HTTP请求消息中的请求方式(如GET、POST等)
    String getReauestURI() 该方法用于获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的部分
    String getQueryString() 该方法用于获取请求行中的参数部分,也就是资源路径后面问号以后的所有内容
    String getProtocol() 该方法用于获取请求行中的协议名和版本,例如,HTTP/1.0 或 HTTP/1.1
    String  getContextPath() 该方法用于获取请求URL中属于WEB应用程序的路径,这个路径以"/"开头,表示相对于整个WEB站点的根目录,路几个结尾不含“/”。如果请求URL属于web站点的根目录,那么返回结果为空字符串“”
    String getServletPath() 该方法用于获取Servlet的名称或Servlet所映射的路径
    String  getRemoteAddr() 该方法用于获取请求客户端的IP地址,其格式类似于"192.168.0.1"
    String getRemoteHost() 该方法用于获取请求客户端的完整主机名,其格式类似于"pc1.xxxx.cn"。需要注意的是,如果无法解析出客户机的完整主机名,该方法会返回客户端的IP地址
    int getRemotePort() 该方法用于获取请求客户端网络连接的端口号
    String getLocalAddr() 该方法用于获取Web服务器上接收当前请求网络连接的IP地址
    String getLocalName() 该方法用于获取Web服务器上接收当前网络连接IP所对应的主机名
    int getLocalPort() 该方法用于获取Web服务器上接收当前网络连接的端口号
    String getServerName() 该方法用于获取当前请求所指向的主机名,即HTTP请求消息中HOST头字段所对应的主机名部分
    int getServerPort() 该方法用于获取当前请求所连接的服务器端口号,即如果HTTP请求消息中HOST头字段所对应的端口号部分
    String getScheme() 该方法用于获取请求的协议名,例如http、https或ftp
    StringBuffer getRequestURL() 该方法用于获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等信息,但不包括后面的查询参数部分。注意,getRequestRUL()方法返回的时StringBuffer类型,而不是String类型。

    HttpServletRequest 获取请求头headers

    方法声明功能描述
    String getHeader(String name) 该方法用于获取一个指定头字段的值,如果请求消息中没有包含指定的头字段,getHeader()方法返回null;如果请求消息中包含有多个指定名称的头字段,getHeader()方法返回其中第一个头字段的值
    Enumeration getHeaders(String name) 该方法返回一个Enumeration集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现一次,但有时候可能会出现多次
    Enumeration getheaderNames() 该方法用于获取一个包含所有请求头字段的Enumeration对象
    int getIntHeader(String name) 该方法用于获取指定名称的头字段,并且将其值转换为int类型。需要注意的是,如果指定名称的头字段不存在,返回值为-1;如果获取到的头字段的值不能转为int类型,将发生NumberFormatException异常
    Long getDateHeader(String name) 该方法用于获取指定头字段的值,并将其按GMT时间格式转换成一个代表日期/时间的长整数,这个长整数是自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值
    String getContentType() 该方法用于获取Content-Type头字段的值,结果为String类型
    int getContentLength() 该方法用于获取Content-Length头字段的值,结果为int类型
    String getCharacterEncoding() 该方法用于返回请求消息的实体部分的字符集编码,通常是从Content-Type头字段中进行提取,结果为String类型

    HttpServletRequest 获取请求体entity-body

    方法声明功能描述
    String getParameter(String name) 该方法用于获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数,getParameter()方法返回null;如果指定名称的参数存在但没有设置值,则返回一个空串;如果请求消息中包含有多个该指定名称的参数,getParameter()方法返回第一个出现的参数值
    String[] getParameterValues(String name) HTTP请求消息中可以有多个相同名称的参数(通常由一个包含有多个同名的字段元素的FORM表单生成),如果要获得HTTP请求消息中的同一个参数名所对应的所有参数值,那么就应该使用getParameterValues()方法,该方法用于返回一个String类型的数组
    Enumeration getParameterNames() 该方法用于返回一个包含请求消息中所有参数名的Enumeration对象,在此基础上,可以对请求消息中的所有参数进行遍历处理
    Map getParameterMap() 个体Parameter Map()方法用于将请求消息中的所有参数名和值装入进一个Map对象中返回

    参考地址:https://www.cnblogs.com/xzsty/p/11452610.htm https://blog.csdn.net/cold___play/article/details/100920952

    我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。 我要做一个自由又自律的人,靠势必实现的决心认真地活着。
  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/lixiuming521125/p/15200350.html
Copyright © 2020-2023  润新知