Java Web -- Servlet(8) Http协议详细分析--请求部分(referer)(1)

来源:互联网 发布:苹果6激活应用与数据 编辑:程序博客网 时间:2024/05/17 18:49

一、HTTP协议介绍:

超文本传输协议HTTPHyperText 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)发送的内容

 

 

请求行介绍

请求行的请求方式

PostGetHeadOptionsDeleteTracePut

常用的请求方式:PostGet

PostGet的区别:

1Get提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;

Post提交:把提交的数据放置在HTTP包的包体中。

因此,Get提交的数据会在地址栏中显示出来,而Post提交,地址栏不会改变。

(2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。而在实际开发中存在的限制主要有:

Get:特定浏览器和服务器对URL长度有限制,例如IEURL限制为(2K+35)。对于其他浏览器,如FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

因此对于Get提交时,传输数据就会受到URL长度的限制。

Post:由于不是通过URL传值,理论上数据不受限。

3)安全性:相对而言Post提交,安全高。

http协议版本介绍:

1.http协议是建立在TCP/IP协议基础上

2.http协议全称超文本传输协议

3.http协议有1.01.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-CharsetISO-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(接受gzipdeflate压缩后数据)

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.javaServlet文件)

主要代码如下:

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方式请求时,表单中的信息就保留在发送的内容这里。

 

0 0
原创粉丝点击