Java与Http协议

Java与Http协议

引言                                       

      http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。HTTP协议的主要特点是:       1.支持客户/服务器模式。       2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,通信速度很快。       3.灵活:HTTP允许传输任意类型的数据对象。类型由Content-Type加以标记。       4.无连接:即每次连接只处理一个请求,处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。       5.无状态:无状态是指协议对于事务处理没有记忆能力。

     http1.0协议默认的是非持久连接, HTTP1.1默认的连接方式为持久连接。

非持久连接:每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他对象。每个TCP连接只用于传输一个请求消息和一个响应消息。

持久连接:服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。HTTP/1.1的默认模式使用带流水线的持久连接。

 

一、HTTP协议详解之请求

 

复制代码
//请求行POST /reg.jsp HTTP/ (CRLF)       
//消息报头Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF) Accept-Language:zh-cn (CRLF) Accept-Encoding:gzip,deflate (CRLF) If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF) If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF) User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF) Host:www.guet.edu.cn (CRLF) Connection:Keep-Alive (CRLF) (CRLF)
//请求正文 user=jeffrey&pwd=1234
复制代码

     以上是http请求的三部:请求行、消息报头、请求正文。

 

     请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

Method Request-URI HTTP-Version CRLF        其中 Method表示请求方法(如POST、GET、PUT、DELETE等);Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行。

 

二、HTTP协议详解之响应篇

复制代码
//状态行HTTP/1.1 200 OK (CRLF)
//消息报头Cache-Control: private, max-age=30 Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Expires: Mon, 25 May 2009 03:20:33 GMT Last-Modified: Mon, 25 May 2009 03:20:03 GMT Vary: Accept-Encoding Server: Microsoft-IIS/7.0 X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET Date: Mon, 25 May 2009 03:20:02 GMT Content-Length: 12173
//响应正文
复制代码

     HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

     状态行格式如下:            HTTP-Version Status-Code Reason-Phrase CRLF      其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。 常见状态代码、状态描述、说明: 200 OK      //客户端请求成功 400 Bad Request  //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden  //服务器收到请求,但是拒绝提供服务 404 Not Found  //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 

三、HTTP协议详解之消息报头

        HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行;对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

        HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

1、请求报头       请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

常用的请求报头

Accept请求报头域用于指定客户端接受哪些类型的信息。 Accept-Charset请求报头域用于指定客户端接受的字符集。 Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。 Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。 Authorization请求报头域主要用于证明客户端有权查看某个资源。

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

2、响应报头

     响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头 Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。 Server响应报头域包含了服务器用来处理请求的软件信息

3. 实体报头

请求和响应消息都可以传送一个实体。

常用的实体报头 Content-Encoding指示已经被应用到实体正文的附加内容的编码。

Content-Language实体报头域描述了资源所用的自然语言。

Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。 Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。 Last-Modified实体报头域用于指示资源的最后修改日期和时间。 Expires实体报头域给出响应过期的日期和时间。

 

四、补充

1、HTTP协议Content Lenth限制漏洞导致拒绝服务攻击 使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,例如ContentLenth:999999999,在传送完成前,内 存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。这种攻击方法基本不会留下痕迹。 2、为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。HTTP1.1中提供了这种持续连接的方式,而下一代HTTP协议:HTTP-NG更增加了有关会话控制、丰富的内容协商等方式的支持,来提供更高效率的连接。

 

五.Java利用HTTP协议实现联网和下载

Url的请求连接(Get方式)

