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 协议版本字段.状态码和状态码 ...
随机推荐
- bitcoinjs-lib 哈希交易之多笔交易合并。
转账的时候需要手动寻找每一笔未花费记录实在太费时. 比特币转账需要提取或合并所有未花费的交易中的比特币,才能实现交易. import * as bitcoin from 'bitcoinjs-lib' ...
- SVN 从主干合并到分支库
主干库:平时开发用的库, 分支库:中途需要进行上生产环境的库 分支库的版本从主干库拉过去就行 红色的为分支库. 创建的速度很快. 1.创建好后,在主干库添加一个文件. 2.然后分支库进行合并,这里用e ...
- 在 json4s 中自定义CustomSerializer
到目前为止,Scala 环境下至少存在6种 Json 解析的类库,这里面不包括 Java 语言实现的 Json 类库.所有这些库都有一个非常相似的抽象语法树(AST).而 json4s 项目旨在提供一 ...
- 查找算法(7)--Hash search--哈希查找
1.哈希查找 (1)什么是哈希表(Hash) 我们使用一个下标范围比较大的数组来存储元素.可以设计一个函数(哈希函数, 也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,于是用 ...
- MySQL数据类型:UNSIGNED注意事项(转)
原文地址:https://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html 1. UNSIGNED UNSIGNED属性就是将数字类 ...
- Angular2 输入完成后触发函数
(blur)="keySearch($event)" ,鼠标点击其他地方触发 keySearch(e): void { var dom = $(e.target); var key ...
- Xcode7.2真机测试问题"The account 'appleID ' has no team with ID ‘’
在Xcode7(测试版)提出免费真机测试的时候,我立刻在网上搜寻测试步骤,很简单,按照步骤走就可以. 但在7.2以后,突然我的iPhone不能真调了!提示"The account 'app ...
- 【视频开发】opencv不能读取MP4格式文件
用OpenCV对视频进行处理时,不能打开.mp4格式的文件.后来解决办法是用ffmpeg.exe将mp4文件转码为avi文件,然后再进行处理.但是转码过程比较慢.后来查看opencv源代码,发现它也是 ...
- csu 1976: 搬运工小明
1976: 搬运工小明 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 94 ...
- oracle 在列名后的 (+)是什么意思,如何转换为mysql
外连接的意思select *from a,bwhere a.id=b.id(+)意思就是返回a,b中匹配的行 和 a中有但是b中没有的行. 参考https://www.cnblogs.com/Aaro ...