美文网首页
网络基础->HTTP

网络基础->HTTP

作者: 杨0612 | 来源:发表于2020-11-24 12:53 被阅读0次
1.请求报文格式
        /***
         * GET /user HTTP/1.1             -------------------请求行
         * Host:api.github.com            -------------------Heads
         * Content-Type:text/plain        -------------------Heads
         * Content-Length:400             -------------------Heads
         */

GET:请求方法,对应get、post、deleted方法;
/user:文件路径,如果使用了代理服务器,那么文件路径就是全路径api.github.com/user,数据发送到代理服务器以后会解析头信息,然后请求转到具体的服务;
HTTP/1.1:HTTP协议,1.1是版本;
api.github.com:服务器地址;
Content-Type:请求报文类型;
Content-Length:请求报文长度,单位字节;

2.响应报文格式
        /***
         * HTTP/1.1 200 OK                -------------------状态行
         * Content-Type:application/json  -------------------Heads
         * 21234567                       -------------------Body
         */

HTTP/1.1:HTTP协议,1.1是版本;
200 :Status Code 响应码,表示正常,OK表示状态信息;
Content-Type:响应报文类型,json;

3.请求方法(GET、POST、PUT、DELETED)
GET

顾名思义,获取某个资源,请求报文如下,常用在获取用户列表等,一般是没有Body的;

        /***
         * GET /userList HTTP/1.1  
         */
POST

顾名思义,上报增加或修改某个资源,请求报文如下,常用在增加或修改用户信息等,一般是带Body;

        /***
         * POST /user/1 HTTP/1.1 
         * age=18  //Body信息,将user年龄修改成18
         */
PUT

顾名思义,上报修改某个资源,请求报文跟POST类似,常用在修改用户信息等,一般是带Body;

DELETED

顾名思义,删除修改某个资源,请求报文跟GET类似,常用在删除某个用户等,一般是不带Body;

Tips:以上说的都是规范用法,返回Restful,但是很多公司只有一种,例如无论是获取信息还是修改新,都统统使用GET,我们公司就是这样,这样用也没什么影响,只是不太规范而已。
4.Status Code

1xx:临时性信息,例如客户端询问服务端是否支持HTTP 2,如果服务端支持,则返回101,不只支持,则返回200;
2xx:成功信息;
3xx:重定向,例如请求A地址,但是地址已经失效,重定向到B地址,客户端自动请求B地址,重定向对应客户来说的无感的;
4xx:客户端错误,客户端请求引起的错误,例如未登陆、参数异常;
5xx:服务端错误;

5.Heads(Host、Status Code、Content-Type、Content-Length、Location)

Heads是对数据的描述,是数据的属性,数据的数据;
Host:请求域名,不过不是用来寻址的,因为在发送报文之前,地址就已经通过DNS查询到了,host是用来对应虚拟主机,因为一个ip主机对应多个虚拟主机(网站);
Content-Length:请求内容长度,对应二进制内容来说,长度可以用来标识内容结束;
Content-Type:请求内容类型;
(1)text/html,html文件,常用在响应,浏览器可以解析json,所以用作区分;
(2)application/x-www-form-urlencoded:纯文本普通表单,不包含二进制,常用在请求,对应Retrofit的FormUrlEncoded,一般跟POST、Field搭配使用,Field表示参数为username=rengwuxian&gender=male,跟GET不同的是,参数是body里面,Path跟GET搭配使用

POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
name=rengwuxian&gender=male

@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name, @Field("gender") String
gender);

(3) multitype/form-data,含二进制的表达,常用在请求;

POST /users HTTP/1.1
Host: hencoder.com
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundary7MA4YWxkTrZu0gW//是分隔符
Content-Length: 2382
------WebKitFormBoundary7MA4YWxkTrZu0gW//是分隔符
Content-Disposition: form-data; name="name"//第一组参数name=rengwuxian
rengwuxian
------WebKitFormBoundary7MA4YWxkTrZu0gW//是分隔符
Content-Disposition: form-data; name="avatar"; filename="avatar.jpg"//第二组参数图片
Content-Type: image/jpeg
JFIFHHvOwX9jximQrWa......

@Multipart
@POST("/users")
Call<User> addUser(@Part("name") RequestBody name, @Part("avatar")
RequestBody avatar);

