Java Web -- Servlet(8) Http协议详细分析--请求部分(referer)(1)
来源:互联网 发布:苹果6激活应用与数据 编辑:程序博客网 时间:2024/05/17 18:49
一、HTTP协议介绍:
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。它是工作在TCP/IP协议基础上的。
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。通过HTTP或者HTTPS协议请求的资源由统一资源标示符(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。
下面是我用httpwatch抓包软件的效果图:
二、Http的请求部分:
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
基本结构:
(1)请求行
请求行用于描述客户端的请求方式,请求的资源名称,以及使用的HTTP协议版本号
(2)消息头:格式 消息名:内容
特别说明:并不是每一次请求的消息头都一样
消息头用于描述客户端请求哪台主机,以及客户端的一些环境信息等。
(3)发送的内容
请求行介绍
请求行的请求方式:
Post、Get、Head、Options、Delete、Trace、Put
常用的请求方式:Post、Get
Post与Get的区别:
(1)Get提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;
Post提交:把提交的数据放置在HTTP包的包体中。
因此,Get提交的数据会在地址栏中显示出来,而Post提交,地址栏不会改变。
(2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。而在实际开发中存在的限制主要有:
Get:特定浏览器和服务器对URL长度有限制,例如IE对URL限制为(2K+35)。对于其他浏览器,如FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
因此对于Get提交时,传输数据就会受到URL长度的限制。
Post:由于不是通过URL传值,理论上数据不受限。
(3)安全性:相对而言Post提交,安全高。
http协议版本介绍:
1.http协议是建立在TCP/IP协议基础上
2.http协议全称超文本传输协议
3.http协议有1.0和1.1.两个版本,目前通用的是1.1版本
http 1.0称为短连接
http 1.1称为长连接
所谓长,短指的是持续时间的
长连接有时间约定,而短连接是发送完数据就断掉。
消息头介绍
HTTP请求中的常用消息头:
Accept: text/html, application/xhtml+xml, */*(接受。告诉服务器我所能接受的内容文本、网页、应用程序...)
X-HttpWatch-RID: 53406-10021()
If-Modified-Since:时间(告诉服务器,我的缓冲中有这个资源文件,该文件的时间为...)
Accept-Charset:ISO-8859-1(接受字符编码ISO-8859-1)
Referer:http://localhost:8080/UserManager/MainFrame(告诉服务器,我来自哪里,如果没有从哪个链接而来,只是直接输入URL,返回为Null,常用与防止盗链)
Accept-Language: zh-CN(浏览器支持的语言。中、英文)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko(告诉服务器,我的浏览器内核。)
Accept-Encoding: gzip, deflate(接受gzip、deflate压缩后数据)
Host: www.baidu.com:80(所要找的主机是:www.baidu.com:80)
Connection: Keep-Alive(保持连接,发完数据后,我不关闭连接)
Cookie: JSESSIONID=545D743633A881DD7BE27FE45D038A60(我有没有传Cookie给服务器)
Date:(浏览器发送该Http请求的时间)
---------------------------------------------------------------------------------------
可通过这样的代码获取Http请求过来的信息:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String host = request.getHeader("Host");
out.println("Host = "+host+"<br/>");
String Language = request.getHeader("Accept-Language");
String Encoding = request.getHeader("Accept-Encoding");
out.println("该请求的语言:"+Language+"<br/>"+"接受压缩格式:"+Encoding);
}
效果图
---------------------------------------------------------------------------------------
防止没有经过本网站而非法进入到登录后的页面(非法盗链):
(1)在UserManager中创建TestHttp.java(Servlet文件)
主要代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("访问成功,您所要访问的图片为:<br/>");
//获取Referer的值
String referer = request.getHeader("Referer");
//referer等于null或者不是从特定的网站来的,跳转到Error页面
if(referer==null|| !referer.startsWith("http://localhost:8080/UserManager/gogo.html")){
response.sendRedirect("Error");
return;
}
//如果是本网站链接而来,即显示图片
out.println("<img src='images/1.jpg' width=200 height=140 />");
}
(2)在Error.java中输出一句提示
重要代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("不好意思,您访问不合法,请重新返回到");
out.println("<a href='http://localhost:8080/UserManager/gogo.html'>首页</a>");
}
(3)gogo.html重要代码如下:
<body>
<a href="http://localhost:8080/UserManager/TestHttp">请点击这里可查看图片</a><br/>
</body>
效果如下:
当在浏览器中输入http://localhost:8080/UserManager/TestHttp时,显示如下
跳转到http://localhost:8080/UserManager/Error页面,当点击首页时,显示如下
跳转到http://localhost:8080/UserManager/gogo.html页面,当点击“请点击这里可查看图片”时,显示如下:
补充:
导入图片的过程
在images文件夹下右键单击import选择generic下的File System,接下来如下
发送的内容介绍:
客户端所要发送给服务器的内容。如:当以post方式请求时,表单中的信息就保留在发送的内容这里。
- Java Web -- Servlet(8) Http协议详细分析--请求部分(referer)(1)
- Java Web -- Servlet(9) Http协议详细分析--HTTP响应部分(Refresh、Content-Disposition、缓存例子)(2)
- 【Java Web】HTTP请求消息头——Referer
- 小白学Java Web 11 Http协议1(http请求)
- http请求中的referer
- http 请求中的 referer
- http 请求中的 referer
- http 请求中的 referer
- Http协议之Referer
- Http协议之Referer
- Http协议字段Referer
- Http请求协议分析
- HTTP协议之请求部分
- http请求的referer属性
- http请求的referer属性
- http 协议中得 referer
- Java Web表示层技术:使用Servlet处理HTTP请求
- WP添加请求链接来路 WP7/8(Windows Phone) and Http-Referer and WebClient-referer
- Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64
- c#实验7.1百分制转为五分制
- Android网络状态实时监听器
- 剖析淘宝TDDL
- 360安全卫士2016最新版 v10.3.0.1001n 官方版
- Java Web -- Servlet(8) Http协议详细分析--请求部分(referer)(1)
- JQuery小技巧
- 自定义Django Command命令
- Android Studio 真机调试出现Adb connection Error:远程主机强迫关闭了一个现有的连接。
- python @property理解
- iOS--- 关于枚举的使用
- Python-汉诺塔问题
- 爬楼梯 js算法
- python中的编码解码问题