HTTP协议小结
HTTP/0.9
已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
HTTP/1.1
当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
持久链接:1.1的Connection的默认值是keep-alive, 1.0默认值是close非持久链接
HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:
缓存处理
    带宽优化及网络连接的使用
    错误通知的管理
    消息在网络中的发送
    互联网地址的维护
    安全性及完整性
统一资源标识符:
http://
username:passwd
@www.un.org
/subdir/file.html
?var=value&var2=value2
#hash
http://username:passwd@www.un.org/subdir/file.html?var=value&var2=value2#hash
其中#hash等额外参数 只能发送到前端浏览器,服务器获取不到, 可以用js获取 发送到服务器
HTTP/1.1协议中共定义了八种方法(也叫“动作”),方法名称是区分大小写的,来以不同方式操作指定的资源:
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部份(内容体)。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
        
    GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。参见安全方法  http规范是不超过255
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT:向指定资源位置上传其最新内容。成功返回201
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
http格式规范:
每行,以 \r\n 结束,header 、content 中间要有一空行
HTTP 请求 
格式:
Request line
    GET       /dir/1.html   HTTP/1.1      
    请求方法  资源位置      协议版本 
HTTP headers
     通用 header 、请求 header、实体 header
Content
HTTP Response
格式:
Status line
     HTTP/1.1 200 OK
HTTP headers
    通用 header、响应 header、实体 header
Content
    <html>...</html>
