其中介绍到了Curl 因为老师简单介绍了其中的 一些命令的使用 来查看http的通信情况!
我这里先贴一张curl 中的命令参数列表:https://curl.haxx.se/docs/manpage.html
其中博文中主要围绕下面几个问题进行讲解:
- HTTP 请求包括哪些部分,如何用Chrome开发者工具查看 HTTP 请求内容
- HTTP 响应包括哪些部分,如何用Chrome开发者工具查看 HTTP 响应内容
- 如何使用 curl 命令
HTTP请求包括三部分,分别是:
1.请求行 request line
其中请求行中包含了三个内容分别是:
1.method
其中的method中包含了一下几种方法!
1.get (常用)
2.post (常用)
3.head
4.delete
5.put
6.patch
7.options
2.request-URI 请求的连接
3.http-version Http版本信息!
2.请求头 request header
3.数据体 Data body
01|请求行
其中还有一些method具体方法没有补充,具体的请见下图:
方法 | 应用场景 |
---|---|
get | 用于请求URI获得资源 |
post | 用于添加新的资源 |
put | 用于修改某个内容 |
delete | 删除某个内容 |
connection | 用于代理进行传输例如SSL |
options | 询问可以执行哪些方法 |
patch | 部分文档更改 |
propfind | 查看属性 |
proppatch | 设置属性 |
mkcol | 创建集合 |
copy | 拷贝 |
move | 移动 |
locak | 加锁 |
unlock | 解锁 |
trace | 用于远程诊断服务器 |
head | 类似于get,用于检查对象是否存在永遇得到元数据! |
- 但是一般在我们开发当中还是实际生活中运用到的方法也只有几个而已,
用到method一般来看get和post比较多!
所以我们讲一讲GET和POST
get方法:
1.主要是在url中说明请求的资源,例如说https://www.baidu.com/ws?name=ProbeDream?age=20其中?后面的数据就是请求的数据,并且可以连接使用&,但是一般来讲如果get方法提交表单数据(常见情况下提交表单数据还是比较多的!)但是不建议这么做,
2.不建议在提交数据或者是提交表单数据的时候使用get方法进行数据的提交,提交的同时在浏览器地址栏(url地址栏)里面所提交的数据会是以明文的形式显示出来,还能够通过查看历史记录的url来获取你所提交的数据,安全性相较而言就没有post那么高了!下面我men来说说为什么没有post请求那么高?为什么?
post方法:
post方法提交表单和get方法提交表单相比较:
1.get明文传输信息时附加在url上面的,但是如果说用post传输的话就安全许多!
2.get方法还是有传输限制的,是3k但是post需要指定传输类型!
3.get一半多用于获取数据,根据get变量的不同调用不同的数据!(一般get的话调用不同的REST API拿到不同的数据!),但是post的话多用于数据的提交操作,提交用户所输入的数据!
那么在日常的开发或者是使用过程中,大多数用到的是get以及和post方法比较多的话,那么两者有什么区别吗?
1.get的话是向服务器发索取数据的一种请求!
2.post的话是向服务器发提交数据的一种请求!
3.get请求的参数会随url后进行传递,请求的数据会附和在URL之后,并且以?分割URL和传输数据,参数值之间以&相连!其中%xxxx%中的xx为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送如果是空格的话转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密!
4.URL传输的数据是有限制的,因为Get是通过URL来提交数据,nameGet可提交的数据量和URL的长度就有直接的关系了,不同的浏览器对URL的长度是有限制的,并且限制是不同的!
5.Get请求的话里面的数据会被浏览器缓存起来的,并且用户名和密码将明文出现在URL上面,并且通过查看历史记录是可以看到相关内容的!在服务器端需要使用Request.QueryString(),Request.getParameter();(Java中的通过请求对象获取对应的参数拿到对应的数据!)来获取get方式提交过来的数据!
6.Post请求则作为Http消息的实际内容发送的Web服务器,数据放置在请求体重,post没有限制提交的数据Post比Get更安全,当数据是中文或者是不敏感的数据,则用get因为使用get参数会显示在URL地址栏,但是如果说需要传输的是敏感的数据的话(账号密码类等敏感的信息!)则需要使用post请求来进行通信!
7.post表示可能修改服务器上的资源的请求,在服务器端,用post方式提交的数据只能够使用Request,from来获取!
统一资源标识符(URI):这一点的话还是比较好理解的!通过URI提供的一种途径,用于在特定的名字空间资源的标识,以补充网址!详情请见WIKI:URI
其中的HTTP Version通过英文就能够表述了就是HTTP的版本信息!
02|请求头
请求头包含:
Accept:指浏览器或其他客户可以接爱的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式。
User-Agent:是客户浏览器名称
Host:对应网址URL中的Web名称和端口号。
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us,指英语。
connection:用来告诉服务器是否可以维持固定的HTTP连接。http是无连接的,HTTP/1.1使用Keep-Alive为默认值,这样,当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。
Referer:表明产生请求的网页URL。如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork/search,在向服务器发送的GET/icwork/search中的请求中,Referer是http://hostname:8080/icconcept/index.jsp。这个属性可以用来跟踪Web请求是从什么网站来的。
User-Agent:是客户浏览器名称。
Content-Type:用来表名request的内容类型。可以用HttpServletRequest的getContentType()方法取得。
Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式。
但是有些信息在一些浏览器中可能看不到,但是常见得请求头信息属性有:
在这里我贴一张 Chrome Developer Tools的图片:
[图片上传失败...(image-a30421-1571725418928)]
和上述描述基本上是差不多的!
03|数据体
就是我们所传入的数据啊,我通过以下例子来体现比如这样:
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E5%89%8D%E7%AB%AF&oq=HTTP%25E8%25AF%25B7%25E6%25B1%2582%25E5%258C%2585%25E5%2590%25AB%25E5%2593%25AA%25E4%25BA%259B%25E9%2583%25A8%25E5%2588%2586%253F&rsv_pq=d53b5e8e000360f8&rsv_t=1ecbeD6%2FAEnGXYYkQZNZ46P43ovobcORGP16xytFCkP9olOmcTLZyiOH120&rqlang=cn&rsv_enter=1&rsv_sug3=8&rsv_sug1=5&rsv_sug7=100&bs=HTTP%E8%AF%B7%E6%B1%82%E5%8C%85%E5%90%AB%E5%93%AA%E4%BA%9B%E9%83%A8%E5%88%86%3F
[图片上传失败...(image-ae3a-1571725418928)]
就类似于这样,当然我再浏览器看到的效果和在地址栏中拿到的信息不一样但是其中所请求的信息就是我们所传入的数据体!
下面我们来说说相应的内容:
http响应体由三部分组成:
http响应由三个部分组成分别是状态行,响应头,响应正文。
状态行是由:HTTP-Version+Status-Code+Reason-Phrase
比如:HTTP/1.1 200 ok
分别表示http版本 + 状态码 + 状态代码的文本描述
状态码:
1xx | 指示信息–表示请求已接收,继续处理 | |
---|---|---|
2xx | 成功–表示请求已被成功接收、理解、接受 | 请求正常处理完毕 |
3xx | 重定向–要完成请求必须进行更进一步的操作。 | 需要进行附加操作以完成操作 |
4xx | 客户端错误–请求有语法错误或请求无法实现。 | 服务器无法处理请求 |
5xx | 服务器端错误–服务器未能实现合法的请求。 | 服务器处理请求出错 |
响应头:包含服务器类型,日期,长度,内容类型等
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:13:33 GMT
Content-Type:text/html
Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
Content-Length:112
我们看看在Chrome Developer Tools中的相应内容信息:
[图片上传失败...(image-72b81d-1571725418928)]
其中在Chrome开发者工具中也是大致的情况!
Tips:
然后说说如何使用Chrome查看http请求与响应:
打开 Network
地址栏输入网址
在 Network 点击,查看 request,点击「view source」
点击「view source」
点击「view source」
点击「view source」
终于点了?可以看到请求的前三部分了
如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
我话不多说就直接上图了:
[图片上传失败...(image-a267e-1571725418928)]
[图片上传失败...(image-163fe0-1571725418928)]
[图片上传失败...(image-9fdfa-1571725418928)]
如何使用Curl工具or 命令?
1.使用explainshell 查看一些curl的基本用法!
2.使用curl -help或者是进入到出curl的官网查看信息!
我下面贴出当时GitBash中用到Curl的截图,如下所示:
[图片上传失败...(image-6eccba-1571725418928)]
[图片上传失败...(image-cbb8f3-1571725418928)]
[图片上传失败...(image-86bb26-1571725418928)]
前面的命令由于没有表示,我就简单介绍几个常用命令:
命令 | 功能 |
---|---|
-x | 就是自定义请求方法 POST,GET,PUT,PATCH,DELETE等请求方法! |
-s | 无声或安静模式。不显示进度表或错误消息。 |
-H | 自定义头信息传递给服务器! |
-v | 可以显示一次http通信的整个过程! |
-d | HTTP POST方式传送数据 |
以下命令我示范一下:
curl -s -v -H "ProbeDream" -- "https://www.baidu.com"
curl 模拟测试www.baidu.com的信息 并且定义了一组头信息给服务器的同时,开启了静默模式不现实进度表和错误信息,并且通过-v显示了http通信的整个过程!
curl -X POST -s -v -H "ProbeDream:asd" -- "https://www.zhihu.com"
本命令是用了-X 定义了请求方法 并且给定了一组自定义的请求头信息!
curl -X POST -d "1234567890" -s -v -H "gnaliu: xxx" -- "https://www.baidu.com"
本命令使用了POST的请求方式提交数据,并且定义了一组数据 以POST的方式传送数据!
结尾
可能在有些地方,本人可能总结的不是很到位并且借鉴了别人对于HTTP请求相应的一些内容,如果有什么不对的地方还请指正!
网友评论