JavaWeb 之 HTTP 协议

一、HTTP 协议简介

  1、协议

    协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。

  2、HTTP 协议

    HTTP:Hyper  Text Transfer Protocol 超文本传输协议。

        是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

    传输协议:定义了客户端和服务器端通信时,发送数据的格式。

    报文:客户端与服务端通信时传输的内容我们称之为报文。

    HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。

    所谓 HTTP 协议, 就是指, 客户端和服务器之间通信时, 发送的数据, 需要遵守的规则, 叫 HTTP 协议。

    

  3、HTTP 协议特点

    (1)基于 TCP/IP 的高级协议

    (2)默认端口号:80

    (3)基于请求/响应模型的:一次请求对应一次响应

    (4)无状态的:每次请求之间相互独立,不能交互数据

二、HTTP 协议的会话方式

    浏览器与服务器之间的通信过程要经历四个步骤

      

1、浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接

2、浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对  

三、HTTP1.0 和 HTTP1.1的区别

  HTTP1.0(短连接):浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接(每次请求响应都会建立新的连接)

  HTTP1.1(长连接):允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率(请求的连接可以复用)

  

四、请求与响应

  1、报文格式

    报文:客户端与服务端通信时传输的内容我们称之为报文。

    客户端与服务端通信时传输的内容称之为报文,报文有着它自己的格式。

    

  2、请求的 HTTP 协议格式

    客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应。

    HTTP 协议中有七种请求方式,常用的有两种  GET 和 POST。

    (1)请求报文格式

请求首行(请求行);

请求头信息(请求头);

空行;

请求体;

    (2)GET 请求

1、请求行:

  ① 请求的方式                                 GET

  ② 请求的资源路径[+?+请求参数]   

  ③ 请求的协议的版本号                   HTTP/1.1

2、请求头

  key :value 组成                            不同的键值对,表示不同的含义

      注意:GET 请求没有请求体,请求体在 url 地址栏中。

    (3)POST 请求

1、请求行

  ① 请求的方式                            POST

  ② 请求的资源路径                     

  ③ 请求的协议的版本号              HTTP/1.1

2、请求头

  key :value                                不同的请求头,代表不同的含义

空行                                                   用来分割请求头和请求体

3、请求体                                          发送给服务器的数据(封装请求参数)

    

    (4)常用请求头的说明

Accept:表示客户端可以接收的数据/文档类型,*/*表示什么都可以接收;
Referer:表示请求发起时,浏览器地址栏中的地址从哪里来(例从百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了)主要用于① 防盗链;② 统计工作
User-Agent:表示浏览器的信息(可以在服务器端获取该头的信息,解决浏览器的兼容性问题)
Accept-Language:告诉服务器客户端可以接收的语言类型,zh-CN:支持中文;en-US支持英文
Accept—Encoding:告诉服务器可以接收的数据编码(压缩)格式,gzip,defalte:支持的压缩格式,数据在网络传递时,可以服务器会把数据压缩再发送
Host:表示请求的服务器ip和端口号;
Content-Length:表示请求体数据的长度
connection:告诉服务器请求连接如何处理,keep-Alive:表示回传数据后不要马上关闭,保持一小段时间的连接(默认3000ms);Closed:马上关闭
Cache-Control:表示如何控制缓存 no-cache 表示不缓存
Content-Type:表示发送的数据的类型         ① application/x-www-form-urlencoded:表示提交的数据格式是 name=value&name1=value2,然后对其 URL 编码(URL编码是把非英文内容转换为%xx%xx)         ② multipart/form-data:表示以多端的形式提交给服务器(以流的形式提交,用于上传文件)
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送过去

  

    (5)哪些是 GET 请求,哪些是POST 请求

        GET请求:

          • form 标签中 method=get(不写,默认也是get)
          •  a 标签的跳转
          •  link 标签引入 CSS 文件
          •  script 标签引入 JS 文件
          •  img 标签引入 图片
          •  iframe 引入 HTML 页面
          •  在浏览器地址栏中输入地址然后敲回车

        POST请求:

          •  form 标签中 method=post

  3、响应的HTTP 协议格式

    (1)响应报文格式

1、响应首行(响应行)

  ① 响应的协议和版本号;

  ② 响应的状态码;

  ③ 响应的状态描述符;

2、响应头信息(响应头)

  key :value                    不同的响应头,代表不同的含义

空行                                       用来分割响应头和响应体。

3、响应体                              回传给客户端的数据

    (2)响应报文

      

    (3)响应头说明

 Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式;

 Content-disposition:服务器告诉客户端以什么格式打开响应体数据;
          ① in-line:默认值,在当前页面内打开;
          ② attachment;filename=xxx;以附件形式打开响应体。(一般应用于文件下载)

  

    (4)常用响应码

200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了, 但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求, 但是服务器内部错误(代码错误)

  4、响应码说明

    响应码对浏览器很重要,它告诉浏览器响应的结果,状态码都是3位数字

1xx:服务器收客户端信息,但是没有接受完成,等待一段时间后,发送1xx状态码

2xx:成功。如:200请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;

3xx:重定向。如:302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;304:代表访问本地缓存

4xx:客户端错误。如:404:表示请求服务器已经收到了,请求的资源可能没有找到(说明客户端错误的请求了不存在的资源)或者请求地址写错了;405:请求方式没有对应的doxxx方法;

5xx:服务器错误。如:500:表示服务器已经收到请求了,但服务器内部出现了错误(代码出现错误)

 

五、MIME 类型说明

  MIME 是 HTTP 协议中数据类型。

  MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。 MIME 类型的格式是“大类型/小类型” , 并与某一种文件的扩展名相对应。 

  常见的 MIME 类型:

文件 MIME 类型
超文本标记语言文本 .html , .htm text/html
普通文本 .txt text/plain
RTF 文本 .rtf application/rtf
GIF 图形 .gif image/gif
JPEG 图形 .jpeg,.jpg image/jpeg
au 声音文件 .au audio/basic  
MIDI 音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio 音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG 文件 .mpg,.mpeg video/mpeg
AVI 文件 .avi video/x-msvideo
GZIP 文件 .gz application/x-gzip
TAR 文件 .tar application/x-tar
原文地址:https://www.cnblogs.com/niujifei/p/15112468.html