响应值:
100-199:参考信息
200-299:成功
300-399:重定向
400-499:客户端错误
500-599:服务器错误
请求 header:
1,Accept: 
   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
   参数为 Content Type
   q 指定优先级[0-1],0为不接受,默认为1
   如果不指定 */* ,则其他类型优先级为0
Accept表示浏览器支持的 MIME 类型;
   MIME的英文全称是 Multipurpose Internet Mail Extensions(多功能 Internet 邮件扩充服务),它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。
   text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型);type 指定大的范围,subtype 是 type 中范围更明确的类型,即大类中的小类。
2,Accept-Charset: 浏览器支持的字符编码
      utf-8;q=0.66,*;q=0.6
3,Accept-Encoding: 浏览器支持的压缩编码
      gzip,deflate,sdch
4,Accept-Language: 浏览器所支持的语言类型
      zh-CN,zh;q=0.8,en;q=0.6 优先顺序,中文简体,
      zh-cn表示简体中文;zh 表示中文
5,Authorization: 授权验证
    Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    401 Unauthorized
使用HTTP AUTH需要在server端配置http auth信息(一般是webserver启动的时候从配置文件里面读取相关信息)。
    用中文简述一下http auth的过程:
    客户端发送http请求
    服务器发现配置了http auth,于是检查request里面有没有"Authorization"的http header
    如果有,则判断Authorization里面的内容是否在用户列表里面,Authorization header的典型数据为"Authorization: Basic jdhaHY0=",其中Basic表示基础认证, jdhaHY0=是base64编码的"user:passwd"字符串。
    如果没有,或者用户密码不对,则返回http code 401页面给客户端
    标准的http浏览器在收到401页面之后,应该弹出一个对话框让用户输入帐号密码;并在用户点确认的时候再次发出请求,这次请求里面将带上Authorization header
一次典型的访问场景是:
    浏览器发送http请求(没有Authorization header)
    服务器端返回401页面
    浏览器弹出认证对话框
    用户输入帐号密码,并点确认
    浏览器再次发出http请求(带着Authorization header)
    服务器端认证通过,并返回页面
    浏览器显示页面
使用http auth的场景不会用cookie,也就是说每次都会送帐号密码信息过去。然后我们都知道base64编码基本上等于明文。这削弱了安全。
    由于种种缺点,http auth现在用的并不多。不过在路由器等场合还是有应用的,原因是http auth最简单,使用起来几乎是零成本。
6,Cookie: HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。
      version=1; skin=new;
百度首页请求头中的cookie
      Cookie    BDUT=pfc827A04BCD53A0082260624BACA0F9A50A13b031e70272;
                MCITY=-131%3A; BAIDUID=16FFD38173B664490E853F05898831CA:FG=1; 
        BDUSS=VibW5hdW53dk5iM0ZzekFBcUZiVGxaaHJxUUJ2Z2FzdGl2OHpuLUVSR2xGeUJUQVFBQUFBJCQAAAAAAAAAAAEAAACvU9En5~Hn9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWK-FKlivhSMT; 
        H_PS_PSSID=5222_6552_6249_1455_5224_6582_6505_6477_4759_6017_6461_6428_6456_6501_6454_6529_6375; 
        BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; BD_CK_SAM=1
7,User-Agent: Mozilla/5.0 (compatible;域名)
  意思:使用的用户代理是 Mozilla/5.0 (compatible; 域名)。
  详解:
  User-Agent(用户代理),简称 UA,它是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
  Mozilla/5.0:Mozilla 是浏览器名,版本是 5.0;
  compatible(兼容的)表示平台是兼容模式;
8,Host: 域名
  Host表示请求的服务器网址;
9,TE: 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息
       trailers, deflate
10,Referer: 先前网页的地址,当前请求网页紧随其后,即来路 ,可用于防盗链
       http://www.sijiaomao.com/
11,Expect:指客户端要求的特殊服务器行为。若服务器不能理解或者满足 Expect域中的任何期望值,则必须返回417(Expectation Failed)状态
      100-continue
12,From:发出请求的用户的Email
      genesis@sijiaomao.com
14,If-Match:如果对象的 ETag 没有改变,其实也就意味着对象没有改变,才执行请求的动作
       "aetaghash"
15,If-None-Match: 如果对象的 ETag 改变了,其实也就意味着对象也改变了,才执行请求的动作。
       "aetaghash"
16,If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答,告诉浏览器该对象没有修改
       Sun, 11 May 2014 05:39:55 GMT
17,If-Unmodified-Since:如果请求的内容在指定的时间之后没修改过,才执行请求的动作(比如返回对象)。
      Sun, 11 May 2014 05:39:55 GMT
18,If-Range:浏览器告诉 WEB 服务器,如果我请求的对象没有改变,就把我缺少的部分给我,如果对象改变了,就把整个对象给我。 浏览器通过发送请求对象的 ETag 或者 自己所知道的最后修改时间给 WEB 服务器,让其判断对象是否改变了。总是跟 Range 头部一起使用。
      "aetaghash" 
      Sun, 11 May 2014 05:39:55 GMT
19,Max-Forwards:  限制信息通过代理和网关传送的时间
       2
20,Proxy-Authorization:连接到代理服务器的授权证书
     Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
21,Range:只请求实体的一部分,指定范围 成功返回206
      bytes=0-499, 1000-1499, 3000-
22,X-Requested-With: 在服务器端判断request来自Ajax请求还是传统请求
      XMLHttpRequest
23,X-Forwarded-For: 是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段
中间代理服务器将客户端IP传递给服务器
      client1, proxy1, 192.168.2.125
      
      这一HTTP头一般格式如下:
      X-Forwarded-For: client1, proxy1, proxy2
      其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。
      鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源。
响应 header:
1,Accept-Ranges: 表明服务器是否支持指定范围请求及哪种类型的分段请求
       bytes
2,Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。
       231
3,Content-Disposition: Content-Disposition 属性是作为对下载文件的一个标识字段
       attachment; filename="example.zip"
Content-Disposition属性有两种类型:inline 和 attachment  
       inline :将文件内容直接显示在页面 
       attachment:弹出对话框让用户下载具体例子
4,ETag:请求变量的实体标签的当前值,对象被修改,ETag也会改变,主要供服务器 判断一个对象是否改变了。
       "abcdthisisatag"
5,Location:用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
       http://www.un.org
6,Refresh: 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)
       3; url=http://www.sijiaomao.com/
7,Retry-After:  如果实体暂时不可取,通知客户端在指定时间之后再次尝试
       Tue, 15 Nov 2014 08:12:31 GMT
       200
8,Server:web服务器软件名称
       "Apache/2.4.2 (Unix)"
9,Set-Cookie: 设置Http Cookie
操作中遇到下面问题
secure=0/false    360,chrome创建不了cookie,火狐能创建 但issecure是true
      issecure=0/false  火狐,360,chrome 都正常
解释:
secure\ httponly 这两个都是只加指令就行,不用赋值
只要有 secure, 那就是只有https才会有效,没有 secure,那就是http\https 都有效
例如 Set-Cookie: var=val; Domain=example.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly
name=cat; domain=.sjm.org; path=/; expires=Tue, 21 May 2014 12:34:56 GMT; secure; httponly
name=cat, 需要设置cookie的值(name不能使用“;”和","号),有多个name值时用";"分隔例如:name1=name1; name2=name2
      expires=date: cookie的有效期限,格式: expires="Wdy,DD-Mon-YYYY HH:MM:SS" 
      path=path:
设置cookie支持的路径,如果path是一个路径,则cookie对这个目录下的所有文件及子目录生效,例如:path="/cgi-bin/",
如
 果path是一个文件,则cookie指对这个文件生效,例如:path="/cgi-bin/cookie.cgi"。
      domain=domain: 对cookie生效的域名,例如:domain="gzdzw.51.net"
      secure: 如果给出此标志,表示cookie只能通过SSL协议的https服务器来传递。
httponly,禁止js获取cookie值
10,Vary:告诉下游代理是使用缓存响应还是从原始服务器请求
       Accept-Language, User-Agent
Vary: Accept-Encoding 告知缓存代理服务器,客户端请求中发送了不同的 Accept-Encoding 就要缓存不同的版本
Vary: User-Agent 不合理该禁止,例如不同的浏览器请求相同的内容 会缓存不同的版本
通用 header
1,Cache-Control: Cache-Control指定请求和响应遵循的缓存机制
      max-age=600, no-cache="Set-Cookie"
no-cache="xxx":缓存,但在发回客户端前先作检查,传值则表示不缓存指定的header
no-store:不缓存任何内容,在IE中=no-cache。
max-age=120: 缓存最大有效期,秒(Age response header)
max-stale=600:在缓存过期后还可以继续保存600秒,不赋值则表示可一直有效
no-transform:禁止缓存代理修改内容
only-if-cached: 禁止缓存代理访问应用服务器,仅在有缓存时返回内容。
public: 任何客户端(代理服务器或浏览器)均可缓存
private: 仅限私有客户端(一般是浏览器)可缓存内容
must-revalidate: 必须重新验证缓存有效性(默认行为),此指令目的在于显式指明
proxy-revalidate:代理服务器需要重新验证缓存有效性,浏览器不需要
s-maxage:指定public客户端上的maxage,private 上忽略。
在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。
      请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,
      响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
      网页的缓存通过HTTP消息头中的“Cache-control”来控制,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。
其作用根据不同的重新浏览方式分为以下几种情况:
      (1)打开新窗口如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如: Cache-control: max-age=5 表示当访问此网页后的5秒内再次访问不会去服务器。
      (2)在地址栏回车如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
      (3)按后退按扭如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问。
      (4)按刷新按扭无论为何值,都会重复访问 当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。
2,Connection: Keep-Alive
  Connection表示客户端与服务连接类型;
  Keep-Alive,表示持久连接;
    close,请求一次后立即关闭
3,Date: 原始服务器消息发出的时间
     Tue, 21 May 2002 12:34:56 GMT
4,Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝,相当于 Cache-Control: no-cache。
     no-cache
5,Keep-Alive:持久连接、连接重用
     300
6,Trailer: 指出头域在分块传输编码的尾部存在
Date
HTTP/1.1 200 OK 
Content-Type: text/html 
Transfer-Encoding: chunked 
Trailer: Date
05 
line1 
05 
line2
0 
Date: Tue, 21 May 2012 12:34:56 GMT
7,Transfer-Encoding: 文件传输编码
     chunked(分块)
8,Upgrade: 允许服务器指定一种新的协议或者新的协议版本,与响应编码101(切换协议)配合使用。
        HTTP/2.0
        TLS/1.0
9,Via: 通知中间网关或代理服务器地址,通信协议
      192.168.11.12, example.com
      proxy1, proxy2
10,Warning:     关于消息实体的警告信息,服务器给客户端发个警告信息
      199 Miscellaneous warning
      110 Response is stale
      112 Disconnected operation
      ...
实体 header
1,Allow: 对某网络资源的有效的请求行为,不允许则返回405
     GET, HEAD, POST
2,Content-MD5: 返回资源的MD5校验值
      ZTFmZDA5MDYyYTMzZGQzMDMxMmIxMjc4YThhNTMyM2I=
3,Content-Range:在整个返回体中本部分的字节位置
      600-900/1234
4,Content-Encoding: web服务器支持的返回内容压缩编码类型。
      gzip
5,Content-Language:响应体的语言
      zh_CN
6,Content-Length:响应体的长度
      8848
7,Expires: 响应过期的日期和时间 
      Tue, 21 May 2016 12:34:56 GMT
8,Last-Modified:请求资源的最后修改时间
      Tue, 21 May 2013 12:34:56 GMT
HTTP协议小结的更多相关文章
- 转:oracle ebs po模块一揽子采购协议小结
		
转自:http://yedward.net/?id=193 oracle ebs po模块一揽子采购协议小结 本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1. ...
 - KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结(转)
		
源:KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结 Kermit协议 报文格式: 1.MARK,起始标记START_CHAR,为 0x01(CTRIL-A): 2.LEN,报文剩余 ...
 - TCP&UDP协议小结
		
TCP和UDP 传输层功能 网络安全 Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 一个网页可能很大,一个数据包传不过来,就需要分段传输. 网络可能拥塞,某段可能丢失.那必须有人监管, ...
 - Oracle PO - 模块一揽子采购协议小结
		
本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1.理论介绍 (1)名词术语 一揽子采购协议(Blanket Purchase Agreement,BPA)是指某 ...
 - ISO 7810 协议小结
		
ISO 7816规定了Smart Card的传输协议分为 T=0 异步半双工字符传输协议 T=1 异步半双工块传输协议 T=0命令介绍 命令总是由接口设备启动,他以一个5字节的报头通知卡要做什么,然后 ...
 - 《SDN核心技术剖析和实战指南》2.3 OF-CONFIG配置管理协议小结
		
OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...
 - KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
		
转:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1. MAR ...
 - [na]数据链路层&网络层协议小结截图版
		
ip层:分组选路 tcp:端到端的通信 中间系统没必要有应用程序,分组选路即可 应用程序中隐藏所有的物理细节. 语音肯定用udp linux主版本 次版本号 修订号 次版本为偶数说明是稳定版.奇数是开 ...
 - [na]tcp&udp层各协议小结
		
TCP和UDP 传输层功能: 可靠性:序列号.确认号&flag位 有效性:win滑动窗口 这篇目录索引: Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 TCP的可靠性和流控 为 ...
 
随机推荐
- 【Asphyre引擎】冒险岛换装Demo升级到最新版PXL
			
demo代码 (不包含Sprite代码,要Sprite代码请下载之前那个doudou的demo)
 - R语言-GA算法脚本
			
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...
 - toastr 自定义提示
			
在线实例 实例演示 使用方法 <button type="button" class="btn btn-primary" id="showtoa ...
 - Pizza Pie Charts – 基于 Snap SVG 框架的响应式饼图
			
Pizza Pie Charts 是一个基于 Adobe 的 Snap SVG 框架的响应式饼图插件.它着重于集成 HTML 标记和 CSS,而不是 JavaScript 对象,当然Pizza Pie ...
 - VS无法启动 IISExpress web 服务器
			
VS无法启动 IISExpress web 服务器 今天把原来的VS卸载重装了,重装之后启动一个web项目时发现启动不起来,提示如下: 在网上查找资料之后发现是由于WebMatrix也 ...
 - 为Sharepoint 2010 批量创建SharePoint测试用户
			
无意搜到下面一篇文章,http://www.cnblogs.com/lambertqin/archive/2012/04/19/2457372.html,原作者写的太"高大上",可 ...
 - DevExpress .NET界面开发示例大全
			
说到做.net界面开发,很多人应该都会想到DevExpress. 它的 .net界面开发系列一共有7个版本:WinForms.ASP.NET.MVC.WPF.Silverlight.Windows 8 ...
 - Xcode中的常用快捷键
			
新建项目 com + shift +N 新建文件 com + N 偏好设置 通用 com + , 跳到指定行 com + L 当前行加断点 com + \ 移动编辑区最上方 ...
 - 【iOS】使用CoreText实现图文混排
			
iOS没有现成的支持图文混排的控件,而要用多个基础控件组合拼成图文混排这样复杂的排版,是件很苦逼的事情.对此的解决方案有使用CoreText进行绘制,或者使用TextKit.本文主要讲解对于CoreT ...
 - AES加密解密
			
AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种密钥方案,用以适应 ...