HTTP

210 阅读5分钟

1.URL

1)什么是URL

URL(统一资源定位符),用于定位服务的资源在哪,发送的Request去哪里找,然后服务器再做出相应的逻辑响应(Response)。

统一资源定位符的标准格式如下:

[协议类型]://[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]

统一资源定位符的完整格式如下:

其中http是协议;127.0.0.1,是我的服务器地址; 8080是服务器上的端口号; /f是路径;其中/ 分隔目录和子目录。 ?kw=%BA%A3%D4%F4%CD%F5&fr=ala0&tpl=5是查询;? 分隔实际的URL和参数,这里很容易出错。虽然数据(除了数字)都会转换成以UTF8的URL编码,& 用于参数间的分隔符,= 等于(不是赋值),初次之外,还有+表示空格,#表示书签。

格式需要注意的地方: 1)一般使用Tomcat和nginx等服务器启动的项目,需要查看端口是否正确。 2)协议名http/https,域名或者ip地址是否有误? 3)/分割符,以 / 区别路径中的每一个目录名称。这样我们我们可以根据URL一层层的去查找我们项目的目录,分析出现404可能的原因是否为路径错误或者资源不存在。 4)&表示的参数,可以预估其值是否达到预期。

2.一次完整Http请求

总体流程如下: 域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

3.常见的http状态码

1XX //信息提示
2XX //成功
3XX //重定向
4XX //客户端错误
5XX //服务端错误
## 常用状态码

-   200`OK`//成功,代表服务端已经收到并成功处理了请求,通常来说,携带了请求的数据/文件/响应头
-   301`Moved Permanently`//永久转移,当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。
-   400`Bad Request`//错误请求,通用的客户端错误状态,就是当其他4xx状态码不适用时,使用的`备胎`错误码。通常也表示`服务器收到客户端通过PUT或者POST请求提交的表示,表示的格式正确,但服务器不懂它什么意思`的情况。
-   404`Not Found`//没有被找到,表示请求的资源不存在。
-   409`Conflict`//请求冲突。请求会导致服务器的资源处于冲突状态。例如试图修改某个字段,但于已存在的数据冲突了。
-   410`Gone`//已请求过,![\color{#FF3030}{404}](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1975ca2162e849759028355d0dc2a1d1~tplv-k3u1fbpfcp-zoom-1.image)类似,但它提供的有用信息更多一些。服务器接受到请求,但该资源现在不存在了的情况。服务器不知道该资源的新URI,服务器要是知道该URI的话,它就发送响应代码301一样,都有暗示客户端不应该再请求该URI的意思,不同之处在于:410只是指出该资源不存在,但没有给出该资源的新URI。
-   500`Internal Server Error`//服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。

4.HTTP方法

1.GET:GET方法是用来请求URL指定的资源。指定资源经服务器端解析后返回响应内容

2.POST:发送数据给服务器

3.HEAD:HEAD方法和GET方法的行为很类似,但是服务器在响应中只返回首部,不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。

4.OPTIONS:OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支撑哪些方法。

5.PUT:与GET从服务器读取文档想法,PUT方法会向服务器写入文档。

6.DELETE: DELETE方法所做的事情就是请服务器删除请求URL所指定的资源。

7.TRACE:TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成什么样子了。

5.GET与POST的区别

1.GET是用于获取数据的,POST一般用于将数据发给服务器之用。

2.get和post在本质上都是tcp链接,但由于http协议和浏览器或者服务器的限制,从而使它们在应用过程中产生了差别,但是它们中还有一个较大的区别:get在请求时发送一个数据包,会将header和data一起发送过去,而post会产生两个数据包先发送header,服务器返回100,然后在发送data,服务器返回200

3.客户端向服务器发起的请求如果没有引起服务器端任何的状态变化,那么他就是安全的。而post请求来提交数据必然会是服务器发生相应的变化。所以get请求相对服务器而言,是安全的,post则不安全的。

4.post都是不可缓存的,但get是可以缓存的