客户端发送请求给服务器,建立一个TCP连接,指定端口号,默认80,链接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端放回状态信息和数据内容。html
GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。web
POST 方法用来传输实体的主体。
虽然用 GET 方法也能够传输实体的主体,但通常不用 GET 方法进行传输,而是用 POST 方法。虽然说 POST 的功能与 GET 很类似,但POST 的主要目的并非获取响应的主体内容。跨域
PUT 方法用来传输文件。就像 FTP 协议的文件上传同样,要求在请求报文的主体中包含文件内容,而后保存到请求 URI 指定的位置。
可是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人均可以上传文件 , 存在安全性问题,所以通常的 Web 网站不使用该方法。若配合 Web 应用程序的验证机制,或架构设计采用 REST(REpresentationalState Transfer,表征状态转移)标准的同类 Web 网站,就可能会开放使用 PUT 方法。浏览器
HEAD 方法和 GET 方法同样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。缓存
DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源。
可是,HTTP/1.1 的 DELETE 方法自己和 PUT 方法同样不带验证机制,因此通常的 Web 网站也不使用 DELETE 方法。当配合 Web 应用程序的验证机制,或遵照 REST 标准时仍是有可能会开放使用的。安全
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。服务器
TRACE 方法是让 Web 服务器端将以前的请求通讯环回给客户端的方法。
发送请求时,在 Max-Forwards 首部字段中填入数值,每通过一个服务器端就将该数字减 1,当数值恰好减到 0 时,就中止继续传输,最后接收到请求的服务器端则返回状态码 200 OK 的响应。
客户端经过 TRACE 方法能够查询发送出去的请求是怎样被加工修改 / 篡改的。这是由于,请求想要链接到源目标服务器可能会经过代理中转,TRACE 方法就是用来确认链接过程当中发生的一系列操做。
可是,TRACE 方法原本就不怎么经常使用,再加上它容易引起 XST(Cross-Site Tracing,跨站追踪)攻击,一般就更不会用到了。cookie
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。
借助状态码,用户能够知道服务器端是正常处理了请求,仍是出现了错误。架构
表示从客户端发来的请求在服务器端被正常处理了。app
该状态码表明服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不容许返回任何实体的主体。好比,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。
通常在只须要从客户端往服务器发送信息,而对客户端不须要发送新信息内容的状况下使用。
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,之后应使用资源如今所指的 URI。也就是说,若是已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 从新保存。
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,但愿用户(本次)能使用新的 URI 访问。
和 301 Moved Permanently 状态码类似,但 302 状态码表明的资源不是被永久移动,只是临时性质的。换句话说,已移动的资源对应的URI 未来还有可能发生改变。好比,用户把 URI 保存成书签,但不会像301 状态码出现时那样去更新书签,而是仍旧保留返回 302 状态码的页面对应的 URI。
该状态码表示客户端发送附带条件的请求时,服务器端容许请求访问资源,而文档的内容(自上次访问以来或者根据请求的条件)并无改变。
该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
该状态码表示发送的请求须要有经过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若以前已进行过 1 次请求,则表示用户认证失败。
返回含有 401 的响应必须包含一个适用于被请求资源的 WWW-Authenticate 首部用以质询(challenge)用户信息。当浏览器初次接收到 401 响应,会弹出认证用的对话窗口。
该状态码代表对请求资源的访问被服务器拒绝了。
未得到文件系统的访问受权,访问权限出现某些问题(从未受权的发送源 IP 地址试图访问)等状况均可能是发生 403 的缘由。
该状态码代表服务器上没法找到请求的资源。
代表当前请求使用的 HTTP 方法不被服务器容许。
例如使用GET方法请求须要POST方法的数据。
该状态码代表服务器端在执行请求时发生了错误。有多是 Web 应用存在的 bug 或某些临时的故障。
该状态码代表服务器和网关/代理通讯出错。
该状态码代表服务器暂时处于超负载或正在进行停机维护,如今没法处理请求。
该状态码代表服务器做为网关或代理,可是没有及时从上游服务器收到请求。
通用首部字段是指,请求报文和响应报文双方都会使用的首部。
指令的参数是可选的,多个指令之间经过 ,
分隔。
Cache-Control: private, max-age=0, no-cache
指令 | 参数 | 说明 |
---|---|---|
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 首部字段具有以下两个做用。
Connection: keep-alive
Connection: Upgrade
Date: Tue, 03 Jul 2012 04:40:59 GMT Date: Tue, 03-Jul-12 04:40:59 GMT Date: Tue Jul 03 04:40:59 2012
Content-Type: application/x-www-form-urlencoded Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Content-Length: 348
Host: en.wikipedia.org:8080 Host: en.wikipedia.org
Accept: text/plain
Accept-Charset: utf-8
Accept-Encoding: gzip, deflate
Origin: http://www.example-social-network.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Cookie: $Version=1; Skin=new;
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Referer: http://en.wikipedia.org/wiki/Main_Page
X-Forwarded-For: client1, proxy1, proxy2 X-Forwarded-For: 129.78.138.66, 129.78.64.103
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43 Forwarded: for=192.0.2.43, for=198.51.100.17
Allow: GET, HEAD
Access-Control-Allow-Origin: *
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Age: 3600
ETag: "737060cd8c284d8af7ad3082f209582d"
Refresh: 5; url=http://www.w3.org/pub/WWW/People.html
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1