Web---HTTP请求、重定向、转发和数据压缩(1)

简介: Web---HTTP请求、重定向、转发和数据压缩

HTTP常用的请求方式包括:


GET-最为常见,但发送的数据量很小,发送的数据直接包含到url的后面。

POST-可以包含大量数据,数据在请求正文中通过表单进行提交。


HEAD,PUT,DELETE.

后面三种Tomcat服务器默认都不支持。常用的只有前两种。


GET:

发送到服务器的数据出现在URL的后面。最多不能超过1K.如:


http://localhost:8080/index.jsp?name=itcast&sex=man&..


POST:

发送到服务器的数据会出现有请求的正文部分。数据量不受限制。如:


<form name=“dd” method=“post” action=“some.jsp”>
       Name:<input type=“text” name=“name”/>
       <input type=“submit” value=“提交”/>
</form>
POST /a.html HTTP/1.1                            //请求行
Accept: */*                        //客户端支持的返回类型
Referer: http://localhost:2046/b.html     //客户端的网址
Accept-Language: zh-cn                       //客户端的语言类型
User-Agent: Mozilla/4.0                        //客户端的浏览器类型
Accept-Encoding: gzip, deflate            //客户端支持的数据压缩类型
Host: localhost:2046                            //服务器的地址
Connection: Keep-Alive                //是否保持连接,可选的值为Keep-alive|close
[必须的一行空行]
name=itcast&pwd=1234               //请求的正文


Connection请求头详解:

Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep - Alive”,

或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),

显著地减少下载所需要的时间。


请求头讲解:


所有的信息都在request中包含

Accept: */*   说明支持的数据类型  
Referer: http://localhost:9999/itcast/a.html  //从哪儿来的,可以防止非法引用连接
Accept-Language: zh-cn   //支持的语言
User-Agent: Mozilla/4.0 //说明使用的浏览器的版本信息
Accept-Encoding: gzip, deflate       //客户端支持压缩格式
Host: localhost:9999  //访问的主机
Connection: Keep-Alive //在请求完成后是否断开连接。可选值另有,HTTP/1.1 :close
Cookie :            //缓存在客户端的数据(数据量最大4K)
Content-Length: 8       //发送的字节长度
Cache-Control: no-cache //是否缓存数据
Content-Type: application/x-www-form-urlencoded //内容类型,此意为表单


http响应的格式:


HTTP响应的格式也有三部分组成

响应首行,也叫状态行。   HTTP/1.1    404(状态码)    not found

响应头

[空行]

响应正文(Response Content)。


HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=D6241588E2D14A562CB5BD6ECD0B3DF3
Content-Type: text/html;charset=GBK
Content-Length: 200
Date: Mon, 30 May 2011 09:02:03 GMT
<html><head>Itcast<head>…


响应头格式讲解:

HTTP/1.1 200 OK  //状态码200是正常返回数据
Location:http://localhost:8080/aa/abc.jsp //跳到哪个页面即重定向。等同于sendRedirect(),状态码为302
Server: Apache-Coyote/1.1  //服务器类型
Content-Type: text/html   //正文类型
Content-Length: 8           //返回字节的长度
Content-Encoding:gzip   //服务器端的压缩格式,用于通知客户端如何解压
Date: Tue, 24 May 2011 10:42:28 GMT
Refresh:1;url=http://www.baidu.com //1秒钟以后刷新到某个地址
Content-Disposition:attchment;filename=“car.jpg” //下载文件时指定下载的文件
Transfer-Encoding: chunked //数据是一块一块的方式发送给客户端的
Expires:-1 //不需要缓存本次响应的数据
Cache-control:no-cache  //针对不同版本的浏览器所以必须三个都用
Pragma:no-cache


一些常用的状态码:

状态码都是用一个三位数来表示。
200表示响应成功。
302重定向表其他资源。
404:找不到页,403:访问被拒绝,
401:未认证的用户
405不支持的请求方式,通常在继承了HttpServlet但没有实现doGet或doPost时出现。
400:错误的请求。
500内部错误,如编码或Exception.
所有的状态码,在HttpServletResponse中使用一个静态常量来表示,见Servlet-Api。


