>  기사  >  웹 프론트엔드  >  HTTP 프로토콜에 대한 심층 분석

HTTP 프로토콜에 대한 심층 분석

一个新手
一个新手원래의
2017-09-21 10:36:402362검색

HTTP 프로토콜 심층 분석

http 소개http http의 요청 부분 요청의 기본 구조요청 라인자세한 설명 HTTP 요청 헤더Http 자세한 답변http 응답의 기본 구조상태 표시줄http 응답 헤더Expires, Pragma, Cache-Control에 대한 자세한 설명 캐시하지 않도록 설정Expires, Pragma, Cache-Control 설정 캐시 시간 지정 HTTP 요청 세부정보——일반 정보 헤더

http 소개

  1. http 프로토콜은 tcp/ip 프로토콜을 기반으로 합니다

  2. http 프로토콜 호출 super Text Transfer Protocol( HTTP, 하이퍼텍스트 전송 프로토콜 )

  3. http 프로토콜 버전 1.0 1.1 2.0

  4. http 1.0 짧은 연결이 되고, http 1.1을 긴 연결이라고 합니다

    길고 짧은 것은 연결 시간이 1.1 30초로 긴 것을 의미합니다. 짧은 연결은 데이터 전송 후 즉시 연결이 끊어집니다.

  5. Http는 가장 기본적인 서버와 상호 작용하는 다양한 방법을 정의합니다. 메소드에는 GET, POST, PUT, DELETE의 4가지 유형이 있습니다. URL의 전체 이름은 리소스 설명자(Resource Descriptor)라고 생각하면 됩니다. 네트워크의 리소스를 설명하는 데 사용되는 URL 주소와 HTTP의 GET, POST, PUT 및 DELETE는 이 리소스를 확인하고 수정하는 데 해당합니다. . 4개의 작업을 추가하고 삭제합니다. 이 시점에서 모든 사람은 일반적으로 GET은 리소스 정보를 얻거나 쿼리하는 데 사용되는 반면 POST는 일반적으로 리소스 정보를 업데이트하는 데 사용됩니다.

http 요청의 기본 구조

요청 라인

메시지 헤더

빈 줄

내용

Request line

요청 방법은 post, get, options, delete, Trace, put

일반적으로 사용되는 방법은 post, get

차이점은 다음과 같습니다. 게시하고 받기:

GET은 URL 또는 쿠키를 사용하여 매개변수를 전달합니다. 그리고 POST는 데이터를 BODY에 넣습니다.

GET URL에는 길이 제한이 있지만 POST 데이터는 매우 클 수 있습니다.

POST는 주소 표시줄에 데이터가 표시되지 않기 때문에 GET보다 더 안전합니다.

HTTP 요청 헤더에 대한 자세한 설명
  1. Accept: 서버에 브라우저에서 허용되는 MIME 유형을 허용할 수 있는 파일 형식을 알려줍니다.

  2. Accept-Charset: 허용되는 파일 형식 브라우저 문자 집합 인코딩

  3. Accept-Encoding: gzip, 압축과 같은 특정 형식의 압축 데이터를 허용할 수 있습니다. 브라우저가 디코딩할 수 있는 데이터 인코딩 방법

  4. Accept-Langage: 브라우저가 지원하는 언어

  5. Host: 내가 찾고 있는 호스트가 누구인지 나타냅니다

  6. If-Wodified-Since: 요청한 파일의 시간이 포함된 로컬 캐시에 요청할 파일이 있는지 서버에 알립니다. // 서버는 이 요청을 받고 시간을 비교하여 파일이 요청한 파일인지 확인합니다. 브라우저가 변경되었습니다. 변경 사항이 발생하면 새 파일이 브라우저로 전송됩니다. 데이터는 변경 없이 다시 전송되지 않습니다. //참고: 요청한 콘텐츠가 지정된 날짜 이후에 수정된 경우에만 반환되며, 그렇지 않으면 304"Not이 반환됩니다. Modified" 응답.

  7. Referer: 내가 어디에서 왔는지 서버에 알려줍니다. 이 메시지 헤더는 종종 핫링크를 방지하는 데 사용됩니다. 핫링크를 방지하는 방법에 대한 개인적인 이해:

    핫링크(Hotlinking): 핫링크란 서비스 제공자 자체가 서비스를 제공하지 않는, 기술적 수단을 통해 최종 사용자에게 유익한 다른 인터페이스(예: 광고)를 우회하고, 자신의 웹사이트에서 다른 서비스 제공자의 서비스를 최종 사용자에게 직접 제공하는 콘텐츠를 말합니다. , 수혜자는 리소스를 제공하지 않거나 매우 적은 양의 리소스를 제공하는 반면, 추천자의 가치는 연결을 클릭할 때 발생합니다. Referer.startWith("internal path");

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{        // 防止乱码      response.setContentType("text/html;charset=utf-8");        // 获取输出流      PrintWriter out = response.getWriter();        // 获取用户浏览器 Referer      String referer = request.getHeader("Referer");      if(referer == null || referer.startsWith("http://localhost:8080/本地内部用户web应用路径")){          response.sendRedirect("其他非真正资源网页");          return;      }else{                }      // 内部资源文件        。。。。。。。。。。。  }

    User-Agent: 서버, 브라우저 커널에 알려줍니다. 헤더 정보

  8. Connection: 서블릿이 여기의 값을 "Keep-Alive"로 확인하거나 요청이 HTTP 1.1을 사용하고 있음을 확인하는 경우(HTTP 1.1은 영구 연결을 수행함)를 나타냅니다. 기본값), 페이지에 여러 요소(예: 애플릿, 이미지)가 포함되어 있는 경우 지속적인 연결을 활용하고 다운로드 시간을 크게 줄일 수 있습니다. 이를 위해서는 Content-Length 헤더를 보내려면 서블릿이 있어야 합니다. , 가장 간단한 구현 방법은 다음과 같습니다. 먼저 내용을 작성합니다. ByteArrayOutputStream을 사용하여 실제로 내용을 쓰기 전에 크기를 계산합니다.

  9. 날짜: 브라우저가 http 요청을 보낸 시간입니다.

  10. Content-Length: 요청 메시지 본문의 길이를 나타냅니다.

  11. UA-Pixels, UA-Color, UA-OS, UA-CPU: 일부 버전의 IE 브라우저에서 전송되는 비표준 요청 헤더로 화면 크기, 색상 깊이, 운영 체제 및 CPU 유형을 나타냅니다.

