网络学习

http的学习

昨天看了mj老师关于http中请求头中参数的讲解,收获了很多,特此整理成笔记记录,方便以后的复习.

请求头部分字段

头字段名 说明 示例
Accept 服务器能够接受的响应文件类型 Accept:text/html
Accept-Charset 服务器能够接受的字符集 Accept-Charset:GB2312,utf-8:q=0.9,*:q=.0.7
Accept-Encoding 服务器能够接受的编码方式 Accept-Encoding: gzip, deflate
Accept-Language 服务器能够接受的语言列表 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
cookie 之前由服务器通过set-cookie发送的cokkie security=medium; security_level=0; PHPSESSID=cr1e09stcvf5a2ndbi4skmcde1
请求包格式讲解:

请求行:方法名 对应的url http版本 当然可以通过wireshark抓包查看最原始的请求行.

版本号 url http版本

1
GET /busuanzi?jsonpCallback=BusuanziCallback_816608165920 HTTP/1.1 

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息.

示例

1
2
3
4
5
User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

请求实体:get请求中不存在请求实体,post请求中请求实体往往保存请求的参数相关内容

优先级讲解:

各字段以逗号隔开,每个字段名的值可以有不同类型,实例中p,q参数的值代表优先级(权值),默认为1,值越大优先级越高.例如Accept-Charset:GB2312,utf-8:q=0.9,*:q=.0.7表示GB2312和utf-8的字符优先级为0.9,**代表除了特意指明字符以外的字符集优先级为0.7,通俗的意思就是讲客户端希望优先接收到Charset:GB2312,utf-8的字符集,当然服务器可能会不支持这两种字符,因此会在后面默认这两种字符外的其他字符的优先级.

状态码分类
1
2
3
4
5
1xx	信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误

form表单的两种提交方式

①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,这里只介绍常用的两种方法

get请求:

参数直接跟在url后面,请求包中并没有请求实体,直接从指定的资源请求数据

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据
1
GET /service/msn/user?apikey=0QfOX3Vn51YCzitbLaRkTTBadtWpgTN8NZLW0C1SEM&activityId=B827D662-6422-42D6-9141-4FF4DF2AE8C0 //参数直接附在url后面直接请求资源.
POST 请求

请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

1
2
3
4
POST /01/vulnerabilities/sqli/ HTTP/1.1
Host: 192.168.0.28

id=2+union+select+%22%3C%3Fphp+%40eval%28%24_POST%5Bcmd%5D%29%3B+%3F%3E%22+into+outfile+%22%2Fvar%2Fwww%2Fhtml%2F5.php%22%2C2+&Submit=Submit //参数并不直接附在url后面,而是通过请求实体传输参数.

有关 POST 请求的其他一些注释:

  • POST 请求不会被缓存

  • POST 请求不会保留在浏览器历史记录中

  • POST 不能被收藏为书签

  • POST 请求对数据长度没有要求

    enctype:POST请求时,请求体的编码方式

    通常附在form表单中,默认为application/x-www-form-urlencoded编码,文件类型不支持该编码方式,当用此编码方式时会拒绝接受文件内容

    1
    <form action="/cs/login" method="post" enctype="application/x-www-form-urlencoded">

    application/x-www-form-urlencoded:请求的参数用&分隔,用=分隔键和值,字符用URL编码方式进行编码

    1
    id=2&Submit=Submit

    multipart/form-data:支持接受文件类型,文件上传必须使用这种编码方式

1
<form action="/cs/login" method="post" enctype="multipart/form-data">