http协议之版本差异(2)

—————————————HTTP1.0/HTTP1.1——————————————

建立连接方面

  HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的
TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。注意:在同一个TCP连
接中,新的请求需要等上次请求收到响应后,才能发送。

HTTP请求方法
  根据HTTP标准,HTTP请求可以使用多种请求方法。
  HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

请求头信息
  请求头信息是由一个个头域组成。
  每个头域由一个域名、冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格
符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
例如:

Host: 192.168.1.104:8888

下面实例是一点典型的使用GET来传递数据的实例:
客户端请求:

GET /hello.txt HTTP/1.1
User‐Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept‐Language: en, mi

服务器响应消息

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

状态码

  当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所
在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

HTTP状态码分类:

  HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。
HTTP状态码共分为5种类型:

HTTP状态码列表:

响应头信息
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。

get响应

TTP/1.1 200 OK\r\n
Server: Tengine\r\n
Content‐Type: application/octet‐stream\r\n
Content‐Length: 9568\r\n
Connection: keep‐alive\r\n
Date: Wed, 14 Sep 2016 09:06:22 GMT\r\n
Last‐Modified: Wed, 14 Sep 2016 09:05:01 GMT\r\n
Timing‐Allow‐Origin: *, *\r\n
Accept‐Ranges: bytes\r\n
Via: cache1.l2et15[0,304‐0,H], cache10.l2et15[1,0], cache5.cn463[0,200‐0,H],
cache5.cn463[0,0]\r\n
Age: 3\r\n
X‐Cache: HIT TCP_MEM_HIT dirn:‐2:‐2\r\n
X‐Swift‐SaveTime: Wed, 14 Sep 2016 09:06:22 GMT\r\n
X‐Swift‐CacheTime: 10\r\n
EagleId: 9dff8b4514738439859887791e\r\n
\r\n

使用浏览器发送一个get请求如:

http://192.168.1.104:8888?username=wenong&passwd=123456

GET/POST对比:

1)Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2)Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,
而各个变量之间使用“&”连接;Post是将表单中的数据放在的数据体中,按照变量和值相对应的方式,传递到action
所指向URL。
3)Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者
用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。
另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作
对用户来说都是不可见的。
4)Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能
使用Post。

表单方式提交提GET请求,例如web服务器中的index.html中填写:

<HTML>
<BODY>
<FORM ACTION="color.cgi" METHOD="GET">
Enter a color: <INPUT TYPE="text" NAME="color">
<INPUT TYPE="submit">
</FORM>
</BODY>
</HTML>

GET请求

GET /color.cgi?color= HTTP/1.1
Host: 192.168.1.104:8888
Connection: keep‐alive
Upgrade‐Insecure‐Requests: 1
User‐Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/51.0.2704.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.1.104:8888/
Accept‐Encoding: gzip, deflate, sdch
Accept‐Language: zh‐CN,zh;q=0.8

表单方式提交POST提请求,例如web服务器中的index.html中填写:

<HTML>
<BODY>
<FORM ACTION="color.cgi" METHOD="POST">
Enter a color: <INPUT TYPE="text" NAME="color">
<INPUT TYPE="submit">
</FORM>
</BODY>
</HTML>

POST请求

POST /color.cgi HTTP/1.1
Host: 192.168.1.104:8888
Connection: keep‐alive
Content‐Length: 10
Cache‐Control: max‐age=0
Origin: http://192.168.1.104:8888
Upgrade‐Insecure‐Requests: 1
User‐Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/51.0.2704.106 Safari/537.36
Content‐Type: application/x‐www‐form‐urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.1.104:8888/
Accept‐Encoding: gzip, deflate
Accept‐Language: zh‐CN,zh;q=0.8
color=read

原文地址:https://www.cnblogs.com/wangkeqin/p/9265593.html

时间: 2024-11-09 00:53:06

http协议之版本差异(2)的相关文章

http协议各版本差异

http协议各版本差异 一.http协议介绍        http(Hypertext transfer protocol)超文本传输协议,它是互联网上应用最为广泛的一种网络协议,工作在应用层. 二.http协议发展        http协议目前有4个版本,其中1.0.1.1版本在互联网上被广泛使用,2.0版本目前应用很少,是下一代的http协议. http/0.9版本:1991年,原型版本,功能简陋,只有一个命令GET,只支持纯文本内容,该版本已过时. http/1.0版本: 1996年5

BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法

最近一直在做互金平台,做到后台提交表单的时候出现验证提交数据一直没有提交的问题.于是百度了一下.果然是版本问题造成的.幸好找到了问题所在.我一直仿照的是东钿原微信平台的做法,但是使用byond的后台框架,可能版本不一样,所以造成 submitHandler: function(validator, form, submitButton) { // 版本号0.4.5支持 // 版本号v0.5.2-dev不再支持submitHandler配置 } 这个方法一直是无效的无法执行.百度搜到就是以下解决办

接口测试基础知识详解http请求由三部分组成,分别是:请求行、消息报头、请求正文 1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了

HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path]http表示要通过HTTP协议来定位网络资源:host表示合法的Internet主机域名或者IP地址:port指定一个端口号,为空则使用缺省端口80:abs_path指定请求资源的URI:如果URL中没有给出abs_path,那么当它作为请求URI时,必须以"/"的形式给出,通常这个工作浏览器自动帮我们完成.e

广播接收者的特点和版本差异

* 特点:只要广播接收者安装到手机上,不管应用程序有没有启动,系统发出广播后,注册了这个广播的接收者,都可以接受这个广播. * 版本差异:如果用户强行停止了接收者的应用程序,系统发出广播时,在低版本可以接受广播:在高版本,google工程师为了安全,就接收不到这个广播了,如果想接受这个广播,冲新启动一次应用即可.

AsyncTask的版本差异及其与Thread的使用场景

/** * AsyncTask相关总结 * * 1 异步任务AsyncTask在不同Android版本的差异. * 该差异主要是Android2.3和Android3.0及其之后的差异 * * 差异内容: * 在Android2.3中AsyncTask的调用可以并发执行. * 因为它在一个线程池中被调用.该线程池有5个核心线程,且最大线程数为128个. * 比如:同时启动10个任务,有5个任务能够立刻执行,另外5个任务则需等待;当有一个任务执行完毕后,第6个任务才会启动,以此类推. * 因为线程

oracle中WMSYS.WM_CONCAT函数的版本差异

昨天在测试的时候发现,开发人员写的一段程序放在开发库中是好的,但是放在测试库中就会有问题.开发人员一直找不到问题的原因在哪里.于是就花了点时间协助开发人员来找问题的根本原因. 通过一些技术手段,定位到问题是由一个SQL语句引起的. SQL语句如下: WITH PXQ_TASK_TEMP AS (SELECT A.DISTRIBUTE_DATE,          A.APP_NO,          A.TASK_ID,          A.TASK_NO,          A.ACTUAL

网页浏览器内核识别及版本差异

主流浏览器及采用渲染内核(更多见http://www.iplaysoft.com/browsers-engine.html): Trident内核:IE系列 WebKit:Chrome.Safari Gecko:Firefox内核 国内常用双核浏览器:最主流的"双核"浏览器基本都是Trident/WebKit架构,360极速浏览器.世界之窗浏览器极速版.傲游3搜狗浏览器3.QQ浏览器.枫树浏览器.快快浏览器.百度浏览器.阿云浏览器(后期版本).太阳花浏览器,其中最奇葩的是傲游3.其它双

Unity各版本差异

Unity各版本差异 version unity 5.x 4.x  2017 差异 特点 首先放出unity的下载地址,然后再慢慢分析各个版本.再者unity可以多个版本共存,只要不放在同一目录下. https://unity3d.com/cn/get-unity/download/archive 之前unity有 f和p的区别,f:full 完整版本,p:patch 补丁.多叨叨几句,f版具有新特性和功能,p版仅对现有版本所存在的bug进行修复.进入到2017.7.10后,版本号开始以年份.x

python从零开始 -- 第2篇之python版本差异

python从零开始 -- 第2篇之python版本差异 第0篇开始,咱们就说选择 python 3.x,一般来说,咱们面临选择的时候总是想了解更多一点,并且版本之间的对比能引申出很多有意思的故事和知识点,对于加深认识也是很有帮助. 让我们先从python发展史开始吧 这份官方文档着python详细的版本列表,这是中文版介绍,一长串的内容都是python生命力的体现,python在TIOBE排行榜上也是排名靠前,现已超越 c++ 成为探花,仅次于 Java 和 C,看到这里是不是感叹python