zoukankan      html  css  js  c++  java
  • HTTP/HTTPS

    HTTP/S(v1.0, v1.1, v2)是基于TCP的超文本传输协议

    HTTP

    http方法

    报文结构




    通用首部

    Cache-Control指令

    no-cache 和 no-store 的区别:no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期确认后再处理资源。no-store 才是真正的不缓存

    Get和Post区别

    • Get参数放在url
    • Post参数放在request body
    • Get参数长度不超过2KB
    • Post参数长度无限制
    • Get只支持ASCII字符
    • Post支持标准字符集
    • 一次Get建立一次TCP连接
    • 一次Post请求建立两次连接(一次发送请求头,服务器返回100 continue,第二次发送request body,服务器返回200)

    状态码

    状态码 语义
    2xx 成功
    200 OK
    204 No Content 请求处理成功,无返回内容
    206 Partial Content 范围请求,返回部分内容
    3xx 重定向
    301 Moved Permanently 永久重定向
    302 Found 临时重定向
    303 See Other 要求使用GET请求另一个URI
    304 Not Modified 未找到符合请求条件的资源,资源未修改
    307 Temporary Redirect 临时重定向,不会将POST改为GET
    4xx 客户端错误
    400 Bad Request 请求报文存在错误语法
    401 Unauthorized 请求资源需要认证
    403 Forbidden 无理由拒绝
    404 Not Found 没有请求资源
    5xx 服务器错误
    500 Internal Server Error 服务器执行请求时出错
    503 Service Unavailable 服务器不可用(超负载或停机维护)

    首部字段

    通用首部字段

    Cache-Control 控制缓存的行为

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

    Connection 逐跳首部、连接的管理、删除指定首部

    Date 创建报文的日期时间

    Pragma 报文指令

    Trailer 报文末端的首部一览

    Transfer-Encoding 指定报文主体的传输编码方式

    Upgrade 升级为其他协议

    Via 代理服务器的相关信息

    Warning 错误通知

    请求首部字段

    首部字段名 说明
    Accept 用户代理可处理的媒体类型
    Accept-Charset 优先的字符集
    Accept-Encoding 优先的内容编码
    Accept-Language 优先的语言(自然语言)
    Authorization Web认证信息
    Expect 期待服务器的特定行为
    From 用户的电子邮箱地址
    Host 请求资源所在服务器
    If-Match 比较实体标记(ETag)
    If-Modified-Since 比较资源的更新时间
    If-None-Match 比较实体标记(与If-Match相反)
    If-Range 资源未更新时发送实体
    Byte 的范围请求
    If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
    Max-Forwards 最大传输逐跳数
    Proxy-Authorization 代理服务器要求客户端的认证信息
    Range 实体的字节范围请求
    Referer 对请求中URI的原始获取方
    TE 传输编码的优先级
    User-Agent HTTP客户端程序的信息
    • TE: trailers 分块传输编码

    响应首部字段

    首部字段名 说明
    Accept-Ranges 是否接受字节范围请求
    Age 推算资源创建经过时间
    ETag 资源的匹配信息
    Location 令客户端重定向至指定URI
    Proxy-Authenticate 代理服务器对客户端的认证信息
    Retry-After 对再次发起请求的时机要求
    Server HTTP服务器的安装信息
    Vary 代理服务器缓存的管理信息
    WWW-Authenticate 服务器对客户端的认证信息

    实体首部字段

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

    端到端首部(End-to-end Header)

    首部会转发给最终接受目标,且必须保存在由缓存生成的响应中

    逐跳首部(Hop-by-hop Header)

    单次转发有效的首部

    • Connection

    • Keep-Alive

    • Proxy-Authenticate

    • Proxy-Authorization

    • Trailer

    • TE

    • Transfer-Encoding

    • Upgrade

    • 在HTTP1.1中,若同时存在max-age指令和Expires首部,优先处理max-age指令,忽略Expires首部

    • 同一个主机部署多个域名虚拟机,使用Host首部区分

    HTTPS

    SSL连接握手过程

    1. Client->Client Hello ssl版本,加密算法及秘钥长度列表
    2. Server->Server Hello 从加密算法及秘钥长度列表中筛选出的加密算法及秘钥长度列表
    3. Server->Certificate 报文. 公匙证书
    4. Server-> Server Hello Done, 初阶段SSL握手协商结束
    5. Client->Client Key Exchange 使用3中的公匙加密的Pre-master secret随机密码串
    6. Client->Change Cipher Spec 此后通信使用Pre-master secret密匙加密
    7. Client-> Finished报文。连接开始所有报文整体校验值
    8. Server->Change Cipher Spec 报文
    9. Server->Finished 报文
    10. SSL连接建立完成,开始应用层协议通信
    11. 发送HTTP响应
    12. Client-> close_notify 报文
  • 相关阅读:
    尝试用Gearman实现分布式处理(PHP)
    如何在ubuntu上安装node.js
    Linux crontab定时执行任务 命令格式与详细例子
    MySQL的information_schema
    Ubuntu安装MongoDB
    Log4j日志管理系统简单使用说明
    android:screenOrientation横屏竖屏设置
    Android 自定义progressBar样式
    Java使用JDOM解析XML(转载,简单又详细)
    Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity
  • 原文地址:https://www.cnblogs.com/quanee/p/11719954.html
Copyright © 2011-2022 走看看