http协议学习笔记

htttp协议

重要性:无论是用webservice还是用rest做大型架构,都离不开http协议的认识。日常后端给的各种api,一般也是用http加上xml/json来实现的。爬虫,ajax请求等等,都需要对http有所了解
http协议是一个用于传输超媒体文档的应用层协议。它是为web浏览器和web服务器之间的通信设计的。
什么是协议:计算机中的协议和现实之中的协议是一样的,一式双份/多份。大家都尊崇着一个共同的规范。
http是无连接无状态协议,无连接的含义是限制每次连接只处理一个请求,无状态指的是对于事物处理没有记忆能力(没有cookie的功能)。

http工作流程

**短链接:**在原始状态下,客户端和服务端没有联系。当客户端向服务器发送请求时,就建立了连接(网络上的虚拟电路)。服务端同时沿着链接返回相应信息。客户端收到响应后,一般为html代码解释出图片,文字。随后,两端失去连接

http不一定需要浏览器来发送协议。满足http协议的工具都可以发送http协议。

**请求:**在http协议请求中包括请求头,请求行,请求体,请求行包括三个部分:请求方法,请求资源,请求所用的协议版本。请求头下面有1行空行,然后再到请求体部分。post请求比get请求多了主体信息,头信息里要标明主体的长度。

响应:包括响应行(协议 状态码 状态文字),响应头信息主体信息

http版本区别以及异同

http 0.9{
只有一种方法GET
没有header等等描述数据的信息
服务器发送完毕,就关闭tcp连接(一个tcp连接可以对应多个http请求)
}
http 1.0{
定义了三种请求方法,GETPOSTHEAD(类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头(记录该报文非数据信息的部分:端口,序列号等))
多字符集的支持,多部份发送,权限,缓存等(这些设置有利于我们使用http请求实现web服务)
}
http 1.1{
定义了6种请求方法:optionsputpatch(是对 PUT 方法的补充,用来对已知资源进行局部更新),delete(请求服务器删除指定的页面),trace(回显服务器收到的请求,主要用于测试或诊断),connect(HTTP/1.1 协议中预留给能够将连接改为管道(pipiline)方式的代理服务器,因为在http1.0及以下版本中,如果使用浏览器浏览一个包含多张图片的html页面时,在发送http请求访问html页面的资源时,也会请求页面中的其他资源,因此,每次的请求都会造成无谓的tcp的连接与断开。而http1.1一旦建立连接,只要任意一方没有明确提出终止连接,就会一直保持长连接状态)
增加了host和一些其他命令:host: 有了 ‘host’ 之后, 我们就可以在同一台(物理)服务器, 可以同时跑多个不同的 ‘web’ 服务(例如一个nodeJS的服务, 一个Java的服务)
}
http 2.0{
**所有数据以二进制传输:**在http1.1里面,大部分的数据传输都是通过字符串的,而http2所有数据都采用帧进行传输。
在同一个tcp中发送多个请求,不用按照顺序来返回数据了。可以同时并行返回第一个与第二个请求的返回的数据。这样一来,能对整个web应用的传输效率有质的提升。
头信息压缩:在 HTTP1.1 里面每一次发送请求和返回请求, 它的很多http头都是要进行一个完整的发送与返回的。但其实这一部分头信息, 里面很多的内容比如: header字段,Content-Type,catch它们是以字符串的形式保存的, 所以它占用的带宽是比较大的。在 HTTP2 里面我们的头信息进行了一个压缩, 这样就会有效的减少带宽的使用。
**推送:**在这个版本中,服务端也可以向客户端主动发起数据传输。这样一来,我们的html,css,js的发送顺序变为并行发送,而不是串行发送。
}
请求方法虽然是规定的,但是有的时候服务器web server未必可以让你使用这些方法进行查询,这时候,可以通过options方法进行查询

状态码 状态文字(用来描述状态码)

概念:当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头,用以响应浏览器的请求。
五类相应

  1. 信息响应(100–199) 信息,服务器收到请求,需要请求者继续执行操作{
    100 continue 继续,客户端应继续其请求
    101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议,只能切换到更高级的协议(http新版本协议)
    }
  2. 成功响应(200–299) 成功,操作被成功接收并处理{
    200 OK 请求成功,一般用于GET与POST请求
    201 Created 已创建。成功请求并创建了新的资源
    202 Accepted 已接受。已经接受请求,但是还未处理完成
    203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始服务器,而是一个副本。
    204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档。
    205 Reset Content 重置内容,服务器处理成功,用户终端(浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域。
    206 Partial Content 部分内容,服务器成功处理了部分GET请求。
    }
  3. 重定向(300–399) 重定向,需要进一步的操作以完成请求{
    301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URL,返回信息会包括新的URL,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
    302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
    303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
    304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。可以用于网页强制刷新时,图片的状态可以设置为304,这样可以直接从缓存里拿取图片,可以省下调用时间(可以在response headers看到Etags属性(资源标志符)与last-modified属性会记录页面是否被改动。304就是没有被改动的情况)等于客户端告诉服务器自己的缓存里面有数据,服务器便不会再发送过来
    305 Use Proxy 使用代理。所请求的资源必须通过代理访问
    306 Unused 已经被废弃的HTTP状态码
    307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向(重定向中保持原有的请求数据,请求转发。通常使用post请求时会使用这种方法)
    }
  4. 客户端错误(400–499) 客户端错误,请求包含语法错误或无法完成请求{
    400 Bad Request 客户端请求的语法错误,服务器无法理解
    401 Unauthorized 请求要求用户的身份认证
    402 Payment Required 保留,将来使用
    403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
    404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
    405 Method Not Allowed 客户端请求中的方法被禁止
    406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
    407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
    408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
    409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
    410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
    411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
    412 Precondition Failed 客户端请求信息的先决条件错误
    413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
    414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
    415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
    416 Requested range not satisfiable 客户端请求的范围无效
    417 Expectation Failed 服务器无法满足Expect的请求头信息
    }
  5. 服务器错误(500–599) 服务器错误,服务器在处理请求的过程中发生了错误{
    500 Internal Server Error 服务器内部错误,无法完成请求
    501 Not Implemented 服务器不支持请求的功能,无法完成请求
    502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
    503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
    504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
    505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
    }

http cookie

cookie总是保存在客户端中,又分为内存cookie和硬盘cookie。内存cookie存在时间短暂,浏览器关闭时cookie就会删除。硬盘cookie会一直存在于硬盘中,除非到了过期时间或者手动删除。

cookie的主要作用:

存储会话状态(用户登陆状态,游戏分数),个性设置,浏览其行为跟踪(浏览器记录)

http请求和cookie的交互流程

请添加图片描述

http协议防盗链

例题

  1. 从 URL 输入到页面展现到底发生什么?
    总体分为以下几个过程{
    DNS 解析:将域名解析成 IP 地址
    TCP 连接:TCP 三次握手
    发送 HTTP 请求
    服务器处理请求并返回 HTTP 报文
    浏览器解析渲染页面
    断开连接:TCP 四次挥手
    }
  2. 一个tcp连接可以发送多个http请求?是的。不过单个tcp连接在同一个时刻只能处理同一个请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值