Java 之 HTTP 协议
一、HTTP 协议简介
1、概念
HTTP:Hyper Text Transfer Protocol 超文本传输协议。
是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
传输协议:定义了客户端和服务器端通信时,发送数据的格式。
报文:客户端与服务端通信时传输的内容我们称之为报文。
HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“
2、特点
(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)常用的响应码说明
响应码对浏览器很重要,它告诉浏览器响应的结果,状态码都是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 |
Java 之 HTTP 协议的更多相关文章
- Java实现SOAP协议 之 HelloWorld
Java实现SOAP协议 之 HelloWorld SOAP是把基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起. 准备: 1. 准备一个web server.Tomcat 下载地址 h ...
- 《转》Java与Http协议
引言 http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式.HTTP协议的主要特点是: 1.支持客户/服务器模式. 2.简单快速:客户向 ...
- Java远程方法协议(JRMP)
Java远程方法协议(英语:Java Remote Method Protocol,JRMP)是特定于Java技术的.用于查找和引用远程对象的协议.这是运行在Java远程方法调用(RMI)之下.TCP ...
- Java Web ——http协议请求报文
package com.demo.util; import java.io.IOException; import java.io.InputStream; import java.net.*; /* ...
- JAVA的UDP协议交互信息
由于要做app的UDP协议交互,所以就特地学习了下,其实也就类似于java的server和socket,下面就写了个简单的demo 服务端: package com.test1; import jav ...
- Java 实现 SSH 协议的客户端登录认证方式--转载
背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间 ...
- java EE : http 协议之请求报文、响应报文
1 HTTP协议特点 1)客户端->服务端(请求request)有三部份 a)请求行 b)请求头 c)请求的内容,如果没有,就是空白字符 2)服务端->客户端(响应response)有三部 ...
- JAVA 基于TCP协议的一对一,一对多文件传输实现
最近老师给我们上了多线程和TCP和UDP协议,其中一个要求就是我们用JAVA协议一个基于TCP和UDP这两种协议的一对一文件上传和一对多文件上传. 然后我就开始分析TCP和UDP这两个协议的特点,发现 ...
- 理解java底层通讯协议
引言: 本周自己重新对底层通讯方式进行了学习,在此做一个输出. 分别从客户端发送多个请求的需求角度与服务端接收多个连接发送请求的需求角度,剖析4种基于java自身技术实现的消息方式通讯所带来的影响,解 ...
- Java Web ——http协议响应报文
HTTP 响应报文 HTTP 响应报文由状态行.响应头部.空行 和 响应包体 4 个部分组成,如下图所示: 下面对响应报文格式进行简单的分析: 状态行:状态行由 HTTP 协议版本字段.状态码和状态码 ...
随机推荐
- IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法
IntelliJ IDEA 运行你的第一个Java应用程序创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导.你应该注意的主要是项目的SDK.SD ...
- ZooKeeper相关资料集锦
1.ZooKeeper相关概念总结 https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/framework/Z ...
- curl 参数配置详解
第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值: CURLOPT_AUTOREFERER当根据Location:重定向时,自动设置header中的Referer ...
- 一个流行的网页动画JS库
animejs https://animejs.com/ Anime.js (/ˈæn.ə.meɪ/) is a lightweight JavaScript animation library wi ...
- 【Spring Boot学习之十一】整合mongoDB
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 参考: SpringBoot+Mongodb的使用
- [转载]schtasks命令使用实例介绍
Schtasks /Query /s "XXX" /V /FO /CSV > XXX.csv 原文出处:http://www.dzwebs.net/2969.html sch ...
- 多分类评测标准(micro 和 macro)
- C基础 stack 设计
前言 - stack 设计思路 先说说设计 stack 结构的原由. 以前我们再释放查找树的时候多数用递归的后续遍历去释放. 其内部隐含了运行时的函数栈, 有些语言中存在爆栈风险. 所以想运用显示栈来 ...
- [Centos 7]MYSQL 安装及登录问题
1. Centos 7 上安装mysql 8 rpm -qa |grep -i mysql //看自己系统有没有装mysql wget https://dev.mysql.com/get/mysql8 ...
- Locust性能测试-环境准备与基本使用 转自:悠悠
前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...