复制代码
String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的内容为HTTP请求的正文
URL url = new URL(currentUrl);   HttpURLConnection httpurlconnection = url.openConnection();
//下面的设置对应HTTP请求中的消息报头 httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent); httpurlconnection.setRequestProperty("Accept",CommonValues.Accept); httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset); httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language); httpurlconnection.setRequestProperty("Connection",CommonValues.Connection); httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive); httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut); httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut);               httpurlconnection.connect();              int responsecode = httpurlconnection.getResponseCode();               if(responsecode == HttpURLConnection.HTTP_OK) //对应HTTP响应中状态行的响应码
{   //操作请求流,这里对应HTTP响应中的响应正文 }               if (httpurlconnection != null)  {    httpurlconnection.disconnect(); }
复制代码

Post方法连接请查看:http://www.cnblogs.com/devinzhang/archive/2012/01/17/2325092.html

 Java与Http协议

转载于:https://www.cnblogs.com/tiandile/archive/2013/03/08/2950957.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Python 黑科技》一键分析评论关键词,制作精美词云

本文重点: 学会抓取文章评论 学会文本分词、制作词云 目录 🍑 一、抓取全部评论 🍞 1、找到评论接口 🍏 2、Python 获取评论 🏈 二、文本分词、词云制作 🍋 1、文本分析 🍐 2、生成词云…

PANS最新脑神经科学研究:激活一种新语言并不费力气

来源:中国生物技术网美国纽约大学的一项新研究发现,我们在不同语言之间切换时的大脑工作模式,这使我们对双语现象有了新的理解。纽约大学博士生Esti Blanco-Elorrieta是这项研究的第一作者,他解释说:“多语言能力者的一…

百度地图之添加覆盖物

本文主要讲解如何实现在百度地图上添加覆盖物 1.承载数据的实体 我们从服务器返回的数据部分,最终可能是个Json数组,我们需要转换为实体集合,即下面的Info.java 我直接在实体类中声明了一个静态列表集合,模拟从服务器返回的数据…

能力认证计划 -- 名企内推保 offer 直通车

CSDN 能力认证的目的:清晰定义工程师能力模型,面向开发者、技术爱好者、在校大学生等群体,通过机试(真人露脸、全程录屏、限时提交)测出应试者的真能力,筛选合格软件人才,建立应聘者与企业之间的…

fprintf 和 perror 的理解1

程序中的两种出错处理&#xff1a; 第一种: 用fprintf 2: #include <string.h> 3: #include <errno.h> 4: #include <stdlib.h> 5: 1: #include <stdio.h> 6: int main(void) 7: { 8: FILE *fp; 9: 10: if((fp fopen("1.c…

全文!《2018中国IoT报告》!

来源&#xff1a;5G9月15-18日&#xff0c;我国物联网领域规格最高、规模最大的国家级博览会——2018世界物联网博览会将在无锡举行。作为2018世界物联网博览会的重要活动之一&#xff0c;9月14日受大会组委会委托&#xff0c;中国经济信息社在无锡发布《2017-2018年中国物联网…

CSDN客户端实现

本文主要讲解实现了一个CSDN的安卓客户端&#xff0c;主要知识点如下 java爬虫获取网页数据 将java程序打包成jar包 FragmentviewpagerTabPageIndicator实现Tab效果 gestureImageView实现放大缩小图片imageLodar实现异步加载图上 XListView实现下拉刷新 java爬虫获取网页资源…

抓住金三银四的尾巴,解锁程序员面试《刷题神器》

点赞 ➕ 评论 ➕ 收藏 三连再看你最帅 刷题 不仅能掌握知识&#xff0c;快速学习进步。 更能轻松搞定面试&#xff0c;尤其是有的大厂 钟爱问算法题&#xff0c;你不刷就不会&#xff0c;就会被pass。同时&#xff0c;刷题能陶冶情操&#xff0c;避免老年痴呆 &#x1f60b; …

腾讯AI Lab开源世界首款自动化模型压缩框架PocketFlow:将深度学习装进口袋

来源&#xff1a;腾讯AI 实验室腾讯AI Lab机器学习中心今日宣布成功研发出世界上首款自动化深度学习模型压缩框架——PocketFlow&#xff0c;并即将在近期发布开源代码。这是一款面向移动端AI开发者的自动模型压缩框架&#xff0c;集成了当前主流&#xff08;包括腾讯AI Lab自研…

【拿走不谢】大数据高效查询神器--bitmap

背景 在hive中使用Roaring64Bitmap实现精确去重功能 主要目的&#xff1a; 提升 hive 中精确去重性能&#xff0c;代替hive 中的 count(distinct uuid)&#xff1b;节省 hive 存储 &#xff0c;使用 bitmap 对数据压缩 &#xff0c;减少了存储成本&#xff1b;提供在 hive 中…

Android之智能问答机器人

本文主要利用图灵机器人的接口&#xff0c;所做的一个简单的智能问答机器人 实现 由于发送与接收消息都是不同的listView&#xff0c;所以要用有两个listVeiw的布局文件 接收消息布局文件 <?xml version"1.0" encoding"utf-8"?> <LinearLa…

5张图告诉你:同样是职场人,差距怎么这么大?

点赞 ➕ 评论 ➕ 收藏 养成三连好习惯 在职场中&#xff0c;我们常常会听到各种各样的抱怨&#xff1a; &#x1f469;‍⚖️‍ 小A: 凭什么别人每次述职绩效都是优秀呀&#xff1f; 感觉TA也没干啥呀! &#x1f575; 小B: 凭啥这个事情&#xff0c;领导指派TA去对接呀&#…

史上最强阵容,BAT大佬携手AI顶级大咖齐聚上海话AI

来源&#xff1a;网易智能9月17日上午&#xff0c;齐聚各路大佬的2018世界人工智能大会在上海西岸艺术中心开幕。不得不说&#xff0c;这次大会的嘉宾阵容&#xff0c;为中国科技界史上最强&#xff0c;没有之一。今天主论坛亮相会议并发表演讲的大咖&#xff0c;除了聚集了BAT…

没错,列式存储非常牛。但是,Ta还可以更高效

很多数据仓库产品都采用了列式存储。如果数据表的总列数很多而计算涉及的列很少&#xff0c;采用列存就只读取需要的列即可&#xff0c;能够减少硬盘访问量&#xff0c;提高性能。 特别是数据量非常大时&#xff0c;硬盘扫描和读取的时间占比很大&#xff0c;这时候列存的优势…

Android实现电子邮箱客户端

本文主要讲述了安卓平台上利用QQ邮箱SMTP协议&#xff0c;POP3协议发送与接收消息的实现 发送邮件核心代码 import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; …

谷歌AI涉足艺术、太空、外科手术,再强调AI七原则

来源&#xff1a;网易智能9月18日上午&#xff0c;Google在上海的2018世界AI 大会上举办了一场名为“AI触手可及”的主题论坛。在论坛上&#xff0c;Google全球副总裁、工程研究员Jay Yagnik 携Google 不同领域的研究者发表了演讲&#xff0c;重点阐述了Google AI在自家产品上的…

单个手指的手势识别

本文来自http://blog.csdn.net/hellogv/ &#xff0c;引用必须注明出处&#xff01; 本文把Aforge的运动识别与前面介绍的手写识别融合在一起&#xff0c;实现单个手指的手势识别。下图演示了本文代码运行的结果&#xff0c;图片有点大&#xff0c;请稍候。。。 我预先让程序学…

Apifox:满足你对 Api 的所有幻想

文章目录⌚️ 一、Api 管理的难点在哪&#xff1f;&#x1f4f1; 二、Apifox 是什么&#xff1f;&#x1f4bf; 三、接口设计 (接口文档)⌨️ 3.1 接口文档&#x1f4bb; 3.2 快速上手&#x1f5a8; 3.3 接口路径&#x1f4bd; 四、团队管理&#x1f4fd; 4.1 权限管理⏱ 4.2 项…

百度地图综合

本文主要包括百度地图API的综合应用&#xff0c;主要内容如下 地图图层展示&#xff0c;包括热力图与实时路况图 添加覆盖物&#xff0c;包括图片&#xff0c;文字&#xff0c;折线等地图控制&#xff0c;包括俯视&#xff0c;旋转&#xff0c;放大&#xff0c;缩小等定位&…

国内Api行业,可以内卷到什么程度?

随着移动应用以及智能设备爆发增长&#xff0c;同时越来越多的零售商、媒体、政府和金融服务公司开始公开Web API&#xff0c;API的使用越来越多。 现在&#xff0c;每日API调用量在不断飙升&#xff0c;早在2009年&#xff0c;Facebook每天API调用量就已经达到了50亿。如何能…