http协议的再介绍

① http协议是建立在tcp/ip协议基础上

② http协议全称 超文本传输协议

③ http协议1.0 , 1.1版本 ,目前通用的是1.1版本

http1.0 称为短连接

http1.1 称为长连接.

所谓长,和短指的是  持续时间的 长连接 1.1 30s ,短连接是发送完数据就断掉.

http请求部分:

基本结构:

GET /test/hello.html HTTP/1.1 [请求行]

Accept: */*  [消息名]  消息名:内容

Referer: http://localhost:8080/test/abc.html  

Accept-Language: zh-cn

User-Agent: Mozilla/4.0

Accept-Encoding: gzip, deflate  

Host: http://www.sohu.com:80

Connection: Keep-Alive     [消息头格式 消息名: 内容 

特别说明 并不是每一次请求的消息头都一样.]

空行

发送的内容 [格式 : 内容名字=内容体]

 请求方式

请求行中的GET称之为请求方式,请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT

常用的有:POST,GET

GET News/abc.jsp 
http请求消息头
 Accept: text/html,image/*   [告诉服务器,我可以接受 文本,网页,图片]
 Accept-Charset: ISO-8859-1 [接受字符编码 iso-8859-1]
 Accept-Encoding: gzip,compress [可以接受 gzip,compress压缩后数据.]
 Accept-Language: en-us,zh-cn [浏览器支持中,英文]
 Host: www.sohu.com:80 [我要找主机是 www.sohu.com:80]
 If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是 。。。]
 Referer: http://www.sohu.com/index.jsp  [告诉服务器,我来自哪里,该消息头,常用于防止盗链]
 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告诉服务器,浏览器内核]
 Cookie [cookie??]
 Connection: close/Keep-Alive   [保持连接,发完数据后,我不关闭连接]
 Date: Tue, 11 Jul 2000 18:23:51 GMT [浏览器发送该http请求的时间]

关于Referer的实际案例:

//获取用户浏览器Referer

String referer=request.getHeader("Referer");

if(referer==null||!referer.startsWith("http://localhost:8088/servletPro")){

response.sendRedirect("/servletPro/Error");

return;

}

红色的部分可以根据实际情况来修改.

http的响应





状态行:

格式HTTP版本号 状态码 原因叙述

举例:HTTP/1.1 200 OK

状态码含义

100-199表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200-299表示成功接收请求并完成整个处理过程,常用200

300-399为完成请求,客户需要进行一步细化请求。例如:请求的资源已经移动一个新的地址,常用302,307

400-499客户端的请求有错误 404

500-599服务器端出现错误,常用500

http响应的状态行举例说明

200 就是整个请求和响应过程没有发生错误,这个最常见.

302: 表示当你请求一个资源的时候,服务器返回302 表示,让浏览器转向到另外一个资源,比如: response.sendRedirect(“/web应用/资源名”)

 

案例:

response.setStatus(302);

response.setHeader("Location", "/servletPro/Servlet2");

// 上面两句话等价response.sendRedirect("/servletPro/Servlet2");

 

404: 找不到资源

500: 服务器端错误

//http响应消息头详解
Location: http://www.baidu.org/index.jsp  【让浏览器重新定位到url】
Server:apache tomcat 【告诉浏览器我是tomcat】
Content-Encoding: gzip 【告诉浏览器我使用 gzip】
Content-Length: 80  【告诉浏览器会送的数据大小80节】
Content-Language: zh-cn 【支持中文】
Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312]
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】
Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到 http://www.baidu.com】
Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】
Transfer-Encoding: chunked  [传输的编码]
Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲]
Expires: -1[告诉浏览器如何缓存页面IE]
Cache-Control: no-cache  [告诉浏览器如何缓存页面火狐]
Pragma: no-cache   [告诉浏览器如何缓存页面]
Connection: close/Keep-Alive   [保持连接 1.1是Keep-Alive]
Date: Tue, 11 Jul 2000 18:23:51 GMT

①定时刷新Refresh使用
 response.setHeader("Refresh", "5;url=/servletPro/Servlet2");

②文件下载 Content-Disposition 
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		//PrintWriter out = response.getWriter();
		
		//演示下载文件
		response.setHeader("Content-Disposition", "attachment; filename=winter.jpg");
		
		//打开文件.说明一下web 站点下载文件的原理
		//1.获取到要下载文件的全路径
		String path=this.getServletContext().getRealPath("/images/Winter.jpg");
		//System.out.println("path="+path);
		//2创建文件输入流
		FileInputStream fis=new FileInputStream(path);
		//做一个缓冲字节数组
		byte buff[]=new byte[1024];
		int len=0;//表示实际每次读取了多个个字节
		OutputStream os=response.getOutputStream();
		while((len=fis.read(buff))>0){
			
			os.write(buff, 0, len);
		}
		//缺点: 没有进度条./图标/
		
		//关闭
		os.close();
		fis.close();
	}

③缓存讲解

提出问题:浏览器默认情况下,会缓存我们的页面,这样出现一个问题:如果我们的用户习惯把光标停留在地址栏,然后回车来取页面,就会默认调用cache中取数据。

(1) 有些网站要求及时性很高,因此要求我们不缓存页面

代码:
//指定该页面不缓存 Ie
		response.setDateHeader("Expires", -1);【针对IE浏览器设置不缓存】
		//为了保证兼容性.
		response.setHeader("Cache-Control", "no-cache");【针对火狐浏览器等】
		response.setHeader("Pragma", "no-cache");【其他浏览器】

(2) 有些网站要求网页缓存一定时间,比如缓存一个小时

response.setDateHeader("Expires", System.currentTimeMillis()+3600*1000*24);后面一个参数表示设置的缓存保持时间,-1表示永远缓存



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTTP协议连接的流程如下: 1. 建立连接:客户端向服务器发送连接请求,服务器接收到请求后返回响应,建立连接。 2. 发送请求:客户端向服务器发送请求,包括请求的资源、请求方式、请求头等信息。 3. 服务器响应:服务器接收到请求后,根据请求的信息进行处理并返回响应,包括响应码、响应头、响应体等信息。 4. 客户端处理响应:客户端接收到服务器的响应后,根据响应的信息进行处理,例如解析响应头、解析响应体等。 5. 关闭连接:连接关闭可以由客户端或服务器任意一方发起,一般是在请求和响应结束后进行关闭。关闭连接可以释放网络资源并避免资源浪费。 需要注意的是,HTTP协议是无状态的,即每次请求和响应之间没有明确的关联,服务器不会保存客户端的状态信息。为了解决这个问题,可以使用Cookie或Session等机制来维护客户端状态。 ### 回答2: HTTP(超文本传输协议)是一种应用层协议,它用于在网络中传输超文本文档。它是客户端和服务器之间进行通信的基础协议之一。 HTTP协议的连接流程如下: 1. 客户端与服务器建立TCP连接:客户端通过向服务器发送SYN报文请求建立TCP连接。服务器接收到该请求后,发送ACK和SYN报文作为回应。客户端再次发送ACK报文进行确认。 2. 客户端向服务器发送HTTP请求:客户端发送一个HTTP请求报文给服务器。该报文包括请求行(请求方法、请求URL和HTTP协议版本)、请求头(包含各种请求信息)和请求体(可选)。 3. 服务器处理HTTP请求:服务器接收到客户端发送的请求后,根据请求的URL和方法进行处理。服务器会查找请求的资源,并生成一个HTTP响应报文。 4. 服务器向客户端发送HTTP响应:服务器将生成的HTTP响应报文发送给客户端。该报文包括状态行(表示响应的状态码和相应的状态信息)、响应头(包含各种响应信息)和响应体(包含实际的响应内容)。 5. 客户端接收到HTTP响应:客户端接收到服务器发送的HTTP响应后,解析该响应并进行相应的处理。客户端根据响应头中的数据进行逻辑判断,在需要的情况下,可以通过再次发送HTTP请求来获取进一步的资源。 6. 关闭TCP连接:当客户端完成所有的HTTP请求和响应后,可以选择关闭TCP连接。在短连接中,每次请求-响应后都会关闭连接,而在长连接中,可以将连接保持一段时间,以减少连接的建立和关闭所产生的开销。 总结起来,HTTP协议的连接流程可以概括为:建立TCP连接,发送HTTP请求,服务器处理请求并发送HTTP响应,客户端接收响应并处理,关闭TCP连接。通过这样的流程,客户端和服务器可以进行可靠的通信,实现数据的传输和交互。 ### 回答3: HTTP协议是一种用于传输超文本的协议,通常在客户端和服务器之间进行通信。HTTP连接的流程如下: 1. 客户端发起HTTP请求:客户端(如浏览器)发送一个HTTP请求给服务器。该请求包括一个请求方法(例如GET或POST)和请求的URL。 2. 服务器接收请求:服务器收到客户端发送的HTTP请求后进行处理。 3. 服务器处理请求:服务器根据请求的URL和请求方法执行相应的操作。这可以是获取请求的资源、处理数据等。 4. 服务器发送HTTP响应:服务器生成HTTP响应,并将该响应发送给客户端。 5. 客户端接收HTTP响应:客户端(如浏览器)接收到服务器发送的HTTP响应。 6. 客户端处理HTTP响应:客户端根据收到的HTTP响应进行处理。这可以是解析HTML内容、显示数据等。 7. HTTP连接关闭:一旦客户端接收完服务器发送的HTTP响应,连接将会被关闭。 需要注意的是,HTTP协议是无状态的,即每个HTTP请求和响应都是独立的,服务器无法根据前一次请求的内容来回溯。因此,每个请求都需要提供足够的信息(如包含身份验证信息)来使服务器正确处理请求。 另外,HTTP协议使用TCP作为传输层协议,通常经过TCP三次握手建立连接,确保数据传输的可靠性和完整性。因此,在HTTP连接的流程中,还包含了TCP连接的建立和断开的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值