http协议请求头-响应头

本文深入解析HTTP请求与响应头的工作机制,包括请求头中关键字段如User-Agent、Accept和Referer的作用,以及响应头中状态码如200、302的意义。同时,探讨了防盗链机制和响应头中用于页面缓存、重定向和文件下载的设置。

一、请求头
POST /day10/get_post.html HTTP/1.1
Host: localhost:8080 —–(必须的)当前请求访问的目标地址(主机:端口号)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0—-浏览器类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 —-浏览器接收的数据类型
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate ——浏览器接收的数据压缩方式
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
Referer: http://localhost:8080/day10/get_post.html —-当前请求来自哪里 ,可以防盗连
Connection: keep-alive—-浏览器和服务器的连接状态(close/keep-alive)

user=1&psw=12—–实体内容

在这里插入图片描述

referer:防盗连
防盗链:通过手动在地址栏输入URL或者通过一个与此项目无关的超链接,不能访问相应内容。
必须是与该项目有关(根据实际情况)的一个超链接转入到相应的页面,才能访问该servlet的相应内容。

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”);
out.println(“referer=”+referer);
if(referer==null||!referer.startsWith(“http://localhost:8080/TongPeiFu”))
{
//跳转到Error界面
response.sendRedirect("/TongPeiFu/Error");
return;
}
out.println(“这是非常重要的信息1224…”);
}

获取消息头信息方法Interface HttpServletRequest

二、响应头

在这里插入图片描述

(1)状态行

在这里插入图片描述
200:就是整个请求和相应没有发生错误,这是最常见的。
302:表示当你请求一个资源的时候,服务返回302,让浏览器转向另一个资源

public class demo1 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    response.setStatus(302);
    response.setHeader("location", "/servlet03/demo2");
    //response.sendRedirect("/servlet03/demo2");也可以这样写
}

}

①302状态

②200状态

③500状态
比如i=900/0,即服务器端错误

(2)响应头信息
在这里插入图片描述
①refresh: 应用于重定向或一个新的资源被创造,在5秒之后重定向
response.setHeader(“Refresh”, “5;/servlet03/demo2”);

②Content-Disposition

在这里插入图片描述
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

    response.setContentType("text/html");
           //演示下载文件,有时文件名是中文,会出现乱码情况,用以下方式解决
         String temp=java.net.URLEncoder.encode("图片.png","utf-8");
     response.setHeader("Content-Disposition", "attachment;filename="+temp);

            //打开文件。说明一下web站点下载文件的原理

            //1.获取要下载文件的全路径
            String path=this.getServletContext().getRealPath("/images/图片.png");

            //2.创建文件输入字节流(读)
            FileInputStream fis=new FileInputStream(path);

            //做一个缓冲字节数组
            byte buff[] =new byte[1024];
            int len=0;//实际每次读取的字节数
            OutputStream os=response.getOutputStream();

            while((len=fis.read(buff))!=-1)
            {
                os.write(buff, 0, len);
            }

            //关闭
            os.close();
            fis.close();
}

③缓存页面举例说明
1)一些网站(股票)对及时性要求高,不用缓存页面

response.setDateHeader(“Expires”, -1);//不缓存

    //为了保证兼容性
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma","no-cache");

1
2
3
4
5
2)缓存一段时间

//缓存一段时间,如2分钟
response.setDateHeader(“Expires”,System.currentTimeMillis()+2*1000);

    //为了保证兼容性
    response.setHeader("Cache-Control", "System.currentTimeMillis()+2*1000");
    response.setHeader("Pragma","System.currentTimeMillis()+2*1000");

————————————————
版权声明:本文为优快云博主「FixedStarHaHa」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/jiangshangchunjiezi/article/details/77606458

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值