自学网络编程第一天- HTTP基础:基础原理、Request请求、Response应答

本文详细讲解了HTTP的基本原理,包括请求的三种方法GET、POST和HEAD,重点介绍了GET和POST请求的格式、用途和安全性。同时剖析了HTTP响应的结构,涉及状态码、响应头和页面渲染的区别,以及服务器渲染和浏览器渲染的概念。
摘要由CSDN通过智能技术生成

基础原理

我们通过浏览器浏览一个网站,其具体的流程是这样的:

  1. 浏览器向 URL 发送 HTTP 请求
  2. 服务器接收到请求,查看请求内容
  3. 根据请求内容准备数据
  4. 将数据以 HTTP 应答形式发回
  5. 浏览器收到应答,分析应答内容
  6. 根据应答内容渲染并呈现页面
  7. 用户进行操作
  8. 浏览器判断用户的操作,是发送给页面脚本处理还是发送回服务器处理

大致流程是这样的,但是具体上还有许多需要处理的细节,比如说URL的域名解析、HTTP的三次握手等。基于 HTTP 的网络编程大概的流程也是这样,所以 HTTP 请求和 应答是十分重要的部分。

Request 请求

request 请求是 HTTP 协议对服务端发送的一种特殊报文形式

请求格式

请求信息由3部分构成:

  • 请求行:请求方法 URL 协议/版本
  • 请求头:请求报文头部(Request Header)信息,放置一些给服务器使用的附加信息
  • 请求体:请求正文
GET /sample.Jsp HTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

username=xxxxxx&password=xxxxxx

上方这个例子分为三部分,分别对应了 HTTP 请求信息的3部分构成。请求行,位置为第一行;请求头信息,位置为第二行到空行上方;请求体,位置为空行之下的所有。

注意:请求行中的请求方法、url、协议/版本需空格相隔。请求头每行为一条信息,使用键值对格式。

请求方式

HTTP 请求方式,HTTP1.0 定义了三种: GET, POST, HEAD;HTTP1.1 新增了六种:OPTIONS, PUT, PATCH, DELETE, TRACE, CONNECT

方法描述
GET请求指定的页面信息,并返回实体主体
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT从客户端向服务器传送的数据取代指定的文档的内容。
DELETE请求服务器删除指定的页面。
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

实际使用中,最常用的就是 GET 请求和 POST 请求。

GET 请求

get 请求是比较简单的 http 请求,直接会将发送给 web 服务器的数据放在请求地址的后面,适合于数据量少(根据浏览器不同限制不同,大概在4K左右),没有安全性要求的请求。

get 请求的参数是跟随在 url 之后的,以问号 ? 分隔 URL 和参数。参数名和参数值用等号 = 分隔,多个参数之间用 & 分隔。整个字符串是没有空格的。

get 请求的优点在于快速,便捷,请求参数都在 url 里,不需要另行解析。缺点在于传递的数据量少,且数据是显示传递,不能加密,易被解读,所以安全性差。

POST 请求

post 请求将需要发送给 web 服务器的数据经编码放到请求体中,可以传递大量数据,并且有一定的安全性,常用于表单提交。

post 请求安全性较高,可传输数据量大,数据种类多,但是请求速度慢。

请求头

