一、HTTP请求
请求中包含的内容
一个请求行,若干个消息头(请求头),空格,数据部分。
HTTP请求的种类
GET,POST,HEAD等等。
GET请求分析
请求行
首先是请求行,请求行有三部分,用空格隔开,最前面的是请求方式,中间的是请求资源,最后是版本号。
讲讲中间的部分,如下:
GET /test?username=11&phone=11111111111111 HTTP/1.1
中间test是浏览器的请求,来源如下,这是一个表单提交。GET提交的特点就是数据部分会在浏览器的URL中显示,不安全而且提交长度有限制。
<form method="get" action="http://192.168.1.222/test">
"?"后面的是提交的数据部分,是一个键值对,不同键值对用&隔开。
请求头
我只讲一个地方,就是User-Agent。
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
有些应用想要访问web服务器网站,这个User-Agent不对,导致服务器不搭理,正确做法就是伪装成浏览器,也就是把User-Agent后面改成跟普通浏览器一样即可。
POST请求分析
请求行
跟GET请求相比,中间没了数据部分。
POST /test HTTP/1.1
请求头
我也只讲一个地方就是Content-Type。Content-Type里面有post提交的方式,一共有四种。
Content-Type: application/x-www-form-urlencoded
数据部分
与GET相比较,POST数据部分是有数据的,如:
username=11&phone=11111111111111
POST提交的四种方式
表单提交
请求头部分包含
Content-Type: application/x-www-form-urlencoded;
数据部分
username=11&phone=11111111111111
JSON提交
请求头部分包含
Content-Type: application/json;
数据部分
{"title":"test","sub":[1,2,3]}
XML提交
请求头部分包含
Content-Type: text/xml
数据部分
<!--?xml version="1.0"?-->
<methodcall>
<methodname>examples.getStateName</methodname>
<params>
<value><i4>41</i4></value>
</params>
</methodcall>
文件提交
请求头部分包含
Content-Type: multipart/form-data;
数据部分
-----------------------------7e333a181a0a4e
Content-Disposition: form-data; name="file"; filename="aa.txt"
Content-Type: text/plain
åèå½æ°ï¼ååå½æ°ï¼èå½æ°
PCBï¼çº¢é»æ ï¼epollï¼kpmï¼å®å¨èåï¼sshï¼Docker
cpå¤å¶æ件夹
mvdir
äºå¡é离
åå管ç
-----------------------------7e333a181a0a4e--
二、HTTP响应
HTTP响应包含的内容
一个状态行,若干个消息头,以及数据部分
HTTP响应内容分析
状态行
状态行分为三部分,HTTP版本(HTTP/1.1)、状态码(200)以及消息“OK”。
HTTP/1.1 200 OK
五种状态码:
1xx:信息提示,表示请求已被成功接收,继续处理。
2xx:请求被成功提交。
3xx:客户端被重定向到其他资源。
4xx:客户端错误状态码,格式错误或者不存在资源。
5xx:描述服务器内部错误。
数据部分
数据部分返回服务器给的html网页。
<!DOCTYPE html>
<html>
<head>aa
</head>
<body>aa
</body>
</html>