设置页面不缓存:

虽然页面缓存可以为我们省流量,但是,有时候我们就是让它能时刻刷新,不要缓存,怎么办呢

我们就可以利用响应头来告诉浏览器,这个页面不要给我缓存就可以了。

如果你是jsp页面则:
<%
response.setHeader("Expires","-1");
response.setHeader("Cache-control","no-cache");
response.setHeader("Pragma","no-cache");
%> 
如果你是Servlet在响应前设置://这3个都有设置,以便于兼容不同的浏览器
resp.setHeader("Expires","-1");
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");
操作方法:
在IE上点<前进>和<后退>按扭,通过HTTPWatc查看是否是从(Cache)缓存中获取数据。
刷新不会从缓存中获取数据,刷新时总是向服务器获取新的数据。


sendRedirect重定向

代码:

RedirectServlet.java:

package cn.hncu.img;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 演示重定向
 * @author 陈浩翔
 *
 * 2016-7-18
 */
public class RedirectServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //重定向---法一:
        String path = "/myHelloWeb/jsps/res.jsp";
        //response.sendRedirect(path);
        //重定向---法二:
        response.setStatus(302);//重定向
        response.setHeader("Location", path);
        //response.setStatus(404);
        //response.getWriter().print("aaaaaaaaa");//会输出这一句,但不会跳转到结果界面了。
    }
}


配置web.xml


<servlet>
    <servlet-name>RedirectServlet</servlet-name>
    <servlet-class>cn.hncu.img.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RedirectServlet</servlet-name>
    <url-pattern>/redirect</url-pattern>
    <!-- 这一个斜杠不能省略的啊!/在这里代表着这个项目根目录下 -->
  </servlet-mapping>

index.jsp:

<h2><a href="redirect">演示重定向</a></h2>• 1

结果页面res.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
     <h1>这是最终的结果页面</h1>
  </body>
</html>


演示结果:

image.png

再点击:演示重定向

image.png



注意到了吗,浏览器向服务器请求了2次!


把这句的注释去了。再次点击访问

response.setStatus(404);

//response.getWriter().print(“aaaaaaaaa”);//会输出这一句,但不会跳转到结果界面了。


image.png


response.getWriter().print(“aaaaaaaaa”);

如果去掉这句的注释:

image.png

目录
相关文章
|
1月前
|
数据采集
Haskell爬虫:连接管理与HTTP请求性能
Haskell爬虫:连接管理与HTTP请求性能
|
14天前
|
监控 网络协议 应用服务中间件
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
本文详细解析了Tomcat架构中复杂的`Connector`组件。作为客户端与服务器间沟通的桥梁,`Connector`负责接收请求、封装为`Request`和`Response`对象,并传递给`Container`处理。文章通过四个关键问题逐步剖析了`Connector`的工作原理,并深入探讨了其构造方法、`init()`与`start()`方法。通过分析`ProtocolHandler`、`Endpoint`等核心组件,揭示了`Connector`初始化及启动的全过程。本文适合希望深入了解Tomcat内部机制的读者。欢迎关注并点赞,持续更新中。如有问题,可搜索【码上遇见你】交流。
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
|
3天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
9 1
|
9天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
29 1
|
20天前
|
SQL 存储 安全
Web安全-CSRF跨站请求伪造
Web安全-CSRF跨站请求伪造
34 5
|
23天前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
25天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
37 7
|
23天前
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
24 1
|
1月前
|
JSON 监控 API
http 请求系列
XMLHttpRequest(XHR)是一种用于在客户端和服务器之间进行异步HTTP请求的API,广泛应用于动态更新网页内容,无需重新加载整个页面。本文提供了多个官方学习资源,包括MDN Web Docs、WhatWG和W3C的规范文档,涵盖属性、方法、事件及示例代码。XHR的主要应用场景包括动态内容更新、异步表单提交、局部数据刷新等,具有广泛的支持和灵活性,但也存在处理异步请求的复杂性等问题。最佳实践包括使用异步请求、处理请求状态变化、设置请求头、处理错误和超时等。这些资源和实践将帮助你更好地理解和使用XHR。
24 1
|
26天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
62 0
下一篇
无影云桌面