目录
HTTP协议
目前互联网结构为B/S结构(浏览器/服务器),当客户端与web服务器及逆行交互时,就存在web请求,这种请求都基于统一的应用层协议(HTTP)交互数据。
HTTP(超文本传输协议)是一种详细规定了浏览器和万维网服务器之间互相通信的规则,是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从web服务器传送到web浏览器。
1、发起http请求
URL(统一资源定位符,也就是网址):协议://服务器ip[:端口]/路径/[?查询]
http://www.xxser.com/post/httpxieyi.html
发起请求:
1、在浏览器中输入网址发起请求(获取并渲染HTML,让用户看到更直观的界面)
2、使用工具发起请求:linux系统中的curl命令,windows下载并使用curl.exe工具等(直接获取HTML)
因为Windows下的中文环境编码是GBK,如果网页是其他的编码,使用curl就会出现乱码
解决办法1:打开cmd,输入chcp 65001,指示当前的code页是65001,也就是uft-8的那个页。然后再curl.
解决办法2:下载ICONV,然后配置ICONV的环境变量,在使用CURL的时候用上iconv就可以解决乱码的问题
2、协议详解
HTTP遵循请求(request)/应答(response)模型。
请求
请求行(请求方法):方法+域名根目录下的访问文件+http版本
post /login.php HTTP/1.1
1、Get
如果请求资源为动态脚本(php/jsp)返还的文本时web容器解析后的html源代码,而不是这个源文件(php/jsp)
在服务器脚本语言中可以选择性接收来自客户端的参数,一般有开发者内定好的参数项目才会接收
2、post
与get方法类似,最大区别在于get方法没有请求内容,post方法有。用于向服务端发送大量数据,get会将发送数据显示在浏览器端,post不会,安全性会高一些。
传递参数在请求正文中。
请求头(消息报头),到空白行结束,由客户端设定:请求的主机地址+浏览器标识+内容
Host:www.xxser.com
User-Agent:Mozilla/5.0(windows NT 6.1;rv:15:0)......
host:主要用于指定被请求资源的internet主机和端口号
User-Agent:允许客户端将操作系统、浏览器和其他属性告诉服务器
referer:用户从什么地方来到本页。
cookie:表示请求者身份
range:多线程下载一定会用到此请求头
bytes=0~499:500字节
x-forward-for:XXF头,代表请求端的ip,可以有多个,逗号隔开
accept:指定客户端接收哪些MIME类型的信息,如accept:text/html表明客户端希望接收HTML文本。
accept-charset:指定客户端接收的字符集,没有设置这个则默认是任何字符集都可以接收
last-modified:服务器通过这个头告诉浏览器,资源的最后修改时间
location:服务器通过这个头告诉浏览器去访问哪个页面,浏览器接收到这个请求后,通常会立刻访问location头只想的页面,通常配合302状态码使用。
refresh:服务器通过这里告诉浏览器定时刷新浏览器
普通头:在普通报头中,有少数报头阈用于所有的请求和响应消息,但并不用于被传输的实体明知用于传输的消息,例如Date(消息产生的日期和时间)
请求正文,可选,最常出现在post请求方法中:
Username=admin&password=admin
响应
响应行:HTTP版本+状态码+消息
HTTP/1.1 200 ok
状态码:
100-101:请求已收到,继续处理
200-206:成功处理了请求,200最常见
300-305:访问资源已被移动并告诉客户端新的资源地址。这时浏览器将重新对新资源发起请求。301重定向
400-415:客户端发送服务端无法处理的东西,比如格式错误的请求,如一个不存在的url,404请求资源不存在,400请求语法错误不能被服务器理解,401请求未授权(未登录,无权限等),403服务器收到请求但是拒绝提供服务
500-505:有效请求,但服务端内部出错。可能是运行出错,可能是网站挂了。500最常见,503服务器当前不能处理请求,可能一段时间过后会恢复
响应头(消息报头),到空白行结束:由服务器向客户端发送
Date:消息产生的日期和时间
Server:web服务器名称,攻击者会通过这里探测到服务器名称,建议在服务器端修改此头信息
Content-Length:实体报头用于向接收方指明实体正文的长度,以字节方式存储的十进制数字来表示
Content-Type:实体头用于向接收方指示实体的介质类型
Cache-Control:用于指定缓存指令,缓存指令时单向的,且是独立的。
Expires:web中的文件被用户访问(请求)后的存活时间
Content-Encoding:HTTP中用来对采用哪种编码格式传输正文进行协定的一对头部字段
Set-Cookie:服务端向客户端发送的cookie信息
Connection:允许发送指定连接的选项,如指定连接时连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接
相应正文(消息主题):服务器向客户端发送的html数据
<html>...
</html>