http 协议

网友投稿 649 2022-09-09

http 协议

http 协议

TCP/IP 五层模型:应用层:HTTP\FTP\SMTP\TELNET\POP3传输层:TCP传输控制协议\UDP用户数据报协议网络层:路由器(IP互联网协议)数据链路层:网桥、交换机(ARP地址解析协议)物理层:网卡、网线、集线器、中继器、调制解调器

常见的应用层协议:

(1)超文本传输协议(HyperText Transfer Protocol,HTTP):用于实现WWW服务。(2)文件传输协议(File Transfer Protocol,FTP):用于实现交互式文件传输功能。(3)简单邮件传送协议(Simple Mail Transfer Protocol, SMTP):用于实现电子邮箱传送功能。(4)域名系统(Domain Name System,DNS):用于实现网络设备名字到IP地址映射的网络服务。(5)简单网络管理协议(simple Network Management Protocol,SNMP):用于管理与监视网络设备。(6)远程登录协议(Telnet):用于实现远程登录功能。

常用缩写:HTTP 超文本传输协议 HyperText Transfer ProtocolHTML 超文本标记语言 HyperText Markup LanguageURL 统一资源定位符 Uniform Resource Locator

XHR  XMLHttpRequest,除css,js,png等请求外的请求

HTTP简介HTTP是从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,面向应用层,基于TCP/IP通信协议来传输数据。HTTP协议工作于客户端-服务端架构上。客户端(浏览器)通过URL向服务端(WEB服务器)发送请求

浏览器中输入URL后,浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页

往往打开一个网页需要浏览器发送很多次request,过程如下:1. 当你在浏览器输入URL 的时候,浏览器发送一个Request去获取 的html. 服务器把Response发送回给浏览器.2. 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。3. 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。4. 等所有的文件都-成功后。 网页就被显示出来了

主要特点:1、简单,通信速度快;常用方法:get、post、head等2、cookie是一门客户端缓存技术2. cookie数据由服务器生成,发送给浏览器保存3. cookie数据的格式:键值对4. cookie数据过期机制:设置expire值5. 每一个cookie都会有名称,值,过期时间...。cookie有很多使用场景,在项目中比较常见的有:  1.登录记住用户名  2.记录用户浏览记录  ...上面应用中大家最熟悉的应该就是记住用户名这个场景了,以京东网站的登录功能为例,当我们登录了一次京东,后面再去登录页面登录的时候,会发现它会帮你回填之前的用户名,这个场景就是通过cookie技术实现的

session:1. session是一门服务端会话缓存技术。2. session由服务器端的web容器创建,保存在服务器端。3. session保存数据:键值对形式4. session过期:默认30分钟5. session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息6. session过期:当服务器端的会话过期了,那么当你继续发起请求的时候,因为你从客户端带过去的会话编号还是之前的那个,就会验证不通过,就会提示你会话过期请重新登录。

每一次用户通过浏览器访问一个网站,网站的服务器就会根据请求创建一个session,session用来维护服务器和浏览器一次会话的所有请求和响应。每一个session都有一个sessionid。在第一次请求网站的时候,服务器就会通过cookie的方式写到浏览器上,cookie上包含着当前会话的sessionid,之后的 每一次请求都会带着这个sessionid,服务器就会根据sessionid找到维护你的session。

token:一般app项目都会基于一个token做鉴权。因为此时客户端不是浏览器,因此就没有cookie这一说了。当用户登录app时,服务器会响应回来一个token信息(一般都是返回的一串唯一的标识符,比如说uuid或其他)。服务器端会将登录用户跟token(票据)保存一个映射关系,一般保存在redis或者表里面,服务器端响应回来的token会缓存在手机的本地缓存里,后面手机去访问app的其他页面,就会带着这个token去服务器做验证,如果通过这个token能够从redis找到登录用户信息,那么就认为你是已经登录了的用户。token失效:一段时间后,服务器端的token失效了,那么就会把此token跟用户的映射关系从redis里删掉,那么后面再来访问的时候,根据你手机请求带来的token就匹配不上登录用户了,服务器就告诉客户端,需要去做重新登录了

请求和会话

1. 请求:一个请求就是一个request,当浏览器访问一次服务器,就发了一次请求,然后服务器会返回响应结果给浏览器。一次请求和响应的过程:域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起--> 服务器响应--> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

2. web会话:浏览器与服务器之间的一次通话,是客户端与Web服务器间一连串的交互过程。通俗地来说,就是浏览器与服务器所有请求的整个过程。就是在浏览网站的时候,会点开很多链接,一直访问,直到关闭浏览器了,整个过程就是一次会话。一次会话中会进行多个请求登录接口

服务器在response头中,设置了cookie

2. 在浏览器查看cookie

设置 -》 隐私设置和安全性 -》网站设置 -》cookie和网站数据 -》查看所有cookie和网站数据

浏览器的F12中,application中也可以查看cookie信息

3. 再次发起请求

发现不需要重新登录,请求头中携带了cookie信息

URL详解

URL:统一资源定位符,用于描述一个网络上的资源,基本格式如下:

schema://host[:port#]/path/.../[?query-string][#anchor]

scheme             使用的协议(例如:ftp)

host                   服务器的IP地址或者域名

port                  服务器的默认端口是80可以省略。如果使用了别的端口,必须指明

path                   访问资源的路径

