Rumah > Artikel > hujung hadapan web > HTTP协议深度解析
http 介绍http 的请求部分http 请求的基本结构请求行详解 HTTP 请求消息头Http 响应详解http 响应的基本结构状态行http 响应消息头详解Expires、Pragma、Cache-Control 设置不缓存Expires、Pragma、Cache-Control 设置 指定缓存时间HTTP 请求的细节————通用信息头
http 协议是建立在 tcp/ip 协议基础上
http 协议全称 超文本传输协议 (HTTP,HyperText Transfer Protocol )
http 协议 版本 1.0 1.1 2.0
http 1.0 成为短连接,http 1.1 称为长连接
所谓长和短是指 持续时间 长连接 1.1 30s 短连接发送完数据立刻断开
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET,POST,PUT,DELETE。 URL全称是资源描述符,我们可以这样认为:一个U RL地址,它用于描述一个网络上的资源,而HTTP中的G ET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
请求行
消息头
一个空行
内容
请求方式有:post、get、options、delete、trace、put
常用的有:post、get
post 与 get区别:
GET使用URL或Cookie传参。而POST将数据放在BODY中。
GET的URL会有长度上的限制,则POST的数据则可以非常大。
POST比GET安全,因为数据在地址栏上不可见。
Accept :告诉服务器我可以接受的 文件类型 浏览器可接受的MIME类型
Accept-Charset:浏览器可接受的字符集编码
Accept-Encoding:可以接受 以某种 格式 压缩后的数据 例如:gzip 、compress。浏览器能够进行解码的数据编码方式
Accept-Langage:浏览器支持的语言
Host:表示我所要找的 主机 是谁
If-Wodified-Since: 告诉服务器 本机的 缓存中 是否有所要请求的文件 包含这个请求文件的时间 // 服务器受收到这个请求 将时间进行比较 从而判断浏览器所要请求的文件是否发生改变,要是发生改变 将发送一份新的文件给浏览器。没有改变就不会再次发送数据。//注:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304"Not Modified"应答。
Referer:告诉服务器 ,我来自哪里。 该消息头,常用于防止 盗链。关于如何防止盗链的个人理解:
盗链:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
referer 的值 是你点击连接文件的位置。referer.startWith("内部路径");
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ // 防止乱码 response.setContentType("text/html;charset=utf-8"); // 获取输出流 PrintWriter out = response.getWriter(); // 获取用户浏览器 Referer String referer = request.getHeader("Referer"); if(referer == null || referer.startsWith("http://localhost:8080/本地内部用户web应用路径")){ response.sendRedirect("其他非真正资源网页"); return; }else{ } // 内部资源文件 。。。。。。。。。。。 }
User-Agent:告诉服务器,浏览器内核。
Cookie: 这是最重要的请求头信息之一
Connection:表示是否需要持久连接。如果Servlet看到这里的值为"Keep-Alive",或者看到请求使用的是HTTP 1.1 (HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Date:浏览器发送该 http 请求的时间。
Content-Length:表示请求消息正文的长度。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
状态行
多个消息头
一个空行
实体内容
格式: http版本号 状态码 原因叙述719f572dc95af346278bdd6251cfc5d3
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三维的十进制数。响应状态码分为5类。
状态码 | 含义 |
---|---|
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
200~299 | 表示成功接收请求并已完成整个处理过程 。 常用200 |
300~399 | 为完成请求,客户端需进一步细化请求,例如:请求的资源已经移动一个新地址,常用302、307 |
400~499 | 客户端的请求有错误。常用 404 |
500~599 | 服务器端出现错误, 常用 500 |
Location:让浏览器重新定位到 指定的 URL
Server:告诉浏览器 服务器的类型
Content-Encoding:服务端能够发送压缩编码类型
Content-Length: 服务器端发送的压缩数据的长度
Content-Langage:服务端发送的语言类型
Content-Type:服务端发送的类型及采用的编码方式
Last-Modified:服务端对该资源最后的修改(更新)时间
Refresh:服务端要求浏览器在指定的时间,刷新,然后访问指定的页面路径
Content-Disposition:attachmen;filename=aaa.zip 服务端要求客户端一下载文件的方式打开该文件,即告诉浏览器有文件需要下载
Transfer-Encoding:传送数据到客户端的方式
Set-Cookie:服务端发送到客户端的暂存数据
Cache-Control:告诉浏览器如何缓存页面数据
Expires:告诉浏览器如何缓存页面数据 参数 -1 不缓存
Pragma:告诉浏览器如何缓存页面数据
Connection:维护客户端和服务端的连接关系 是否保持连接
Date:服务端响应客户端的时间
// 指定该页面不缓存 ie浏览器内核response.setDateHeader("Expires",-1);// 兼容设置response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");
// 指定该页面缓存指定时间 ie浏览器内核response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000*24;
通用信息头指既能用于请求,又能用于响应的一些消息头
Cache-Control:no-cache
Pragma:no-cache
Connection:close/Keep-Alive
Date:Tue,。。。
Atas ialah kandungan terperinci HTTP协议深度解析 . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!