(4) application/json,单项json内容

POST /users HTTP/1.1
Host: hencoder.com
Content-Type: application/json; charset=utf-8
Content-Length: 38
{"name":"rengwuxian","gender":"male"}

//请求
@POST("/users")
Call<User> addUser(@Body("user") User user);

//响应
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 234
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNl
cjE=","avatar_url":"https://avatars0.githubuse
rcontent.com/u/1?v=4","gravat......

(5) image/jpeg纯图片

POST /user/1/avatar HTTP/1.1
Host: hencoder.com
Content-Type: image/jpeg
Content-Length: 1575
JFIFHH9......

@POST("users/{id}/avatar")
Call<User> updateAvatar(@Path("id") String id, @Body RequestBody avatar);
...
RequestBody avatarBody = RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.updateAvatar(id, avatarBody)

HTTP/1.1 200 OK
content-type: image/jpeg
content-length: 1575
JFIFHH9......

Location:重定向的地址;
User-Agent:用户代理,是服务器能识别客户端的操作系统(Android、IOS、WEB)及相关的信息。
Rang/Accept-Rang:指定Body的内容范围,例如目的服务器支持分段传输,断点续传或者分段下载(迅雷)
Cache-Control:no-cache(服务器告诉服务器可以缓存,都会每次请求都要跟服务交互一下,判断资源是否失效了),no-store(不能缓存,每次都得请求服务器),max-age(在这失效日期之前都可以用缓存)
Last-Modified:服务器告诉客户端数据最后修改时间,下次客户端想利用缓存,就可以以此来询问服务器,在这时间之后,数据是否发生了变化,服务器返回没有,那么就可以使用缓存,在是Cache-Control为no-cache时使用。

REST

客户端-服务器架构、无状态、可缓存、分层架构;

Restful HTTP

该用get就用get,该用post就用post,不混用,遵循规范,那就是Restful HTTP。
http 1.0缺点:
缺点:每个TCP连接只能发送一个请求,而新建TCP连接的成本很高,导致Http/1.0新能很差。
http 1.1
优点:a. TCP链接默认不关闭,可被多个请求复用;b. 引入管道机制,可以同一个TCP连接中同时发送多个请求,不过服务器还是按顺序响应。c. 在头部加入Content-Length字段,用来区分多个请求的内容;c.在头信息增加Host来指定服务器域名,可以访问一台服务器上的不同网站。
缺点:TCP连接中的响应有顺序,服务器处理完一个回应才能处理下一个回应,如果某个回应特别慢,后面的请求就会排队等待。

相关文章

  • http网络基础

    作者:李成文;标签: 网络基础TCP/IP TCP/IP 为了理解HTTP,首先先了解TCP/IP协议族,通常使用...

  • Http 网络基础

    TCP Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区...

  • 网络基础->HTTP

    1.请求报文格式 GET:请求方法,对应get、post、deleted方法;/user:文件路径,如果使用了代理...

  • 2018-10-24day21-网络通信作业

    ======= 网络基础 http协议

  • HTTP (一.网络基础)

    为了理解 HTTP,我们有必要事先了解一下 TCP/IP 协议族。通常使用的网络(包括互联网)是在 TCP/IP ...

  • 网络编程基础--HTTP

    这些都是基础东西,掌握的比较琐碎,时不时的总结一下,体会和理解更深一点 一,HTTP协议 1,首先,HTTP协议是...

  • HTTP之网络基础

    当我们在浏览器中输入链接https://www.baidu.com/时, 就会百度的首页展示到浏览器页面中, W...

  • 网络基础篇-HTTP

    HTTP协议 1.HTTP协议的全称:超文本传输协议 2.通信过程 1> 请求 客户端 --> 服务器 请求的内容...

  • HTTP 与网络基础

    无论是前端工程师、后端工程师、客户端工程师还是测试工程师,HTTP 协议都是我们每天需要打交道的东西。但是对于大多...

  • 网络基础---HTTP协议

    笔记只是通过学习以及网上的博文对自己需要的内容进行梳理和记录。 HTTP 简单介绍 概念 HTTP协议是Hyper...

网友评论

      本文标题:网络基础->HTTP

      本文链接:https://www.haomeiwen.com/subject/wlpxvktx.html