HTTP全称:HyperText Transfer Protocol,超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
在服务器与浏览器的交互中:浏览器负责发起请求,服务器在 80 端口接收请求,并负责返回内容(响应),浏览器负责下载响应内容。而HTTP 的作用就是指导浏览器和服务器如何进行沟通。
首先我们来看一下请求
请求的格式
1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据
比如对百度的请求
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: BAIDUID=C3BB0A50CD3BA25E2DEF
请求主要有以下特点
1、请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
2、第三部分永远都是一个回车(\n)
3、动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
4、请求的路径包括查询参数(https://www.baidu.com/s?wd=hello&rsv_spt=1#5,/s?wd=hello&rsv_spt=1
就是请求的路径,?wd=hello就是查询参数。)
5、请求的路径不包括锚点(#5就是锚点),锚点是给浏览器识别传输的。
6、如果你没有写路径,那么路径默认为 /
7、第 2 部分中的 Content-Type 标注了第 4 部分的格式
请求动词
- GET:请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.
- POST:用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
- PUT:请求有效载荷替换目标资源的所有当前表示。
- PATCH:用于对资源应用部分修改。
- DELETE:删除指定的资源。
- HEAD:请求一个与GET请求的响应相同的响应,但没有响应体。
- CONNECT:建立一个到由目标资源标识的服务器的隧道。
- OPTIONS:用于描述目标资源的通信选项。
- TRACE:沿着到目标资源的路径执行一个消息环回测试。
GET和POST请求方法的区别
- 最直观的就是语义上的区别,get用于获取数据,post用于提交数据。
- GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,POST把提交的数据则放置在是HTTP包的包体中。
- GET的长度受限于url的长度,而url的长度限制是特定的浏览器和服务器设置的,理论上GET的长度可以无限长。
- POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力
- 在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。
- POST的安全性要比GET的安全性高
在看一下响应
响应的格式
1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
比如百度的响应
HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xc5e647af000acdee
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html
......
......
关于响应状态码
1开头,不常用
2开头,表示成功
3开头,表示重定向,浏览器需要执行某些特殊的处理以正确处理请求。
4开头,表示你出错了
5开头,表示服务器出错了
常用HTTP状态码
- 200 OK 从客户端发送的请求在服务端被正常处理了。
- 204 No Content 服务器接受的请求已成功处理,但返回的响应报文的主体部分不包含实体(浏览器页面不更新,仅发送信息给服务器)
- 206 Partial Content 客户端进行了范围请求,而服务器成功执行了这部分请求
- 301 Moved Permanently 永久性重定向,请求的资源已经分配了新的URI,以后应该使用资源现在所指的URI
- 302 Found 临时性重定向,请求的资源临时分配了新的URI,希望用户本次可以使用新的URI访问
- 304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存,不包含任何响应的主体部分
- 400 Bad Request 请求报文中存在语法错误
- 401 Unauthorized 请求需要有通过HTTP认证的认证信息。另外如果之前已进行一次请求,则表示用户认证失败
- 403 Forbidden 对请求资源的访问被服务器拒绝了,如未获得文件系统的访问授权,访问权限出现某些问题
- 404 Not Found 服务器上没有请求的资源
- 500 Internal Server Error 服务器在执行请求时发生了错误,Bug或临时故障
- 502 (错误网关) 服务器作为网关或代理,从上游服务器收到了无效的响应。
- 503 Service Unavailable 服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求
如何用Chrome 查看请求与响应
查看请求
1、打开 Network
2、地址栏输入网址
3、在 Network 点击,查看 request,
4、点击 view source,就可以看到请求的前三部分了
5、如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
查看响应
1、打开 Network
2、地址栏输入网址
3、选中第一个响应
4、查看 Response Headers
5、点击 view source,你会看到响应的前两部分
6、查看 Response 或者 Preview,你会看到响应的第 4 部分
CURL命令模拟Http发送Get/Post请求
curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载。curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。
安装或更新curl
1、下载curl包(可以在这个网站上找最新的版本 http://curl.haxx.se/download/)
wget https://curl.haxx.se/download/curl-7.64.1.tar.gz
2、解压
tar -xzvf curl-7.64.1.tar.gz
3、编译
1 cd curl-7.64.1
2 ./buldconf
3 ./configure
4 make && make install
4、检测
使用 curl --version
(或 curl -V
) 检查安装curl版本信息
发送Get/Post请求
例如目标网站Url:
127.0.0.1:8080/check_your_status?user=Summer&passwd=12345678
使用curl发送GET请求:curl protocol://address:port/url?args
curl http://127.0.0.1:8080/login?admin&passwd=12345678
使用curl发送POST请求:curl -d "args" protocol://address:port/url
curl -d "user=admin&passwd=12345678" http://127.0.0.1:8080/login
这种方法是参数直接在header里面的