请求头部信息写了一些发送给服务器的需要使用到的信息。常用的请求头信息有:

  • Accept :客户端可以接受(能够使用)服务器回发的正文的格式信息
    Accept: text/html 能够接受以文本方式写的 html 格式
    Accept: */* 能够接受所有类型
  • Accept-Encoding :客户端可以接受的编码方法,通常指压缩方法。常用的有 gzip, deflate, br 等
  • Accept-Language :客户端可以接收的语言例
    Accept-Language: zh-CN,zh;q=0.9
  • Connection :客户端和服务器之间的连接方式
    Connection: keep-alive :当一个网页打开后,TCP连接不会关闭。如果再次访问服务器上的网页,会继续使用这一条连接
    Connection: close :当 Request 完成后,立刻关闭 TCP 连接。
  • Host :主要用于指定被请求资源的主机和端口号,通常从 HTTP URL 中提取
  • Referer :主要用于告诉服务器是从哪个页面跳转过来的
  • User-Agent :客户端的操作系统和浏览器的名称、版本等信息
  • Cache-Control :缓存控制,默认为private
    Cache-Control: private :响应只能够作为私有的缓存,不能在用户间共享
    Cache-Control: public :响应会被缓存,并在多用户间共享。正常情况下,如果要求 HTTP 认证,则响应会自动设置为 private
    Cache-Control: must-revalidate :响应在特定条件下会被宠用,以满足接下来的请求,但是它必须到服务端去验证是不是仍是最新的
    Cache-Control: no-cache :响应不会被缓存,而是实时向服务器端请求资源
    Cache-Control: max-age=10 :设置缓存最大的有效时间,单位秒
    Cache-Control: no-store :在任何条件下,响应都不会被缓存,且不会被写入到客户端的磁盘里。基于安全考虑的某些敏感响应会使用
  • Cookie :发送存储的 Cookie 信息,多用来进行身份识别
  • Range :用于断点续传
    Range: bytes=0-5 :指定第一个字节的位置和最后一个字节的位置,告诉服务端想要获取的部分。

Response 应答(响应)

Response 是服务器对于 request 请求的回答,称为应答或响应

应答格式

类似请求信息的格式,应答信息也分为三部分:

  • 状态行:协议 状态码 状态信息
  • 响应头:响应报文头部(Response Header)信息,放置一些给客户端使用的附加信息
  • 响应体:服务器返回的客户端真正要用的内容,例如 html,json 等
HTTP/1,1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8

应答状态行为第一行,协议、状态码、状态信息使用空格分开。响应头为第二行至空行上一行,格式同请求头使用键值对格式。响应正文为空行下方所有。

响应状态码

具体的状态码和含义可以看这里:

HTTP请求状态码

响应头

响应头部信息写了一些发送给客户端的需要使用到的信息。常用的响应头信息有:

  • Cache-Control : 对应请求头的 Cache-Control
  • Content-Type : 回发资源文件的类型和字符编码,客户端根据这里的信息进行解码和解析。对应请求头的 Accept 。格式为 Content-Type: text/html;charset=UTF-8
  • Content-Encoding :回发数据的编码(压缩)格式,对应请求头的 Accept-Encoding
  • Date :服务器发送资源时的服务器时间,主要解决不同时区请求资源时的时间混乱问题
  • Server :服务器信息及对应版本
  • Transfer-Encoding :发送编码。服务器发送资源时候是分块的,一般发送的资源时服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送
    Transfer-Encoding: chunked :服务器分块发送的资源每一块都是独立的,都能标示自己的长度,最后一块的长度是0。当客户端读取到0长度的块时,就确定资源已经传输完成了。
  • Connection :回应请求头的 Connection。
  • Last-Modified :所请求的对象的最后修改日期
  • Etag :就是一个对象(比如URL)的标志值,就一个对象而言,比如一个html文件,如果被修改了,其Etag也会别修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供WEB服务器判断一个对象是否改变了。比如前一次请求某个html文件时,获得了其 ETag,当这次又请求这个文件时,浏览器就会把先前获得ETag值发送给WEB服务器,然后WEB服务器会把这个ETag跟该文件的当前ETag进行对比,然后就知道这个文件有没有改变了。
  • Refresh :刷新,用于重定向
    Refresh: 5;url=http://baidu.com :5秒后刷新重定向
  • Access-Control-Allow-Methods :允许哪些方法来访问
    Access-Control-Allow-Methods: GET,POST,PUT,DELETE

页面渲染

当浏览器发送一个请求后,收到应答,分析应答内容,然后将内容翻译为可供用户查看的页面,此过程成为页面渲染。页面渲染通常有两种方式:服务器渲染和客户端渲染。

服务器渲染

当服务器收到请求后,需要返回的数据和 html 信息整合在一起,统一返回给浏览器,这种方法就是服务器渲染。服务器渲染发回的就是能够直接呈现给用户的 html 信息,浏览器直接翻译就可以了。大部分网站使用的是这种方式。

浏览器渲染

当服务器收到请求后,只返回一个 html 的骨架,浏览器收到此 html 时,执行其附带的脚本,根据脚本再次向服务器请求数据。当浏览器收到返回的数据后,和之前收到的 html 骨架进行整合,再渲染呈现。这种方式就是浏览器渲染,它需要多次访问服务器。

基本上拉加载式的页面就是使用的浏览器渲染方式。

但是如果使用爬虫获取数据时,使用此种方式的页面可以直接获取数据而不用分析 html 信息,反而更方便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值