query-string       发送给服务器的数据(从“?”开始到“#”为止之间的部分为参数部分,参数可以允许有多个参数,参数与参数之间用“&”作为分隔符)

anchor              锚,指页面的指定位置。抓包工具中,无法在Http请求中找到井号后面的参数,原因是井号后面的参数是针对浏览器起作用的而不是服务器端。

例子:

mywebsite.compath: /sj/test/test.aspxQuery String: name=sviergn&x=trueAnchor: stuff

URL基本结构:

HTTP消息的结构

1. 请求消息

请求消息包括:请求行(request line)、请求头(header)、空行、请求数据(body)四部分

注:a) 请求方法为get时,请求体body为空 b) 请求头后面是空行,通知服务器请求头结束

例子:(fiddler中的raw方式可以看到完整信息)

2. 响应消息

响应消息包括:状态行、消息报头、空行、响应正文四部

例子:

状态码

Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别1XX 提示信息 - 表示请求已被成功接收,继续处理2XX 成功 - 表示请求已被成功接收,理解,接受3XX 重定向 - 要完成请求必须进行更进一步的处理4XX 客户端错误 - 请求有语法错误或请求无法实现5XX 服务器端错误 - 服务器未能实现合法的请求

常见状态码:

200:成功响应。该请求被成功地完成,所请求的资源发送回客户端204:请求被受理但无资源返回206:客户端只请求资源的一部分

301:永久性重定向302:临时重定向,新的URL会在response的Location中返回,浏览器将会自动使用新的URL发出新的Request303:与302类似,只希望客户端在请求一个URI时,能通过GET方法重定向到另一个URI上307:临时重定向,与302类似,只是强制要求使用POST方法304:Not Modified,代表上次的文档已经被缓存了, 还可以继续使用(如果你不想使用本地缓存可以用Ctrl+F5 强制刷新页面)

400:Bad Request 客户端请求语法错误,不能被服务器所理解401:请求需要认证403:Forbidden 服务器收到请求,但是拒绝提供服务(没有权限,例如接口测试中传入一个失效的token)404:Not Found 请求资源不存在(输错了URL)比如在IE中输入一个错误的URL405:REQUEST_METHOD_NOT_SUPPORTED请求方法不支持。post请求会出现405 状态码,原因为Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,改为get即可

500:Internal Server Error 服务器内部错误503:Server Unavailable 服务器正忙。服务器当前不能处理客户端的请求,一段时间后可能恢复正常

状态码302举例:

例如:慕课网的app-,除了请求imooc.com/mobile/appdown之外,同时还带了一个请求**.apk(imooc.com/mobile/appdown的状态码为302,并且重定向到真正的-路径***.apk)

HTTP请求的方式:

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改GET:向特定的资源发出请求PUT:向指定资源位置上传其最新内容DELETE:请求服务器删除Request-URI所标识的资源HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。使用HEAD,我们可以更高效的完成以下工作:①在不获取资源的情况下,了解资源的一些信息,比如资源类型;②通过查看响应中的状态码,可以确定资源是否存在;③通过查看首部,测试资源是否被修改。OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。也可以利用向Web服务器发送‘*‘的请求来测试服务器的功能性TRACE:回显服务器收到的请求,主要用于测试或诊断。TRACE方法会在目的服务器端发起一个“回环”诊断,我们都知道,客户端在发起一个请求时,这个请求可能要穿过防火墙、代理、网关、或者其它的一些应用程序。这中间的每个节点都可能会修改原始的HTTP请求,TRACE方法允许客户端在最终将请求发送服务器时,它变成了什么样子。由于有一个“回环”诊断,在请求最终到达服务器时,服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文的最终模样。这样客户端就可以查看HTTP请求报文在发送的途中,是否被修改过了。

post、get的区别

1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. 如果数据是英文字母或数字,则原样发送;如果是空格,转换为+;如果是中文或其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII码值。POST方法是把提交的数据放在HTTP包的Body中.

2. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击(CSRF,跨站请求伪造)

例:银行网站A,它以GET请求来完成银行转账的操作,如:危险网站B,它里面有一段HTML的代码如下:< img src=为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B之前,你已经登录了银行网站A,而B中的< img …/>以GET的方式请求第三方资源(这里的第三方就是指银行网站A了。原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“为了杜绝上面的问题,银行改用POST请求完成转账操作。

3. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),一般2KB左右,但执行效率却比post好;而POST方法提交的数据量相对较大,一般80-100KB,是为了避免对服务器用大数据量进行恶意攻击。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。所以POST也是没有大小长度限制的,HTTP协议规范也没有进行大小限制。起限制作用的是服务器的处理能力。总归一句话,这个限制是针对所有HTTP请求的,与GET、POST没有多少关系。

4. GET方式使用Request.QueryString来取得变量的值;而POST方式通过Request.Form来获取变量的值,会麻烦一点点

put和post:

用PUT还是POST,不是看这是创建还是更新资源的动作,而是依赖于HTTP协议。在HTTP中,PUT被定义为idempotent(幂等,如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的)的方法,POST则不是,这是一个很重要的区别。

举一个简单的例子,假如由一个博客系统提供一个Web API,模式是 。很简单,将{blog-name}替换为我们的blog名字,往这个URI发送一个HTTP PUT或者POST请求,HTTP的body部分就是博文,这是一个很简单的REST API例子。我们应该用PUT方法还是POST方法?取决于这个REST服务的行为是否是idempotent的,假如我们发送两个Crawler也会访问你的服务,如果让一个不是indempotent的服务可以用indempotent的方法访问,那么你服务器的状态可能就会被Crawler修改,这是不应该发生的。

常用端口:

网页6379

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AD域组策略管理
下一篇:Python基础篇(一)_基本语法元素(python程序包括哪些语法元素)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~