HTTP应用的三种类型简介
- 格式:docx
- 大小:13.90 KB
- 文档页数:2
HTTP协议中你必须知道的三种数据格式实习中的一个主要工作就是分析HTTP 中的协议,自己也用Python 写过正则表达式对HTTP 请求和响应的内容进行匹配,然后把关键字段抽离出来放到一个字典中以备使用(可以稍微改造一下就是一个爬虫工具)。
HTTP 协议中的很多坑,自己都遇到过,我就针对自己遇到的几种HTTP 常见的数据格式,来做一个总结。
作者:songjz来源:segmentfault|2016-11-10 13:00 收藏分享实习中的一个主要工作就是分析HTTP 中的协议,自己也用Python 写过正则表达式对HTTP 请求和响应的内容进行匹配,然后把关键字段抽离出来放到一个字典中以备使用(可以稍微改造一下就是一个爬虫工具)。
HTTP 协议中的很多坑,自己都遇到过,我就针对自己遇到的几种HTTP 常见的数据格式,来做一个总结。
Zlib 压缩数据对于Zlib,一点也不陌生,我们平时用它来压缩文件,常见类型有zip、rar 和7z 等。
Zlib 是一种流行的文件压缩算法,应用十分广泛,尤其是在Linux 平台。
当应用Zlib 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小,这取决于文件中的内容。
Zlib 也适用于Web 数据传输,比如利用Apache 中的Gzip (后面会提到,一种压缩算法) 模块,我们可以使用Gzip 压缩算法来对Apache 服务器发布的网页内容进行压缩后再传输到客户端浏览器。
这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。
网页加载速度加快的好处不言而喻,节省流量,改善用户的浏览体验。
而这些好处并不仅仅限于静态内容,PHP 动态页面和其他动态生成的内容均可以通过使用Apache 压缩模块压缩,加上其他的性能调整机制和相应的服务器端缓存规则,这可以大大提高网站的性能。
因此,对于部署在Linux 服务器上的PHP 程序,在服务器支持的情况下,建议你开启使用Gzip Web 压缩。
HTTP与HTTPS知识点详解⼀、TCP/UDP1.1、TCPTCP(Transmission Control Protocol:传输控制协议)是⼀种⾯向连接的、可靠的、基于字节流的传输层通信协议。
TCP的主要特点有:基于流的⽅式⾯向连接可靠通信⽅式⽀持错误重传⽅式⽀持拥塞控制,能够在⽹络拥堵的情况下延迟发送提供错误校验和,甄别有害的数据包1.2、UDPUDP(User Datagram Protocol:⽤户数据报协议),为应⽤程序提供了⼀种⽆需建⽴连接就可以发送封装的IP数据包的⽅法。
⽆需建⽴连接,即不需要所谓的握⼿操作,从⽽加快了通信速度,允许⽹络上的其他主机在接收⽅同意通信之前进⾏数据传输。
数据报是与分组交换⽹络关联的传输单元UDP的特点:可以发送⼤量的数据包(因为不建⽴连接,也就不需要维护连接窗台,包括收发状态等,因此⼀台服务机可同时向多个客户机传输相同的消息)尽最⼤努⼒交付,不保证可靠交付⾯向报⽂的没有拥塞控制,⽹络出现的拥塞不会使源主机的发送速率降低⽀持⼀对⼀、⼀对多、多对⼀、多对多的交互通信UDP的⾸部开销⼩,只有8个字节,⽐TCP得0个字节⾸部要短1.3、TCP和UDP的不同TCP UDPTCP⾯向连接(TCP在发送数据前需要先建⽴连接,然后再发送数据,并且有发送确认)UDP⾯向⽆连接(UDP⽆需建⽴连接就可以发送⼤量数据,并且没有发送确认)TCP⾯向字节流UDP⾯向报⽂TCP头部字节20字节UDP头部字节只有8字节TCP会按照特定顺序重新排列数据包UDP数据包没有固定顺序,所有数据包都相互独⽴TCP是重量级的,在发送数据前要三次握⼿建⽴连接UDP是轻量级的,没有跟踪连接,消息排序等TCP会进⾏错误校验,并能够进⾏错误恢复UDP也会错误检查,但会丢弃错误的数据包TCP传输速度较慢UDP传输速度较快TCP是可靠的,因为它可以确保将数据传送到服务器UDP是不可靠的,不能保证将数据传输到⽬标每⼀条TCP连接都只能是点到点的UDP没有建⽴连接,可以n对n(n=[1,...,n])1.4、TCP三次握⼿⾸先要了解⼀下⼀下基本概念:消息类型描述SYN(Synchronize Sequence Numbers:同步序列编号)⽤来初始化和建⽴连接。
/xingyue425/article/details/7258934这几天都在纠结Java Web开发中的中文编码问题。
其实,很多Java Web开发者都被中文编码“折磨”过,网络上有大量的讨论。
以前我也读过这方面的博文,读完后感觉似乎懂了,好像知道了编码问题的原因和解决方法。
但是,一旦投入到实际开发中,发现自己其实没懂,囧!连续纠结了几天,总算对前因后果有个清晰地认识,故“略谈”一下。
之所以略谈,是因为我并非(也没有能力)完整地阐述Java Web开发的中文编码问题,而是就事论事地总结这几天遇到的问题和收获。
问题使用HttpClient 3.x发送GET或POST请求,请求参数中包含中文。
服务器是Tocmat 5.5,通过断点调试,发现Servlet拿到的中文参数是乱码。
显然,HttpClient和Tomcat没有就中文参数的编码达成一致。
于是,开始深入HttpClient和Tomcat的代码,结合断点调试,发现中文编码问题并不是想象中的那么简单。
术语约定为了使得描述更加请求,我对本文中出现的“术语”进行约定,避免一词多义引起的歧义。
1. Encoding: 编码(动词)2. Decoding: 解码(动词)3. Charset: 编码或解码使用的字符集另外,编码了的数据必然需要解码,因此encoding和decoding往往是同现的。
不过为了叙述简练,下文需要两者同现的地方,仅使用encoding。
哪些数据需要encoding?在研究中文编码问题前,我们首先要弄清一个问题:哪些数据需要encoding?一个Http请求的数据大致包括URI、Header、和Body三个部分。
这三个部分貌似都需要encoding,不过我这次只涉及到URI和Body,因此就不讨论Header了。
我们一般关心请求参数的中文编码问题。
虽然URI Path中也可以包括中文,但是。
这不是给自己找麻烦吗?GET的请求参数在QueryString中,是URI的一部分。
http⽂件上传⽅式⼀、http的四种请求参数http四种请求参数⽅式:即form-data、x-www-form-urlencoded、raw、binary1,form-data http请求中的multipart/form-data,它会将表单的数据处理为⼀条消息,以标签为单元,⽤分隔符分开。
既可以上传键值对,也可以上传⽂件。
当上传的字段是⽂件时,会有Content-Type来说明⽂件类型;content-disposition,⽤来说明字段的⼀些信息;由于有boundary隔离,所以multipart/form-data既可以上传⽂件,也可以上传键值对,它采⽤了键值对的⽅式,所以可以上传多个⽂件。
2,x-www-form-urlencoded 就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,⽐如,name=java&age = 233,raw 可以上传任意格式的⽂本,可以上传text、json、xml、html等4,binary 相当于Content-Type:application/octet-stream,从字⾯意思得知,只可以上传⼆进制数据,通常⽤来上传⽂件,由于没有键值,所以,⼀次只能上传⼀个⽂件。
如果想要同时传⽂件名,可以借⽤请求头“Content-Disposition”,设置⽂件名。
⼆、http三种上传⽅式http三种上传⽅式:根据上述四种参数请求⽅式,其中urlencoded只能传输⽂本,因此http只有三种⽂件上传⽅式,form-data、raw、binary 1,针对form-data上传,springMVC后端接收写法1 @RequestMapping(value="/upload", method = RequestMethod.POST)2public ResponseObject<?> upload(@RequestParam(value="file", required = true)MultipartFile file,HttpServletRequest request){3 String destination = "/filePath/" + multipartFile.getOriginalFilename();4 File file = new File(destination);5 multipartFile.transferTo(file);6 }2,针对raw与binary⽅式上传,servlet后端接收写法1 @RequestMapping(value = "/upload", method = RequestMethod.POST)2public ResponseObject<?> upload(MultipartFile multipartFile, HttpServletRequest request) { 3try {4 InputStream in = request.getInputStream();5 String disposition = request.getHeader("Content-Disposition");6 String fileName = null;7if (disposition != null && disposition.length() > 0) {8 fileName = disposition.replaceFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1");9 }10if (fileName == null || fileName.length() <= 0)11 fileName = new String("d:\\abcdef.xed");12 FileOutputStream fos = new FileOutputStream(fileName);13byte[] b = new byte[1024];14int length;15while ((length = in.read(b)) > 0) {16 fos.write(b, 0, length);17 }18 in.close();19 fos.close();20 } catch (Exception e) {21 logger.error("file upload error", e);22 }23 }。
httpclient4 中文版帮助文档,最新官方版翻译版前言超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了。
Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web 浏览器范畴,同时,也增加了需要HTTP协议支持的应用程序的数量。
尽管包提供了基本通过HTTP访问资源的功能,但它没有提供全面的灵活性和其它很多应用程序需要的功能。
HttpClient就是寻求弥补这项空白的组件,通过提供一个有效的,保持更新的,功能丰富的软件包来实现客户端最新的HTTP标准和建议。
为扩展而设计,同时为基本的HTTP协议提供强大的支持,HttpClient组件也许就是构建HTTP客户端应用程序,比如web浏览器,web服务端,利用或扩展HTTP协议进行分布式通信的系统的开发人员的关注点。
1. HttpClient的范围基于HttpCore[/httpcomponents-core/index.html]的客户端HTTP运输实现库基于经典(阻塞)I/O内容无关2. 什么是HttpClient不能做的HttpClient 不是一个浏览器。
它是一个客户端的HTTP通信实现库。
HttpClient的目标是发送和接收HTTP报文。
HttpClient不会去缓存内容,执行嵌入在HTML页面中的javascript 代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和HTTP运输无关的功能。
第一章基础1.1 执行请求HttpClient 最重要的功能是执行HTTP方法。
一个HTTP方法的执行包含一个或多个HTTP请求/HTTP响应交换,通常由HttpClient的内部来处理。
而期望用户提供一个要执行的请求对象,而HttpClient期望传输请求到目标服务器并返回对应的响应对象,或者当执行不成功时抛出异常。
很自然地,HttpClient API的主要切入点就是定义描述上述规约的HttpClient接口。
HTTP详解以及host、origin、referer的区别HTTP简介HTTP协议是Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议。
HTTP是⼀个基于TCP/IP通信协议来传递数据(HTML ⽂件, 图⽚⽂件, 查询结果等)。
HTTP是⼀个属于应⽤层的⾯向对象的协议,由于其简捷、快速的⽅式,适⽤于分布式超媒体信息系统。
它于1990年提出,经过⼏年的使⽤与发展,得到不断地完善和扩展。
⽬前在WWW中使⽤的是HTTP/1.0的第六版,HTTP/1.1的规范化⼯作正在进⾏之中,⽽且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议⼯作于客户端-服务端架构为上。
浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
http请求-响应模型.jpg主要特点1、简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。
请求⽅法常⽤的有GET、HEAD、POST。
每种⽅法规定了客户与服务器联系的类型不同。
由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-Type加以标记。
3.⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
采⽤这种⽅式可以节省传输时间。
4.⽆状态:HTTP协议是⽆状态协议。
⽆状态是指协议对于事务处理没有记忆能⼒。
缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。
另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。
5、⽀持B/S及C/S模式。
HTTP之URLHTTP使⽤统⼀资源标识符(Uniform Resource Identifiers, URI)来传输数据和建⽴连接。
什么是HTTP Headers?出自:/?p=521什么是HTTP HeadersHTTP是“Hypertext Transfer Protocol”的所写,整个万维网都在使用这种协议,几乎你在浏览器里看到的大部分内容都是通过http协议来传输的,比如这篇文章。
HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。
示例当你在浏览器地址栏里键入一个url,你的浏览器将会类似如下的http请求:GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveCookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120Pragma: no-cacheCache-Control: no-cache第一行被称为“Request Line” 它描述的是这个请求的基本信息,剩下的就是HTTP headers了。
请求完成之后,你的浏览器可能会收到如下的HTTP响应:HTTP/1.x 200 OKTransfer-Encoding: chunkedDate: Sat, 28 Nov 2009 04:36:25 GMTServer: LiteSpeedConnection: closeX-Powered-By: W3 Total Cache/0.8Pragma: publicExpires: Sat, 28 Nov 2009 05:36:25 GMTEtag: "pub1259380237;gz"Cache-Control: max-age=3600, publicContent-Type: text/html; charset=UTF-8Last-Modified: Sat, 28 Nov 2009 03:50:37 GMTX-Pingback: /xmlrpc.phpContent-Encoding: gzipVary: Accept-Encoding, Cookie, User-Agent<!-- ... rest of the html ... -->第一行呢被称为“Status Line”,它之后就是http headers,空行完了就开始输出内容了(在这个案例中是一些html输出)。
一、HttpClient 功能简介●实现了所有HTTP 的方法(GET,POST,PUT,HEAD,OPTIONS,TRACE)●支持自动转向●支持HTTPS 协议●透明地穿过HTTP代理建立连接●通过CONNECT方法,利用通过建立穿过HTTP代理的HTTPS连接●利用本地Java socket,透明地穿过SOCKS(版本5和4)代理建立连接●支持利用Basic、Digest和NTLM加密的认证●支持用于上传大文件的Multi-Part表单POST方法●插件式安全socket实现,易于使用第三方的解决方案●连接管理,支持多线程应用,支持设定单个主机总连接和最高连接数量,自动检测和关闭失效的连接●直接将请求信息流送到服务器的端口●直接读取从服务器的端口送出的应答信息●支持HTTP/1.0中用KeepAlive和HTTP/1.1中用persistance设置的持久连接●直接访问由服务器送出的应答代码和头部信息●可设置连接超时时间●HttpMethods 实现Command Pattern,以允许并行请求或高效连接复用●遵循the Apache Software License协议,源码免费可得二、环境搭建1.HttpClient 3.1 所需的基本jar包:commons-httpclient-3.1.jar,下载地址:/dist/httpcomponents/commons-httpclient/binary/;commons-logging.jar,下载地址:/logging/download_logging.cgi;commons-codec.jar,下载地址:/codec/download_codec.cgi;2.HttpClient 4所需的基本jar包:下载地址:/downloads.cgi;最新版本为4.1.2,且官方不再升级HttpClient3。
三、HttpClient 3.x 基本功能的使用1.使用 HttpClient 需要以下 6 个步骤:●创建HttpClient 的实例●创建某种连接方法的实例,在这里是GetMethod。
http是什么协议HTTP是什么协议。
HTTP,全称为超文本传输协议(Hypertext Transfer Protocol),是一种用于传输超媒体文档(例如HTML)的应用层协议。
它是万维网的数据通信的基础。
在Web浏览器和Web服务器之间传输超文本文档的标准,是一种无状态的协议。
HTTP是一种无状态的协议,这意味着每个请求都是独立的,不依赖于之前的请求。
这种无状态的设计使得HTTP协议非常适合于分布式系统,因为它不需要在多个请求之间保持状态。
每个HTTP请求都包含所有必要的信息,服务器不需要事先了解客户端的状态。
HTTP协议是基于请求/响应模型的。
客户端发送一个HTTP请求给服务器,服务器处理请求并返回一个HTTP响应给客户端。
在请求和响应中,都包含了一些元数据,比如请求的方法(GET、POST、PUT等)、请求的资源地址、响应的状态码(比如200表示成功,404表示未找到等)等。
HTTP协议是建立在TCP/IP协议之上的。
它使用TCP作为传输层协议,通过在TCP连接上发送HTTP请求和响应来进行通信。
TCP协议提供了可靠的数据传输,保证了数据的完整性和可靠性。
而HTTP协议则定义了如何包装和传输数据,以及客户端和服务器之间的通信规则。
HTTP协议的特点之一是简单和灵活。
它的设计初衷是为了传输超文本文档,但随着互联网的发展,它已经被广泛应用于传输各种类型的数据,比如图片、视频、音频等。
HTTP协议的简单和灵活使得它成为了互联网上最重要的协议之一。
除了传输数据外,HTTP协议还定义了一些其他的功能,比如缓存、认证、连接管理等。
这些功能使得HTTP协议更加强大和灵活,能够满足不同场景下的需求。
总的来说,HTTP是一种用于传输超文本文档的应用层协议,它是万维网的基础。
它的无状态、请求/响应、简单和灵活等特点使得它成为了互联网上最重要的协议之一。
通过HTTP协议,客户端和服务器可以进行可靠的数据传输和通信,为互联网的发展提供了重要的基础支持。
HTTP应用的三种类型简介
HTTP应用可分为三种类型:HTTP客户程序HTTP服务器程序服务器端应用程序(1).HTTP客户程序
可以看做是一种用户代理,它的作用就是代表用户和Web服务器进行交互,以实现下载文档、提交消息等目的
典型的HTTP客户程序有:Web浏览器、Web文档下载程序(其用途主要是采用断点续传、多线程下载手段帮助用户快速、高效地从服务器下载资源)、Web Robot(用于信息检索、资源发现等目的而对Web进行遍历,从某个或某些URL开始沿着Web上的超链接采用深度优先或广度优先的方法来下载所有的Web页面)
HTTP客户程序实际上是HTTP协议内容的部分实现,因此要能够开发HTTP客户程序,必须理解HTTP协议中给出的客户和服务器的交互机制,以及各种消息的语法和语义规范
Web浏览器基本结构概览:
1.用户接口,接受用户的输入,并将服务器返回的响应展示给用户
2.用户输入解析器,对用户进行解析,并将解析结果传送给控制部分
3.控制部分,浏览器核心部分,负责协调各个部件的运作
4.HTTP客户,与HTTP服务器的访问
5.其它客户,如FTP
6.HTML解析器
7.其它解析器,如脚本js
8.格式发显示,将解析结果输出到可视化界面供用户浏览
(2)、HTTP服务器程序
1.HTTP服务器:为用户提供服务,如返回文档等。
也是对HTTP协议内容的部分实现。
除此之外,还要具备与服务器端程序交互的功能,如把客户提交的消息传递给CGI程序或其他脚本(ASP PHP Python等)等服务器端应用程序,以及接受这些程序的输出结果
2.HTTP代理:HTTP客户和服务器之间的中介,在开发HTTP代理时必须要同时实现HTTP 协议对客户和服务器的要求
(3)、服务器端应用程序:
服务器端应用程序的作用是根据用户提交的信息实时地生成动态的Web内容,为了实现这一目标,服务器端应用程序必须遵循特定的接口规范(如CGI或ISAPI),接受Web服务器传递来的参数信息(http请求消息中的头字段或实体),并将处理结果返回给Web 服务器。
此外,服务器端应用程序还必须具备访问数据库或者访问E-mail等其他Internet服务的功能
HTTP应用开发方法:
应用程序通常建立在系统提供的应用编程接口之上。
按照使用API抽象层次的不同,我们将HTTP应用程序开发方法分为两种:
1.使用网络层上的编程接口,如Socket API。
2.使用应用层上的编程接口,如Windows平台的WinInet函数库和Internet Transfer ActiveX控件等。