HTTP协议简析
引言
HTTP是一个属于应用层的面向兑现的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它与1990年提出。目前使用的版本是HTTP/1.1版本。
HTTP协议
协议是指两台计算机之间进行通信必须共同遵守的规定或者规则。超文本传输协议是一种通信协议,它允许将超文本标记语言文档从web服务器传送到客户端的浏览器。
特点
- 支持客户端/服务器模式(C/S)。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是每次连接只能处理一个请求。服务器处理完客户的请求后,并受到客户的应答,即断开连接。
- 无状态:HTTP协议是无状态的。无状态是指协议对于事务处理没有记忆能力。本次的请求和上一次请求并没有关系,对于服务器来说,并不知道两次请求来自同一个客户端。
WEB浏览器、服务器、代理服务器
当我们输入网址之后,就能看到网页,原理是怎样的呢,简单的解析一下:
- 客户端与服务端通过http协议建立连接。
- 连接建立之后,发送request请求,请求格式为:URL,协议的版本号,客户机信息等内容。
- 服务器受到请求之后,作为响应,返回客户端的请求内容。
- 客户端浏览器收到服务的信息后,解析内容,显示在浏览器界面上。
请求过程如下面图片所示:
请求.png我们的请求又可能不是通过客户端直接和服务端连接的,中间可能会加一个代理的服务器,客户端先和代理服务器连接,之后在和目标服务器连接,这样可以隐藏客户端的ip,这种方式在爬虫中比较常用,它可以提高访问的速度,突破封锁的限制,隐藏客户端的信息。请求过程如下图所示:
1.pngHTTP代理服务器
简单说,http代理服务器就是网络信息的中转站,代理服务器具有缓存的功能,有很大的存储空间。对于客户端来说,代理服务器相当于服务端,对于都服务端来说,代理服务器就是要一个客户端。
HTTP URL组成解析
URL描述的是网络上的资源,任何信息都可以通过URL找到它。http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
格式如下:
http://www.test.com/search/yuluo?id=1234&name=zhangsan
- scheme 指定底层使用的协议(http ,https ,ftp)
- host 服务器的ip地址,域名 ,上例中的 www.test.con
- port 端口号 一般默认是80 可以不写 ,若是其他端口,如8080 必须要书写.
- path 访问的资源路径 /search/yuluo
- query-string 发送给http的数据 id=1234&name=zhangsan
HTTP消息结构
- request-line 请求行:请求的种类,请求的路径,http协议版本
- http header :http 头部信息
- body : 发送给服务器的query信息
当时用Get方法的时候,body是空的
- Get:
- Host:
- Accept : 浏览器可以接受的媒体类型 / 任意类型
- Accept-Encoding: 申明自己接收的编码方法
- Accept-Language: 申明自己接收的语言
- Cache-Control:Response-Request遵循的缓存机制
- Cookie: 将cookie的值发送给服务器
- Referer:
- User-Agent:客户端使用的系统和浏览器的版本
Post 请求
- Post:
- Host:
- Accept:
- Accept-Encoding:
- Accept-Language:
- Cache-Control:
- Cookie:
- Referer:
- User-Agent:
- body :
Get和Post请求的区别
Get 一般用于获取/查询资源信息,请求参数携带在url中
Post 一般用于更新资源信息 ,url中无参数信息
请求方法
- GET 请求获取Request-URI所标识的资源
- POST 在Request-URI所标识的资源后附加新的数据
- HEAD 请求获取由Request-URI所标识的资源的响应消息报头
- PUT 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE 请求服务器删除Request-URI所标识的资源
- TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT 保留将来使用
- OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
常用状态码
- 200 OK : 表明响应成功,所请求的资源发给浏览器
- 302 found : 重定向,新的请求放在了Location中,浏览器从Location中提取连接欸,重新请求。
- 400 Bad Request : 客户端的请求,不能被服务器所理解
- 401 Unauthorized : 请求未经授权
- 403 Forbidden : 服务器收到请求,拒绝提供服务
- 404 Not Found : 找不到请求资源
- 500 Internal Server Error : 服务器错误
- 503 Server Unavailable 服务器当前不能处理请求
响应消息
客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误的编码、实体元信息以及必要的实体内容。包括:
- 状态行
- 消息报头
- 响应正文
响应报头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
常用的响应报头
- Location
Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。 - Server
Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。
HTTP无状态问题
- 通过Cookie 保存状态信息 。每次请求的时候携带cookie的信息,服务端就可以知道你来自同一个浏览器。
- 通过session 保存状态信息。session是一种服务器端的机制。
cookie和session的区别
- cookie状态保存在客户端,session状态保存在服务器端
- cookie是服务器端在客户端机上存储的一小段文本,并随每次请求一起发送到服务端
- session是针对每一个用户,变量值保存在服务器中
- 从安全角度讲,session的安全性更好一些
少年听雨歌楼上,红烛昏罗帐。
壮年听雨客舟中,江阔云低,断雁叫西风。
感谢支持!
---起个名忒难