springboot之http头中返回码-301,302,304

3xx-返回码简单介绍

301:资源已经永久迁到新的地址,新的URL会在响应头中返回
302:资源临时被迁到新的地址,新的URL会在响应头中返回
304:表明资源未改变。主要配合请求头中的If-None-Match和If-Modified-Since使用

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.ma</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

2.启动类配置

package com.ma.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.filter.ShallowEtagHeaderFilter;

/**
 * created by <a href="mailto:[email protected]" > mameng </a>
 */
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public OncePerRequestFilter shallowEtagHeaderFilter() {
        return new ShallowEtagHeaderFilter();
    }
}

3.DemoController

package com.ma.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;

/**
 * created by <a href="mailto:[email protected]" > mameng </a>
 */
@RestController
public class DemoController {

    @GetMapping("/demo")
    public String demo() {
        return "demo";
    }

    @GetMapping("/demo2")
    public String dem2() {
        return new Date().toString();
    }

    @GetMapping("/301")
    public void d301(HttpServletResponse response) {
        response.setStatus(301);
        response.setHeader("Location", "http://localhost:8080/demo2");
    }

    @GetMapping("/302")
    public void p(HttpServletResponse response) {
        response.setStatus(302);
        response.setHeader("Location", "http://localhost:8080/demo2");
    }
}

4.启动启动类

304 - GET http://localhost:8080/demo,两次相同的请求,第一次返回码为200,第二次返回码为304,请注意http头中的If-No-Match和Etag标记

301 - GET http://localhost:8080/301

302 - GET http://localhost:8080/302

301/302中请注意http头中的Referer字段.

参考链接

SEO 之 SpringMVC redirect 301,301和302区别详细讲解

spring boot etag header example

猜你喜欢

转载自blog.csdn.net/m0_37732829/article/details/108060483
今日推荐