HTTP协议

本文详细介绍了HTTP协议的基础知识,包括HTTP的不同版本及其区别、HTTP请求与响应的过程,以及如何处理压缩数据和图片显示等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#JavaEE的基石:HTTP 协议#

##百度百科的HTTP协议:## 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

##http协议的版本:##

  • HTTP/1.0

  • HTTP1.1 。

    区别:前者与主机连接上只能获取一个资源,后者可以获取多个资源


##http请求:##

###定义:### 客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送一个HTTP请求,一个完整的http请求包括如下内容:一个请求行,若干消息头,以及实体内容。

###举例:###

  • GET /books/java.html HTTP/1.1 ==> 请求头:描述客户端的请求方式,请求资源名称,http协议版本号
  • Accept : */* ==>多个消息头:描述客户端请求哪台主机,客户端的一些环境信息等。
  • Accept-Encoding:gzip,deflate
  • .....
  • ==>一个空行
  • 这里是消息体

说明:###

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

1. 不管是POST或GET,都用于向服务器请求莫个WEB资源,这两种方式的区别主要表现在数据传递上:

2. 如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&分割,例如:

         GET /mail/1.html?name=abc&password=xyz http/1.1

3.GET方式的特点:在url地址后附带的参数是有限制的,其数据容量通常不能超过1K。

4.如请求方式为post方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

消息头:

用于http请求中的常用头

1. Accept:text/html,image/* (告诉服务器,客户机支持的数据类型)

2. Accept-Charset:ISO-8859-1(客户机采用的编码)

3. Accept-Encoding:gzip,compress(客户机支持的数据压缩格式)

4. Accept-Language:en-us,zh-cn(客户机的语言环境)

5. Host:www.it315.org:80(客户机想要访问的主机名)

6. If-Modified-Since:Tue,11 Jul 2000 18:23:51 GMT(资源的缓存时间)

7. Referer:http://www.it315.org.org/index.jsp(客户机从哪个资源来访问服务器的,防盗链)

8. User-Agent:Mozilla/4.0 (compatible;MSIE5.5;WIndows NT 5.0) (客户机的软件环境)    

9. Cookie:(客户机通过这个头可以向服务器带数据)

10. Connection:close/Keep-Alive

11. Date:Tue,11 Jul 200- 18:23:51 GMT

##HTTP响应:##

一个HTTP响应代表服务器向客户端会送的数据,它包括:

一个状态行,若干消息头,以及实体内容。

###状态行###

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

  • 举例:HTTP/1.1 200 OK

  • 状态码用于表示服务器对请求的处理结果,他是一个三位的十进制数,响应状态码分为5类

    100~199 : 成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程。

    200~299 :表示成功请求已完成整个处理过程,例如200

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

    400~499 : 客户端的请求有错误,常用404

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

###响应头:### 常用的响应头

* Location: http://www.xxx.com/index.jsp  (这个头配合302状态码使用,用于告诉客户找谁。

* Server  : Apache tomcat (服务器通过这个头,告诉浏览器服务器的类型。

* Content-Encoding:gzip (数据的压缩格式)

* Content-Length   : 80(告诉浏览器回送数据的长度)

* Content-Type      : text/html;charset=GB2312( 告诉浏览器回送数据的类型)

* Last-Modified      :  Tue,11 Jul 2000 18:23:51 GMT 告诉浏览器但前资源缓存时间

* Refresh              : 1;url=http://www.it315.org  (告诉浏览器多长时间刷新一次(可以接网址,代表多少秒后跳转))

* ontent-Dispositon: attchment;filename=aaa.zip (告诉浏览器以下载方式打开数据)

* Transfer-Encoding: chunked (数据传送格式)

* ETag:W/"7777-1242234904000" (缓存相对的头)

* Expires:回送的资源缓存多长时间,-1或0 代表不缓存

* Cache-Control:no-chche

* Pragma:no-cache

    服务器通过以上两个头,也是控制浏览器不要缓存数据

##如何传送压缩数据格式##

public void doGet(HttpServletRequest request, HttpServletReponse response) Throws Excepton{

String data = "aaaa";

ByteArrayOutputStream bout = new ByteArrayOutputStream();

GZIPOutputStream gout = new GZIPOutputStream(bout);

gout.write(data.getBytes());

gout.close();

byte gzip[] = bout.toByteArray();

response.setHeader("Content-Encoding","gzip");

response.setHeader("Content-Length",gzip.length);

response.getOutputStream.write(gzip);   

}

##显示图片##

public void doGet(HttpServletRequest request, HttpServletReponse response) Throws Excepton{{}

response.setHeader("content-type","image/bmp");

InputStream in = this.getServletContext().getResourceAsStream("1.bmp");

int len = 0;

OutputStream out = response.getOutputStream();

while((len=in.read(buffer))>0){

    out.write(buffer,0,len);

}

##以下载方式打开图片##

   public void doGet(HttpServletRequest request, HttpServletReponse response) Throws Excepton{

    response.setHeader("content-disposition","attachment;filename=3.jpg");

    InputStream in = this.getServletContext().getResourceAsStream("3.jpg");

    int len = 0;

    OutputStream out = response.getOutputStream();

    while((len=in.read(buffer))>0){

        out.write(buffer,0,len);

    }

  }

转载于:https://my.oschina.net/u/2272593/blog/374627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值