HTML <form> method 속성
정의와 사용법
method
속성은 폼 데이터를 어떻게 전송할지 정의합니다(폼 데이터는 action 속성이 지정한 페이지로 전송됩니다)
폼 데이터는 URL 변수로 사용할 수 있습니다(method="get") 또는 HTTP POST 트랜잭션으로 전송할 수 있습니다(method="post")
GET에 대한 설명:
- 폼 데이터를 이름/값 쌍 형식으로 URL에 추가합니다
- URL 길이 제한이 있습니다(대략 3000개의 문자)
- GET 메서드를 통해 민감한 데이터를 전송하지 마세요! (URL에서 볼 수 있습니다)
- 사용자가 결과를 책签으로 추가하고자 하는 폼 제출에 매우 유용합니다
- GET 更适合非安全数据,例如 Google 中的查询字符串
关于 POST 的说明:
- 在 HTTP 请求的正文中附加表单数据(数据不会显示在URL中)。
- 没有大小限制。
- 使用 POST 提交的表单无法被加入书签。
实例
例子 1
使用“get”方法提交表单:
<form action="/action_page.php" method="get"> <label for="fname">名字:</label> <input type="text" id="fname" name="fname"><br><br> <label for="lname">姓氏:</label> <input type="text" id="lname" name="lname"><br><br> <input type="submit" value="提交"> </form>
例子 2
使用“post”方法提交表单:
<form action="/action_page.php" method="post"> <label for="fname">名字:</label> <input type="text" id="fname" name="fname"><br><br> <label for="lname">姓氏:</label> <input type="text" id="lname" name="lname"><br><br> <input type="submit" value="提交"> </form>
语法
<form method="get|post">
属性值
值 | 描述 |
---|---|
get | 默认。将表单数据以名称/值对的形式附加到 URL:URL?name=value&name=value。 |
post | 将表单数据作为 HTTP post 事务发送。 |
详解 method 属性
浏览器使用 method 属性设置的方法将表单中的数据传送给服务器进行处理。共有两种方法:POST 方法和 GET 方法。
如果采用 POST 方法,浏览器将会按照下面两步来发送数据。首先,浏览器将与 action 属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。
在服务器端,一旦 POST 样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码。用户特定的服务器会明确指定应用程序应该如何接受这些参数。
另一种情况是采用 GET 方法,这时浏览器会与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据:浏览器会将数据直接附在表单的 action URL 之后。这两者之间用问号进行分隔。
일반 브라우저는 위의 어떤 방식으로든 폼 정보를 전송할 수 있으며, 일부 서버는 그 중 하나의 방식만을 데이터로 받아들입니다. <form> 태그의 method (메서드) 속성을 사용하여 폼 처리 서버가 데이터를 처리할 메서드를 명시할 수 있습니다. 이를 통해 POST 또는 GET을 선택할 수 있습니다.
POST 또는 GET?
폼 처리 서버가 POST 메서드와 GET 메서드 모두를 지원하는 경우, 어떤 메서드를 선택해야 할까요? 이에 대한 몇 가지 규칙이 있습니다:
- 최상의 폼 전송 성능을 얻고자 한다면, 단순한 필드만 포함된 작은 폼을 GET 메서드로 전송할 수 있습니다.
- 일부 서버 운영체제는 즉시 애플리케이션에 전달할 수 있는 명령줄 매개변수의 수와 길이를 제한하며, 이 경우 많은 필드나 긴 텍스트 필드를 가진 폼을 보내는 경우 POST 메서드를 사용해야 합니다.
- 서버 측 폼 처리 애플리케이션을 작성하는 경험이 부족하다면 GET 메서드를 선택해야 합니다. POST 메서드를 사용하면, 읽기와 디코딩 과정에서 추가적인 작업이 필요할 수 있으며, 이는 어려운 일이 아니지만, 이 문제를 처리하고 싶지 않을 수도 있습니다.
- 보안이 문제라면 POST 메서드를 사용하는 것이 좋습니다. GET 메서드는 폼 매개변수를 애플리케이션의 URL에 직접 배치하므로, 네트워크 스니퍼는 쉽게 캡처할 수 있으며, 서버 로그 파일에서도 추출할 수 있습니다. 매개변수에 신용카드 계정과 같은 민감한 정보가 포함되면, 사용자의 안전을 무의식 중에서 위협할 수 있습니다. 반면에 POST 애플리케이션은 보안 취약점이 없으며, 매개변수를 서버에 처리할 때는 최소한 암호화 방법을 사용할 수 있습니다.
- 폼 외부에서 서버 애플리케이션을 호출하고 매개변수를 전달하려면 GET 메서드를 사용해야 합니다. 이 메서드는 폼과 같은 매개변수를 URL의 일부로 포함할 수 있기 때문입니다. 반면에 POST 스타일의 애플리케이션은 URL 뒤에 추가적인 전송 과정이 있기를 원하며, 이 내용은 전통적인 <a> 태그의 내용으로는 사용될 수 없습니다.
매개변수 명확히 전달
이전의 조언들은 이 방식을 선택하는 일정한 설명으로도 사용될 수 있습니다. 예를 들어, x와 y 두 가지 매개변수만 포함된 매우 간단한 폼이 있다고 가정해 보겠습니다. 이 요소들의 값을 인코딩할 때는 다음과 같은 형식을 사용합니다:
x=28&y=66
폼이 method=GET을 사용하면 서버 애플리케이션을 참조하는 URL은 다음과 같습니다:
http://www.example.com/example/program?x=28&y=66
언제든지 전통적인 <a> 태그를 생성할 수 있습니다. 이를 통해 필요한 매개변수 값을 가진 폼을 호출할 수 있습니다. 다음과 같이 보입니다:
<a href="http://www.example.com/example/program?x=28&y=66">
단 하나의 문제는, 파라미터를 구분하는 & 기호가 엔티티의 삽입 기호 역할도 합니다. <a> 태그의 href 속성에 & 기호를 넣으면, 브라우저는 그 뒤의 문자를 해당 엔티티 대체물로 대체합니다.
이런 문제를 방지하기 위해, & 기호를 그것의 엔티티 대체물로 대체해야 합니다. 즉, "&" 또는 "&"로 대체합니다. 대체 후, 위의 서버 애플리케이션의 비 양식 예제는 다음과 같습니다:
<a href="http://www.example.com/example/program?x=28&y=66">
이렇게 해도 URL에서 & 기호를 사용할 수 없으며, 앞으로 혼란이 발생할 가능성이 있으므로, 서버가 마지막으로 세미콜론을 파라미터 구분 기호로 받아들이도록 설정을 권장합니다. 또한, 서버가 이러한 기능을 지원하는지 서버 문서를 확인할 수 있습니다.
브라우저 지원
크롬 | 에지 | 파이어폭스 | 사파리 | 오퍼라 |
---|---|---|---|---|
크롬 | 에지 | 파이어폭스 | 사파리 | 오퍼라 |
지원 | 지원 | 지원 | 지원 | 지원 |