一、请求和响应报文
1.请求报文
2.响应报文
二、HTTP方法
客户端发送的请求报文第一行为请求行,包含了方法字段,方法有:GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS,CONNECT,TRACE。
1.GET:获取资源
当前网络请求中,绝大部分使用的是GET方法。
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据
2.HEAD:获取报文首部
和GET方法类似,但是不返回报文实体主体部分。(主要用于确认URL的有效性以及资源更新的日期时间等)
3.POST:传输实体主体
POST主要用来传输数据,而GET主要用于获取资源。
4.PUT:上传文件
由于自身不带检验机制,任何人都可以上传文件,存在安全问题,一般不使用。
5.PATCH:对资源进行部分修改
PUT与可以用于修改资源,但是只能完全替代原始资源,PATCH允许部分修改(save or update)。
6.DELETE:删除文件
与PUT功能相反,并且同样不带验证机制。
7.OPTIONS:查询支持的方法
查询指定的URL能够支持的方法。
会返回Allow:GET,POST,HEAD,OPTIONS这样的内容。
8.CONNECT:要求在与代理服务器通信时建立隧道
使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
9.TRACE:追踪路径
服务器会将通信路径返回给客户端。
发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器就会减1,当数值为0时就停止传输。
通常不会使用TRACE,并且它容易受到XST攻击(Cross-Site Tracing,跨站追踪)。
三、HTTP首部
有通用首部字段、请求首部字段、响应首部字段和实体首部字段。
1.请求首部字段
首部字段名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型, 可使用type/subtype这种形式,一次指定多种媒体类型 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 常用的几种编码格式: gizp:由文件压缩程序gzip(GUN zip)生成的编码格式 compress:由UNIX文件压缩程序compress生成的编码格式 deflate:组合使用zlib格式及由deflate压缩格式生成的编码格式 jdentity:不执行压缩或不会变化的默认编码格式 |
Accept-Language | 使用权重值q表示相对优先级 |
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 | 最大传输逐跳数,就是指定Max-Forwards的值,每经过一次转发,就-1.当值变为0.直接返回响应 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中 URI 的原始获取方 |
TE | 传输编码的优先级 |
User-Agent | HTTP 客户端程序的信息 |
四、Cookie
HTTP/1.1引入Cookie来保存状态信息。
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。
1.用途:
1)会话状态管理(用户登录状态,购物车,游戏分数)
2)个性化设置(用户自定义设置,主题等)
3)浏览器行为跟踪(如跟踪用户行为等)
2.创建过程:
服务器发送的响应报文包含 Set-Cookie 首部字段,客户端得到响应报文后把 Cookie 内容保存到浏览器中。
HTTP/1.0 200 OK Content-type: text/html Set-Cookie: yummy_cookie=choco Set-Cookie: tasty_cookie=strawberry [page content]
客户端之后对同一个服务器发送请求时,会从浏览器中取出 Cookie 信息并通过 Cookie 请求首部字段发送给服务器。
GET /sample_page.html HTTP/1.1 Host: www.example.org Cookie: yummy_cookie=choco; tasty_cookie=strawberry
3.分类:
1)会话期Cookie:浏览器关闭之后它会被自动删除,也就是说她仅在会话期内有效。
2)持久性Cookie:指定一个特定的过期时间(Expires)或有效期(max-age)之后就成了持久性的Cookie。