1. HTTP协议
1.1. 什么是协议?
1)协议实际上是某些人,或者某些组织提前制定好的一套规则,大家按照这个规范来,这样可以做到沟通无障碍。
2)协议就是一套规范,就是一套标准。由其他人或其他组织来负责制定的。
3)我说的话你能听懂,你说的话,我也能听懂,这说明我们之间是有一套规范的,一套协议的,这套协议就是:中国普通话协议。我们都遵守这套协议,我们之间就可以沟通无障碍。
1.2. 什么是HTTP协议?
1)HTTP协议:是W3C制定的一种超文本传输协议。(通信协议:发送消息的模版提前被制定好。)
2)浏览器 向 WEB服务器发送数据,叫做请求(request);WEB服务器 向 浏览器发送数据,叫做响应(response)。
1.3. W3C
1)万维网联盟组织
2)负责制定标准的:HTTP HTML4.0 HTML5 XML DOM等规范都是W3C制定的。
3)万维网之父:蒂姆·伯纳斯·李
1.4. 什么是超文本?
1)超文本说的就是:不是普通文本,比如流媒体:声音、视频、图片等。
2)HTTP协议支持:不但可以传送普通字符串,同样支持传递声音、视频、图片等流媒体信息。
这种协议游走在B和S之间。B向S发数据药遵循HTTP协议,S向B发数据同样需要遵循HTTP协议。这样B和S才能解耦合。
什么是解耦合?B不依赖S,S也不依赖B。B/S表示:B/S结构的系统(浏览器访问WEB服务器的系统)。
1.5. HTTP请求协议
请求行
- 第一部分:请求方式
- get
- post
- delete
- put
- head
- options
- trace
第二部分:URI
- 什么是URI?统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
- 什么是uRL?统一资源定位符。代表网络中某个资源,同时,通过URL是可以定位到该资源的。
- URI和URL什么关系,有什么区别?
- URL包括URI
- http://localhost:8080/servlet05/index.html 这是URL。
- /servlet05/index.html 这是URI。
第三部分:HTTP协议版本号
- 第一部分:请求方式
- 请求头
- 请求的主机
- 主机的端口
- 浏览器信息
- 平台信息
- cookie等信息
- ...
- 空白行
- 空白行是用来区分请求头和请求体
- 请求体
- 向服务器发送的具体数据
1.6. HTTP响应协议
- 状态行
- 第一部分:协议版本号(HTTP/1.1)
- 第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码。)
- 200:表示请求响应成功,正常结束。
- 404:表示访问的资源不存在。
- 405:表示发送请求方式与后端请求的处理方式不一致
- 以4开始的,一般是浏览器端错误导致的。
- 以5开头的,一般是服务器端错误导致的。
- 第三部分
- ok 表示正常成功结束
- not found 表示资源找不到
- 响应头
- 响应的内容类型
- 响应的内容长度
- 响应的时间
- ...
- 空白行
- 用来分割“响应头”和“响应体”
- 响应体
- 响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染,解释并执行,最终展示出效果。
1.7. 怎么查看协议内容?
使用chrome浏览器:F12,然后找到network,通过这个面板可以查看协议的具体内容。
1.8. 怎么向服务器发送GET、POST请求?
1)到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method=“post”。
2)其他所有情况一律都是get请求:
- 在浏览器地址栏直接输入URL,敲回车,属于get请求。
- 在浏览器上直接点击超链接,属于get请求。
- 使用form表单提交数据时,form标签中没有写method属性,默认就是get。
- 或者使用form表单的时候,form标签中method属性值为:method=“get”。
1.9. GET请求和POST请求有什么区别?
1)get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,“?”后面是数据。这样会导致发送的数据会显示在浏览器的地址栏上。(get请求在“请求行”上发送数据)
2)post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体”当中发数据)
3)不管你是get请求还是post请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的:
name=value&name1=value1&name2=value2
4)get请求只能发送普通的字符串,并且发送的字符串长度有限制,不同的浏览器限制不同,这个没有明确的规范。
5)get请求无法发送大数据量。
6)post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。
7)post请求可以发送大量数据,理论上没有长度限制。
8)get请求在W3C中是这样说的:get请求比较适合从服务器获取数据。
9)post请求在W3C中是这样说的:post请求比较适合向服务器传送数据。
10)get请求是安全的。get请求是绝对安全的。为什么?因为get请求只是为了从服务器上获取数据,不会对服务器造成威胁。
11)post请求是危险的,为什么?因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的。另外post是为了提交数据,所有一般情况下拦截请求的时候,大部分回选择拦截(监听)post请求。
12)get请求支持缓存,post请求支持缓存。
- 任何一个get请求最终的“响应结果”都会被浏览器缓存起来,在浏览器缓存当中,一个get请求的路径,对应一个资源。
- 实际上,你只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取,这种缓存机制目的是为了提高用户体验。
- get请求每次都去服务器上找资源:
- 只需要每一次get请求的路径不同即可。
- 在路径的后面增加一个每时每刻在变化的“时间戳”。
1.10. GET请求和POST请求如何选择,什么时候使用GET请求,什么时候使用POST请求?
1)怎么选择GET请求和POST请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想向服务器发送数据。如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。
2)大部分的form表单提交,都是POST方式,因为form表单中要填写回显敏感信息到浏览器地址栏上。(例如:密码信息)
3)做文件上传,一定是POST请求。要传的数据不是普通文本。
4)其他情况都可以使用GET请求。