HTTP RFC 协议 笔记

本文是关于HTTP协议的深入笔记,主要探讨了其在实际应用中的宽松特性,详细解析了RFC规范中的核心概念,帮助读者全面理解HTTP协议的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者: 溪水清澈
    • HTTP协议, 宽松的应用程序,

    协议规定头域之间只有一个空格,

    但是服务器和客户端应该可以解析多个空格存在的情况

    返回码

    "101"   ;   10.1.2节: 转换协议    

    "200"   ;   10.2.1节: OK

    "201"   ;   10.2.2节:   创建        

    "202"   ;   10.2.3节:   接受        

    "203"   ;   10.2.4节: 非权威信息  

    "204"   ;   10.2.5节: 无内容      

    "205"   ;   10.2.6节: 重置内容     

    "206"   ;   10.2.7节: 局部内容     

    "300"   ;   10.3.1节: 多样选择     

    "301"   ;   10.3.2节: 永久移动     

    "302"   ;   10.3.3节: 创建         

    "303"   ;   10.3.4节: 观察别的部分         

    "304"   ;   10.3.5节: 只读                 

    "305"   ;   10.3.6节: 用户代理             

    "307"   ;   10.3.8节   临时重发             

    "400"   ;   10.4.1节: 坏请求               

    "401"   ;   10.4.2节: 未授权的             

    "402"   ;   10.4.3节: 必要的支付           

    "403"   ;   10.4.4节: 禁用                 

    "404"   ;   10.4.5节: 没找到                

    "405"   ;   10.4.6节: 不允许的方式         

    "406"   ;   10.4.7节: 不接受                

    "407"   ;   10.4.8节: 需要代理验证

    "408"   ;   10.4.9节: 请求超时             

    "409"   ;   10.4.10节; 冲突                 

    "410"   ;   10.4.11节: 停止                 

    "411"   ;   10.4.12节: 需要的长度           

    "412"   ;  10.4.13节; 预处理失败           

    "413"   ;   10.4.14节: 请求实体太大     

    "414"   ;   10.4.15节; 请求-URI太大     

    "415"   ;   10.4.16节: 不支持的媒体类型  

    "416"   ;  10.4.17节: 请求的范围不满足 

    "417"   ;   10.4.18节: 期望失败          

    "500"   ;   10.5.1节:   服务器内部错误      

    "501"   ;   10.5.2节:   不能实现            

    "502"   ;   10.5.3节:   坏网关              

    "503"   ;   10.5.4节:   服务不能实现        

    "504"   ;   10.5.5节:   网关超时            

    "505"   ;   10.5.6节:   HTTP版本不支持

     

    connection

    keep-alive | close | upgrade

     

    内容协商

    Accept

    Accept-Charset

    Accept-Language

    Accept-Encoding

    User-Agent

     

     

    Accept

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

     

    中文解释: (源代码中没有括号, 括号只是为了说明两个值有关联)

    这些类型中, 我最喜欢text/html, text/x-c( 因为假定 q = 1),

    如果没有, text/x-dvi 也可以接受,

    如果还没有, 只能接受text/plain啦.

    Accept-Ranges( 只有这个有s )

    bytes

    范围请求

    Authorization 

     

    认证

    Cache-Control

     

    Pragma: no-cache // http/1.0

    Content-Disposition

    attachment; filename="fname.ext"

    如果此头域用于一个

    Content-Type: application/octet-stream

    响应里,那么含义就是用户代理不应该展现响应,但是它应该直接进入一个‘保存响应为…’对话框。

    文件名应该括起来

    Content-Encoding

    gzip

    identity, 应该是不变吧??

    deflate

     

    Content-Language

     

     

    Content-Length

     

    除非被禁用, 否则必须有, 貌似由apache负责, PHP无能为力

    Content-Location

     

     

    Content-MD5

     

    body的md5摘要

    Content-Range

    假定实体共含1234字节,

    byte-content-range-spec值的例子如下:

    . The first 500 bytes:

    bytes 0-499/1234

    . The second 500 bytes:

    bytes 500-999/1234

    . All except for the first 500 bytes:

    bytes 500-1233/1234

    . The last 500 bytes:

    bytes 734-1233/1234

    如果此头使用,

    需要配合: Content-Length来确定实际传输的数据长度

    • 断点续传

    由客户端带 Range过来,

    1. 如果php不修改Content-Range,

    那么apache会自己把php输出的信息,

    再进行局部截取, 填写Content-Range,

    并交给客户端

    1. php发送header Content-Range的头,

    然后发送局部数据.

    • 说明:

    Content-Length 可能不用处理, apache会处理好的.

    Content-Type

    Content-type: multipart/byteranges; boundary=分割符(应该不带引号, 随机字符串)

    每部分数据会有Content-Type, Content-Range头

     

    Date

    Sun, 06 Nov 1994 08:49:37 GMT

    Sunday, 06-Nov-94 08:49:37 GMT

    Sun Nov 6 08:49:37 1994  

    必须

    这三种都应该可以解析,

    但是服务器只能发送第一种

    星期: 可简写可全写

    月: 必须简写

    ETag

     

    比较来自同一资源的不同实体

    Expires

    例: Thu, 01 Dec 1994 16:00:00 GMT

    优先级低于 Cache-Control

    From

    用户Email: win@ab.com

    机器人应该有这个头

    Host

     

    必须

    If-Match

    值为: ETag

    条件方法

    If-Modified-Since

    值为 GMT时间, 见Date, 返回状态为: 304(未变)

    条件方法

    If-None-Match

    Etag

    如果不匹配

    If-Range

    Etag | Date

    如果实体没有改变,发送我想要的部分

    如果实体改变了,那就把整个新的实体发过来。

    If-Unmodified-Since

    Date

     

    Last-Modified

     

     

    Location

    完整的URL, 包括http://前缀

     

    Max-Forwards

     

    ttl类似

    Pragma 

    no-cache, *

    包含特定执行指令

    Proxy-Authenticate

    407响应使用

     

    Proxy-Authorization

     

     

    Range

    第一个500字节(字节偏移量0-499,包括0和499):           

    bytes=0-499

    第二个500字节(字节偏移量500-999,包括500和999):       

    bytes=500-999

    最后500字节(字节偏移量9500-9999,包括9500和9999):     

    bytes=-500 或 bytes=9500-

    仅仅第一个和最后一个字节(字节0和9999):               

    bytes=0-0,-1 

    关于第二个500字节(字节偏移量500-999,包括500和999)的几种合法但不规范的叙述:

    bytes=500-600,601-999

    bytes=500-700,601-999

    位于: RFC 14.35

    Referer

    本应是: Referrer, 出现了笔误, 延续至今

    这个头, 可以允许服务器为维护而跟踪过时或写错的链接

    Retry-After

     

     

    Server

     

     

    TE ( transfer-coding )

    trailers 客户端愿意接受(chunked)传输编码响应的尾部(trailer)

    块传输, 看起来像是传附件

    Transfer-Encoding

     

     

    Upgrade

    Upgrade常用头域允许客户端指定它支持什么样的附加传输协议,如果服务器会切换到Upgrade指定的协议如果它觉得合适的话。

    如果同意切换协议, 应该返回 101 状态

    协议切换

    如果使用这个头,

    那么connection里面必须有upgrade

    User-Agent

     

     

    Vary

     

     

    Via

    常用头域必须被网关和代理使用

     

    Warning

    警告信息

     

    WWW-Authenticate

    Basic realm="服务器提示信息"

    客户端用头:

    Authorization: Basic MjM6MzIz

    用户名和密码为: md5( 'user:password' );

    必须包含在 401 中, 由服务器发出的头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值