HTTP的请求与响应

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里面的

你可能感兴趣的:(HTTP的请求与响应)