深度解析HTTP协议:你不知道的5个关键点!

HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP 方法
HTTP 状态码
HTTP 头信息
HTTP 消息结构

HTTP请求格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

HTTP 请求方法

get 请求指定的页面信息,并返回实体主体。
post 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。

delete 请求服务器删除指定的页面。

put 从客户端向服务器传送的数据取代指定的文档的内容。
patch 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

head 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
trace 回显服务器收到的请求,主要用于测试或诊断。

connect HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
options 允许客户端查看服务器的性能。

HTTP状态码

分类
分类描述
1**
信息,服务器收到请求,需要请求者继续执行操作
2**
成功,操作被成功接收并处理
3**
重定向,需要进一步的操作以完成请求
4**
客户端错误,请求包含语法错误或无法完成请求
5**
服务器错误,服务器在处理请求的过程中发生了错误

HTTP状态码

200 OK 请求成功
204 No Content(无内容)

301 Moved Permanently(永久重定向)
302 Found(临时重定向)
303 See Othe(查看其他地址)
304 Not Modified(未修改)
305 Use Proxy(使用代理)

400 Bad Request (语法错误)
401 Unauthorized(未授权)请求要求用户的身份认证
403 Forbidden(禁止)
404 Not Found(未找到)请求的资源(网页等)不存在
405 Method Not Allowed (方法禁用)
406 Not Acceptable(不接受)
407
Proxy Authentication Required
请求者应当使用代理进行授权
408 Request Time-out(请求超时)

500Internal Server Error(服务器内部错误)
501 Not Implemented(尚未实施)
502 Bad Gateway(错误网关)
503 Service Unavailable(服务不可用)
504 Gateway Time-out(网关超时)
505 HTTP Version not supported(HTTP 版本不受支持)

HTTP 响应头信息

Content-Encoding
文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept-Encoding“))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

Allow
服务器支持哪些请求方法(如GET、POST等)。

Content-Length
表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。

Content-Type
表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

Last-Modified
文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

Date
当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。

Expires
应该在什么时候认为文档已经过期,从而不再缓存它?

Location
表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

Refresh
表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader(“Refresh“, “5; URL=http://host/path“)让浏览器读取指定的页面。
注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV=“Refresh“ CONTENT=“5;URL=http://host/path“>实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。

注意Refresh的意义是“N秒之后刷新本页面或访问指定页面“,而不是“每隔N秒刷新本页面或访问指定页面“。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV=“Refresh“ ...>。

注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。

Server
服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。

Set-Cookie
设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie“, ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。

WWW-Authenticate
客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate“, “BASIC realm=\“executives\““)。
注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

免费的API接口开放平台

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值