Http 30x

 
 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
 301重定向是指当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
  
 301重定向可促进搜索引擎优化效果,从搜索引擎优化角度来看,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而受到影响。
  
 同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。
 302 Found
 但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved
 Temporatily”,出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。
 以上说的是301,下面接着说302:
 302转向或者302重定向(302redirect)指的是当浏览器要求一个网页的时候主机所返回的状态码,表示暂时转向到另外一个网址。
  
 302重定向代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat
 SEO曾广泛应用这项技术作弊。
  
 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取
 304 Not Modified
 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
 305 Use Proxy
 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
 307 Temporary Redirect
 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP
 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP
 1.1新)
这个错误表明你的应用程序(可能是Spring Boot内嵌的Tomcat/Jetty)收到了一个非HTTP协议的请求,导致服务器无法解析HTTP方法名(如GET、POST等)。错误中的字节码(如`0x160x03...`)通常是TLS/SSL握手协议的数据,说明客户端尝试使用HTTPS连接,但服务器配置为HTTP端口,或反之。 --- ### **可能原因** 1. **协议不匹配**: - 客户端使用HTTPS(加密的HTTP/2或TLS)连接服务器的HTTP端口(如8080)。 - 服务器未配置SSL,但客户端强制使用HTTPS。 2. **代理或负载均衡问题**: - 反向代理(如Nginx)未正确配置SSL终止,将加密流量转发到后端HTTP服务。 3. **端口混淆**: - 应用程序的HTTPHTTPS端口配置错误(如Spring Boot的`server.port`和`server.ssl.port`冲突)。 4. **恶意流量或扫描**: - 网络中存在自动化工具尝试探测服务,发送了非HTTP协议的数据。 --- ### **解决方案** #### 1. **检查客户端请求协议** - 确保客户端使用正确的协议(HTTPHTTPS)访问服务。 - 如果服务器未启用SSL,客户端不应使用`https://`前缀。 #### 2. **配置Spring Boot支持HTTPS** - 如果需要HTTPS,在`application.yml`中配置SSL: ```yaml server: port: 8443 # HTTPS端口 ssl: key-store: classpath:keystore.p12 key-store-password: yourpassword key-store-type: PKCS12 ``` - 生成密钥库(Keystore): ```bash keytool -genkeypair -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 ``` #### 3. **检查代理配置(如Nginx)** - 如果使用Nginx反向代理,确保正确终止SSL并转发HTTP到后端: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:8080; # 转发到后端HTTP服务 proxy_set_header Host $host; } } ``` #### 4. **验证端口占用** - 确保没有其他程序占用HTTP/HTTPS端口: ```bash netstat -tulnp | grep LISTEN ``` #### 5. **排查恶意流量** - 使用工具(如Wireshark或`tcpdump`)捕获流量,分析来源: ```bash tcpdump -i any -nn port 8080 -A ``` --- ### **代码示例(Spring Boot HTTPS配置)** ```java @SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } } ``` `application.yml`: ```yaml server: port: 8443 ssl: enabled: true key-store: classpath:keystore.p12 key-store-password: changeit key-store-type: PKCS12 ``` --- ### **常见问题** 1. **为什么会出现TLS握手数据?** - 客户端(如浏览器、Postman)或自动化工具尝试用HTTPS连接HTTP端口。 2. **如何禁用HTTP并强制HTTPS?** - 在Spring Boot中配置重定向: ```yaml server: http: port: 8080 port: 8443 ssl: enabled: true ``` 并添加重定向逻辑(如通过Nginx或Spring Security)。 3. **如何测试HTTPS是否正常工作?** - 使用`curl`验证: ```bash curl -k https://localhost:8443/api/test ``` 4. **为什么即使配置了HTTPS,客户端仍报错?** - 检查证书是否有效(自签名证书需添加信任或使用`-k`跳过验证)。 5. **如何同时支持HTTPHTTPS?** - 显式配置两个端口(如8080和8443),但通常不建议(安全风险)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值