Http 응답 세부정보

http 응답의 기본 구조

상태 줄

여러 메시지 헤더

한 줄

엔터티 콘텐츠

상태 줄

형식: http 버전 번호 상태 코드 이유 설명719f572dc95af346278bdd6251cfc5d3

예: HTTP /1.1 0 알겠습니다

상태 코드는 요청에 대한 서버의 처리 결과를 나타내는 데 사용됩니다. 3차원 십진수입니다. 응답 상태 코드는 5가지 범주로 구분됩니다.

상태 코드 의미
100~199 요청이 성공적으로 수신되었음을 나타내며 클라이언트가 다음 요청을 계속 제출해야 함을 나타냅니다. 전체 처리 프로세스 완료 요청
200~299 은 요청이 성공적으로 수신되어 전체 처리 프로세스가 완료되었음을 나타냅니다. 일반적으로 사용되는 200
300~399 요청을 완료하려면 클라이언트가 요청을 더욱 구체화해야 합니다. 예를 들어 요청한 리소스가 일반적으로 사용되는 새 주소로 이동되었습니다. 302, 307
400~499 클라이언트의 요청에 오류가 있습니다. 자주 사용하는 404
500~599 서버측에서 에러가 발생했습니다. 자주 사용하는 500

http 响应消息头详解
  1. Location:让浏览器重新定位到 指定的 URL

  2. Server:告诉浏览器 服务器的类型

  3. Content-Encoding:服务端能够发送压缩编码类型

  4. Content-Length: 服务器端发送的压缩数据的长度

  5. Content-Langage:服务端发送的语言类型

  6. Content-Type:服务端发送的类型及采用的编码方式

  7. Last-Modified:服务端对该资源最后的修改(更新)时间

  8. Refresh:服务端要求浏览器在指定的时间,刷新,然后访问指定的页面路径

  9. Content-Disposition:attachmen;filename=aaa.zip 服务端要求客户端一下载文件的方式打开该文件,即告诉浏览器有文件需要下载

  10. Transfer-Encoding:传送数据到客户端的方式

  11. Set-Cookie:服务端发送到客户端的暂存数据

  12. Cache-Control:告诉浏览器如何缓存页面数据

  13. Expires:告诉浏览器如何缓存页面数据 参数 -1 不缓存

  14. Pragma:告诉浏览器如何缓存页面数据

  15. Connection:维护客户端和服务端的连接关系 是否保持连接

  16. Date:服务端响应客户端的时间

Expires、Pragma、Cache-Control 设置不缓存
// 指定该页面不缓存   ie浏览器内核response.setDateHeader("Expires",-1);// 兼容设置response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");

Expires、Pragma、Cache-Control 设置 指定缓存时间
// 指定该页面缓存指定时间   ie浏览器内核response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000*24;

HTTP 请求的细节————通用信息头

通用信息头指既能用于请求,又能用于响应的一些消息头

Cache-Control:no-cache

Pragma:no-cache

Connection:close/Keep-Alive

Date:Tue,。。。

위 내용은 HTTP 프로토콜에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.