- URI用字符串标识某一互联网资源,URL表示资源的地点。URL是URI的子集。
- URI更像是用一个唯一的字符串去描述资源
- URL则是用一个地址的方式去表示资源
- HTTP请求
方法(POST,GET...) URI HTTP版本 请求首部字段(请求头) (空一格) 内容实体
- HTTP响应
HTTP版本 状态码和原因字段(200 OK) 响应头 (空一格) 内容实体
- HTTP是无状态协议,它自身不对请求和响应之间的通信状态进行保存,在HTTP这个级别,协议对发送过的请求或响应都不做持久化处理。记住多个客户端的状态很累的。
- 持久连接,初始版本中每一次HTTP通信都要断开重连一次TCP连接。通信开销大,1.1中只要任意一端没有明确提出断开连接,就保持TCP连接。
- 管线化,以前发送请求后需要等待并收到响应才能发送下一个请求。管线化后,不用等待响应就可以直接发送下一个请求。
- Cookie,通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
- Cookie会根据从服务器发送的响应报文内的Set-Cookie的首部字段信息,通知客户端保存Cookie。下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
- 服务器发现发送来的Cookie,回去检查是从哪一个客户端发来的请求,然后对比服务器上的记录,最后得到之前的状态信息。
--请求 GET /reader/ HTTP/1.1 Host: hackr.jp --响应 HTTP/1.1 200 OK Date: Thu, 12 Jul 2012 07:12:20 GMT Server: Apache <Set-Cookie: sid=1342077140226724; path=/; expires=Wed,10-Oct-12 07:12:20 GMT> Content-Type: text/plain; charset=UTF-8 --下一次请求 GET /image/ HTTP/1.1 Host: hackr.jp Cookie: sid=1342077140226724
GET
- 获取资源,用来请求访问已经被URI识别的资源。
- 服务器,我要XXX资源
POST
- 传输实体主体,GET也可以。POST的主要目的不是获取响应的主体内容。
- 我要把这条消息(实体主体)告诉服务器
PUT
- 传输文件,一般是上传文件。
- HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题。一般不用。
- 我要把这份文件传输传给服务器
- 如
--请求 PUT /test.html HTTP/1.1 Host: www.hackr.jp Content-Type: text/html Content-Length: 1560(1560字节的数据) --响应 响应返回204 Not Content(文件已经存在于服务器上)
HEAD
- 获取报文首部,和GET一样,只是不返回报文主体部分,用于确认URI有效性以及资源更新的日期时间…
- 服务器,我要资源的相关信息
DELETE
- 用来删除文件,同样不带验证机制,一般不使用。
- 我要删除这个资源
OPTIONS
- 询问服务器支持的方法,用来查询针对请求URI指定的资源支持的方法
- 如
--请求 OPTIONS * HTTP/1.1 Host: www.hackr.jp --响应 HTTP/1.1 200 OK Allow: GET,POST,HEAD,OPTIONS
TRACE
- 追踪路径,发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端,就将数字减1,数字为0时,停止传输,在最后一个接收到请求的服务器端返回状态码200 OK的响应。
- 不常用,容易引发XST攻击。
- 回显服务器收到的请求,主要用于测试或诊断。
CONNECT
- 要求用隧道协议连接代理,在于代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。协议吧通信内容加密后经网络隧道传输。
- 基本格式
CONNECT 代理服务器名:端口号 HTTP版本
状态码
- 表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常,通知出现的错误等…
- 格式: 三位数字 原因短语,200 OK
- 分类,第一位数字指定了响应类别,后两位无分类
- 1XX,信息性状态码,接受的请求正在处理
- 2XX,成功状态码,请求正常处理完毕
- 3XX,重定向状态码,需要进行附加操作以完成请求
- 4XX,客户端错误状态码,服务器无法处理请求
- 5XX,服务器错误状态码,服务器处理请求出错
- 常见状态码
- 200 OK,请求被正常处理
- 204 No Content,请求处理成功,但没有资源返回
- 404 Not Found,服务器无法找到资源,或者拒绝服务且不想说明理由
- 500 Internal Server Error,服务端执行请求时发生错误,比如有Bug
HTTPS(HTTP + SSL)
- HTTP缺点
- 通信使用明文,可能被窃听
- 不验证通信方的身份,可能被伪装
- 无法证明报文的完整性,可能被篡改
- SSL
- 提供加密处理
- 使用证书,证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的
- 完整性验证(了解,并不知道怎么验证的)
- HTTPS比HTTP慢,更消耗资源。证书也要花钱。但是安全。